1 IP服务特点
IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠的服务。
无状态:IP通信双方不同步传输数据的状态信息,因此IP数据包的发送、传输和接收都是无序的。
    缺点:无序,不可靠    
    优点:简单、高效
不可靠:不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力。发送端(转发端)一旦检测到IP数据包发送失败(如存活时间过长,数据报不正确),就通知上层协议发送失败,而不会试图重传。
              因此使用IP服务的上层协议(如TCP协议)需要自己实现数据确认,超时重传等机制以达到可靠传输的目的

2  IPV4头部结构

长度:通常为20字节,除非含有可变长的选项部分。
结构:
字段解析:
  1. 4位版本号:指定IP协议的版本,值为4。
  2. 4位头部长度:标识该IP头部有多少个32bit(4字节)。因为4位最大能表示15,所以IP头部最长是60字节。
  3. 8位服务类型(TOS):包括3位优先权字段(现在已经被忽略),4位TOS字段(只有一位能置1,分别表示最小延迟、最大吞吐量、最高可靠性、最小费用),和1位保留字段(必须置0)。
  4. 16位总长度:指整个IP数据报的长度,以字节为单位,因此IP数据包的最大长度为65535字节。但由于MTU的限制,长度超过MTU的数据报都将被分片传输,所以实际传输的IP数据报(或分片)的长度都远远没有达到最大值。
  5. 16位标识:唯一地标识主机发送的每一个数据报。其初始值由系统随机生成;每发送一个数据报,其值就加1。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识值。
  6. 3位标志字段:第一位保留,第二位"禁止分片",如果设置了这个位,IP模块将不对数据报进行分片。在这种情况下,如果IP数据报长度超过MTU的话,IP模块将丢弃数据报并返回一个ICMP差错报文。第三位"更多分片",除了数据包的最后一个分片外,其他分片都要把它置1。
  7. 13位分片偏移:分片相对原始IP数据报开始处的偏移。实际的偏移值是该值左移3位(乘8)后得到的,由于这个原因,除了最后一个IP分片外,每个IP分片的数据部分的长度必须是8的整数倍。
  8. 8位生存时间(TTL):是数据报到达目的地之前允许经过的路由器跳数。发送端设置,经过一个路由器,该值就被减一,减为0则丢弃,返回一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。
  9. 8位协议:用来区分上层协议。/etc/protocols文件定义了所有上层协议对应的protocol字段的数值。其中 ICMP:1;TCP:6;UDP:17。
  10. 16位头部检验和:发送端填充,接收端对其使用CRC算法以检验IP数据报头部在传输过程中是否损坏。
  11. 32位源端IP地址和目的端IP地址:标识数据报的发送端和接收端。
  12. 可选字段:最长40字节,因此IP头部最长是60字节。可用的IP选项包括:记录路由、时间戳、松散源路由选择、严格源路由选择。
数据报Demo分析:
字段解析:
十六机制数 十进制表示 IP头部信息
0x4 4 IP版本号
0x5 5 头部长度为5个4字节,即20字节
0x10   TOS字段分别为1000,表示最小延迟开启
0x003c 60 IP数据报总长度为60
0xa5d5   数据报的唯一标识
0x4   禁止分片
0x000   分片位移
0x40 64 生存时间为64跳
0x06 6 协议类型:TCP协议
0x96cf   头部校验和
0x7f000001   两个:分别表示源主机地址和目的主机地址

这个报是使用telnet远程登陆时抓去的,由此可见,telnet使用的是最小延时服务,默认使用传输层协议是TCP协议。IP数据报没有分片,因为没有携带任何应用程序数据。


3 IP分片
分片原因:当IP数据报的长度超过帧的MTU,将被分片传输。
分片时机:可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中被多次分片。
重组时机:目标机器的内核的IP模块。
分片和重组的信息:数据报标识、标志和片偏移。
MTU:以太网帧的MTU是1500字节。IP数据报的数据部分最多是1480字节(IP头部占用20字节)。
下图表示一个数据长度为1481字节的ICMP报文(包括8字节的ICMP头部,所以其数据部分长度为1473字节)被分片后的结果。
长度为1501字节的IP数据报被拆分成两个IP分片,第一个IP分片长度为1500字节,第二个IP分片的长度为21字节。每个IP分片都包含自己的IP头部(20字节),且第一个IP分片的IP头部设置了MF标志,而第二个IP分片的IP头部则没有设置该标志,因为它已经是最后一个分片了。原始IP数据报中的ICMP头部内容被完整地复制到了第一个IP分片中。第二个IP分片不包含ICMP头部信息,因为IP模块重组该ICMP报文的时候只需要一份ICMP头部信息,重复传送这个信息没有任何益处。1473字节的ICMP报文数据的前1472字节被IP模块复制到第一个IP分片中,使其总长度为1500字节,从而满足MTU的要求,而多出的最后1字节则被复制到第二个IP分片中。

4 IP路由
地位:核心任务
作用:决定发送数据报到目标机器的路径。
IP模块工作流程:由下图分析
从右向左分析:
  • IP模块接收到来自数据链路层的IP数据报
  • 对数据报头部做CRC校验
  • 查看是否是发给本机
  • 如果是发给本机则转交给上层应用
  • 如果不是则转交给"数据报转发子模块"
  • 如果不允许转发,则丢弃;允许转发则一些操作后交给"IP数据报输出子模块"
  • 更新路由表,"计算下一跳路由"子模块计算下一跳路由
  • 交给IP输出队列
路由表 
在机器上执行route命令或者netstat命令,可以查看路由表,下面分析一个路由表实例:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 * 255.255.255.0 U 1 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
该路由表有两个记录,每个记录都有8个字段,现在分析一下这个路由表的八个字段的含义:
字段 含义
Destination 目标网络或主机
Gateway 网关地址,*表示目标和本机在同一个网络,不需要路由
Genmask 网络掩码
Flags 路由项状态标志:
U: 活动的
H:目标是一台主机
G:目标是网关
D:重定向生成的
M:重定向修改过
Metric 路由距离,即达到指定网络所需的中转数
Ref 路由项被引用的次数
Use 被使用的次数
Iface 该路由项对应的输出网卡接口
由上边可以判断,demo中的第二个记录的目标地址是default,即所谓的默认路由项。在Flags字段,有一个G标志,说明路由的下一跳地址是网关,其地址是192.168.1.1。
第一条记录中,目标地址是192.168.1.0,指的是本地局域网。该路由项的网关地址为*,,说明数据报不需要路由中转,可以直接发送到目标机器。
IP路由机制:
路由表中的IP匹配分为三个步骤:
  1. 查找路由表中和数据报的目标IP地址完全匹配的主机IP地址。如果找到,就使用该路由项,没有找到则转步骤2。
  2. 查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址,如果找到,则使用该路由项,没有找到则转步骤3。
  3. 选择默认路由项,这通常意味着数据报的下一跳路由是网关。
路由表更新:
动态路由更新协议:BGP(边际网关协议),RIP(路由信息协议),OSPF协议

5 IP转发
前面提到,不是发送给本机的IP数据报将由数据报转发子模块来处理。路由器都能执行数据报的转发操作,而主机一般只发送和接收数据报,这是因为主机上/proc/sys/net/ipv4/ip_forward内核参数默认设置为0。我们可以通过修改它来使能主机的数据报转发功能。
#echo 1 > /proc/sys/net/ipv4/ip_forward
对于允许IP数据报转发的系统(主机或者路由器)数据报转发子模块对期望转发的数据报执行如下操作:
  1. 检查数据报头部的TTL值,如果TTL值已经是0,则丢弃该数据报。
  2. 查看数据报头部的严格源路由选择项。如果该选项被设置,则检测数据报的目标IP地址是否是本机的某个IP地址,如果不是,则发送一个ICMP源站选路失败报文给发送端。
  3. 如果有必要,则给源端发送一个ICMP重定向报文,以告诉它一个更合理的下一跳路由器。
  4. 将TTL值减1。
  5. 处理IP头部选项。
  6. 如果有必要,则执行IP分片操作。

6 重定向
ICMP重定向报文
ICMP重定向报文格式:
ICMP重定向报文的类型是:5
代码字段有4个可选值,用来区分不同的重定向类型,这里仅讨论主机重定向,其代码值为1
数据部分:提供引起重定向的IP数据报的源端IP地址;应该使用的路由器的IP地址
/proc/sys/net/ipv4/conf/all/send_redirects 内核参数指定是否允许发送ICMP重定向报文,而/proc/sys/net/ipv4/conf/all/accept_redirects内核参数则指定是否允许接收ICMP重定向报文。一般来说,主机只能接收ICMP重定向报文,路由器只能发送ICMP重定向报文。
以一个实例作为重定向小结:
手动将机器ernest-laptop的网关设置成机器Kongming20
当ernest-laptop发送IP数据报给Kongming20时,Kongming20会将数据报转发给路由器
并且回一个ICMP数据报给ernest-laptop,告诉他后面的数据报直接发给路由器吧,那条路更好。

参考资料:
《Linux高性能服务器编程》

Linux 高性能服务器编程——IP协议详解的更多相关文章

  1. Linux 高性能服务器编程——TCP协议详解

    问题聚焦:     本节从如下四个方面讨论TCP协议:     TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流     TCP状态转移过程:TCP连接的任意一 ...

  2. linux高性能服务器编程 (二) --IP协议详解

    第二章 IP协议详解 什么是IP协议:IP 协议是TCP/IP协议族的动力,它为上层提供了无状态.无连接.不可靠的服务. IP 头部信息:头部信息会出现在每一个IP数据报上,便于记录IP通信的源端IP ...

  3. linux高性能服务器编程 (三) --TCP协议详解

    第三章 IP协议详解 TCP协议是TCP/IP协议族中的另外一个重要的协议,与IP协议相比,TCP协议更高进应用层.一些重要的socket选项都和TCP协议相关.这一章主要从如下方面学习: 1)TCP ...

  4. Linux 高性能服务器编程——TCP/IP协议族

    1 TCP/IP协议族体系结构 数据链路层:     职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输.     常用协议:ARP协议(地址解析协议),RARP协议 ...

  5. 服务器编程入门(2)IP协议详解

    问题聚焦:     IP协议是TCP/IP协议族的核心协议,也是socket网络编程的基础之一.这里从两个方面较为深入地探讨IP协议:     1,IP头部信息(指定IP通信的源端IP地址,目的端IP ...

  6. linux高性能服务器编程 (一) --Tcp/Ip协议族

    前言: 在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程.多线程.以及进程池和线程池等都有诸多的疑惑.之前也有学习相关知识,但只是单纯的知识面了解.而没有真正的学习他们的来龙去脉. ...

  7. linux高性能服务器编程

    <Linux高性能服务器编程>:当当网.亚马逊 目录: 第一章:tcp/ip协议族 第二章:ip协议族 第三章:tcp协议详解 第四章:tcp/ip通信案例:访问Internet 第五章: ...

  8. 第二章 IP协议详解

    第二章 IP协议详解 2.1 IP服务的特点 它为上层协议提供了无状态,无连接,不可靠的服务 名称 简介 优点 缺点 对付缺点的方法 无状态 IP通信双方不同步传输数据的状态信息 无须为保持通信的状态 ...

  9. 【转载】TCP /IP协议详解

    首先,TCP/IP不是一个协议,而是一个协议族的统称. 里面包括了IP协议,IMCP协议,TCP协议,以及http.ftp.pop3协议等等. TCP/IP协议分层 提到协议分层,我们很容易联想到IS ...

随机推荐

  1. C++中 return,break,continue的用法

    引用:https://blog.csdn.net/smf0504/article/details/51315835 https://blog.csdn.net/ting_junhui/article/ ...

  2. 实验吧_拐弯抹角(url伪静态)&Forms

    拐弯抹角 先贴代码 <?php // code by SEC@USTC echo '<html><head><meta http-equiv="chars ...

  3. [UOJ 41]【清华集训2014】矩阵变换

    Description 给出一个 $N$ 行 $M$ 列的矩阵A, 保证满足以下性质: $M > N$. 矩阵中每个数都是 $[0, N]$ 中的自然数. 每行中, $[1, N]$ 中每个自然 ...

  4. [SDOI 2011]计算器

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  5. NKOJ4191 Trie树

    问题描述 字母(Trie)树是一个表示一个字符串集合中所有字符串的前缀的数据结构,其有如下特征: 1.树的每一条边表示字母表中的一个字母  2.树根表示一个空的前缀  3.树上所有其他的节点都表示一个 ...

  6. 【HNOI2016】序列 莫队+单调栈+RMQ

    Description 给定长度为n的序列:a1,a2,…,an,记为a[1:n].类似地,a[l:r](1≤l≤r≤N)是指序列:al,al+1,…,ar-1,ar.若1≤l≤s≤t≤r≤n,则称a ...

  7. hdu 3308 最长连续上升区间

    LCIS Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  8. [NOI2012]

    来自FallDream的博客,未经允许,请勿转载,谢谢. 一天一套noi 简直了.... 昨天勉强做完了noi2011 今天教练又丢出来一套noi2012  去掉提答还有5题 勉强做了3题  先占个坑 ...

  9. Chrome的First Paint

    前言 First paint 直译过来的意思就是浏览器第一次渲染(paint),在First paint之前是白屏,在这个时间点之后用户就能看到(部分)页面内容. 所以研究这个First Paint的 ...

  10. chrome 如何卸载干净

    安装位置C:\Users\你电脑的用户名\AppData\Local\Google,删除整个文件夹,用CCleaner扫描注册表删除无用注册表项,重启安装即可.