轻松理解IP协议和数据报格式

  IP协议是OSI参考模型中位于网络层的一种协议,其最重要的作用就是找到网络通信的双方,分别以源IP地址和目的IP地址的方式存在IP数据报中,向上承载了传输层的数据,向下提供与数据链路层的通信。(想了解网络通信过程的童鞋,食用此文章更佳:https://blog.csdn.net/gug54/article/details/103995476)


  好了,不多bb,直接上图:

IP数据报详解之五分钟搞懂IP协议
  来,容我们一起细细品这张表~

  一、先看整体(你猜下图有几个猪鼻子):
IP数据报详解之五分钟搞懂IP协议
  1.首部固定部分:IP数据报最重要的作用就是明确通信双方,即找到客户端/服务器的IP地址,一方为源地址,另一方为目的地址,保存在首部固定部分。注:其余内容且听下文分解。
  2.首部可变部分:偷偷告诉你它的作用是规划和测试数据包传输过程中所经过的路由器,通俗讲就是源主机指定数据具体走哪条路到达目的主机!
  3.数据部分:还记得前面提到的套娃过程吗,所以IP数据报的数据部分就是传输层报文段啦!若传输层采用TCP协议,则IP数据报的数据部分就是TCP报文段首部+数据部分。

IP数据报详解之五分钟搞懂IP协议
  二、开始进入逐字节分析环节:

  1、首部固定部分:

  (1)版本:four位二进制数,告诉你该IP数据报采用的IP协议版本,因特网中目前使用IPv4协议,即版本数据为0100;注:网络设备越来越多,IP地址不够分了,所以出现了IPv6版本,慢慢将取代IPv4。

  (2)首部长度:four位二进制数,单位是字节哟!接收端可以通过此数据,知道数据部分的起始位置。问:如果首部长度填的是0101,那IP数据报首部长度是多少?
  回答5字节的同学给自己鼓鼓掌,回答错误!正确答案是20字节,为什么?因为这个数表示的是首部长度有多少个4字节数据,所以应该5*4=20!

  (3)服务类型(TOS):eight位二进制数,规定了以何种方式传输IP数据报,格式如下:
IP数据报详解之五分钟搞懂IP协议
   ① 前三位:优先权位,能表示十进制数范围是0-7,该数越大说明本数据报优先级越高,即当网络发生拥塞的时候,插个队<(^-^)>;
   ②第四位:延迟位(Delay),该位置1时,数据报请求以较短延迟传输,为0代表正常延时;
   ③第五位:高吞吐量位(Throughput),该位置1,数据报要以高吞吐量进行传输;
   ④第六位:高可靠性位(Reliability),该位置1,数据报要以高可靠性进行传输;
   ⑤最后两位作保留位;
  一般的TCP/IP协议不对TOS置位,即均为0x0000,一些重要的网际协议才会对TOS值进行设置,如下表所示:
IP数据报详解之五分钟搞懂IP协议
  (4)总长度:sixteen位二进制数,表示首部加数据部分的总长度,以字节为单位。若IP数据报没有可变部分,则首部长度为20字节,因此数据部分长度为总长度-首部长度=总长度-20字节。16位二进制数,因此理论上IP数据报总长度最大可达65536个字节,然而现实中受网络设备的限制,此长度要小得多。

  (5)标识:sixteen位二进制数,IP数据报分片与重组时使用,为啥要分片?因为一个数据链路层帧装不下那么大的一个完整IP数据报呗!分片过程如下:
IP数据报详解之五分钟搞懂IP协议
  上图中把一个1500字节的数据报分片成600+600+300字节的三个小数据报,对于这三个小数据报,它们的标识位均位为某个特定的数如200,代表这三个小数据报同属于一个原始数据报。分片后的IP数据报,数据区是原IP数据报数据区的一个连续部分,头部是原IP数据报头部的复制,但与原来未分片的IP数据报头部有两点主要不同:标志和片偏移。

  (6)标志:three位二进制数,格式如下:
IP数据报详解之五分钟搞懂IP协议
   DF:Do not Fragment,即DF=1,表示该IP数据报不能被分片。
   MF:More Fragm,即DF=0且MF=1,表示该子数据报不是原数据报分片后的最后一个数据报,最后一个子数据报MF位被置0.

   (7)片偏移:thirteen位二进制位,IP数据报被分片后,各片数据区在原来IP数据区中的位置用13位片偏移来表示。上图中分片1的偏移为0;分片2的偏移为600;分片3的偏移为1200。实际在IP地址中,由于偏移是以8个字节为单位进行计算的,因而在IP数据报中分片1的偏移是0;分片2的偏移是75;分片3的偏移是150。

   (8)生存时间(TTL):eight位二进制数,顾名思义,TTL表示了该IP数据报在网络中的“存活时间”,即还能被传输多少次。例如TTL=128,经过一个路由器该值减一,直到该字段被减为零时,数据报就gg啦,所以TTL=128的IP数据报只能传输128次。

   (9)协议:eight位二进制数,表示的是上层数据所采用的协议。IP数据报是网络层,其上层是传输层,所以接收端就可以根据协议标识把收到的IP数据报送到TCP或UDP等处理此报文的上层协议了。常用的协议标识如下:
IP数据报详解之五分钟搞懂IP协议
   举个栗子:协议标识字段数据为00000110,说明该IP数据报传输层协议是TCP协议。

   (10)首部校验和:sixteen位二进制数,用来判断IP数据报在传输过程中的正确性和完整性,它只和IP数据报的首部有关,与数据部分无关。不扯原理了,直接举栗子:
  IP首部(不包括可变部分):
   45 00 00 31:版本+首部长度+服务类型+总长度
   89 F5 00 00:标识+标志+片偏移
   6E 06 00 00:生存时间+协议+校验字段(暂定为00 00)
   DE B7 45 5D :源地址 222.183.69.93
   C0 A8 00 DC :目的地址:192.168.0.220
   首部数据全部加起来得到:3 22C4(3是进位)
   把进位加回低位: 0003 + 22C4 = 22C7
   对结果进行取反:~22C7 = DD38 —>所以校验字段填DD38
   接受方收到IP数据包时,想要检查IP数据包首部是否正确,则对IP头进行检验,方法一样:
   计算: 4500 + 0031 +89F5 + 0000 + 6E06+ DD38 + DEB7 + 455D + C0A8 + 00DC =3 FFFC ;0003 + FFFC = FFFF,首部数据全部加起来为0xFFFF,就证明IP数据报首部数据正确完整!
   总结一下:判断IP数据报首部数据有没有缺失或损坏,只要把首部所有的数据加起来,得出全一的结果则说明数据完整正确,反之则代表IP首部出事咯!

   (11)源地址:thirty-two位二进制数字,代表发送端主机IP地址;

   (12)目的地址:thirty-two位二进制数字,代表接收端主机IP地址;

  2、首部可变部分

   也称为选项字段,主要有两个功能:
   ① 用来实现对数据报传输过程中的控制,如规定数据报要经过的路由;
   ② 进行网络测试,如一个数据报传输过程中经过了哪些路由器。
   IP数据报的选项字段包含三个部分:
IP数据报详解之五分钟搞懂IP协议
   ① 复制:该位置1表示将选项字段复制到所有分片中,置0表示只有第一个分片含有选项字段。
   ② 选项类:IP选项类共有四类,配合选项号可以实现不同功能(具体功能请自行学习):
IP数据报详解之五分钟搞懂IP协议
  3、数据部分:上文提过IP数据报的数据部分就是传输层报文段的首部和数据部分,以此类推,传输层报文段的数据部分就是应用层报文的首部和数据部分,应用层报文的数据部分就是你百度的小姐姐照片…


             完结!撒花!有不对的地方欢迎各位大佬前来指正!

相关文章: