用wireshark抓包带你详解下IP报文头

用wireshark抓包带你详解下IP报文头

前言

上一章介绍了网络层——IP地址 如何查询你电脑的IP地址?一文带你搞懂IP地址,本章介绍下IP协议报文头的格式。

我们前面介绍了主机在传输数据之前要进行封装,在网络层封装的就是是IP报文头,下面我们就一起看看IP报文头究竟包含哪些信息,这些信息又有什么作用呢?

正文

1 IP报文格式
如下图所示即为IP报文头

用wireshark抓包带你详解下IP报文头

那么IP报文头的长度为多大呢?

答:IP报文头部长度为20到60字节。其中固定部分为20字节,可变部分为0到40字节

IP报文头包含哪些信息呢?

版本字段:用于区分不同IP版本。如IPv4、IPv5、IPv6,用4bit表示,IPV4=0100。

首部长度:因为头部长度不固定(Option可选部分不固定),所以需要标识该分组的头部长度多少,用4bit表示,以4byte为单位,取值范围:5-15,即20-40byte(其他字段也是类似的计算方式,因为bit位是不够表示该字段的值)
DS字段:早期用来表示业务类型,现在用于支持QoS中的差别服务模型,实现网络流量优化。

源和目的IP地址:是分配给主机的逻辑地址,用于在网络层标识报文的发送方和接收方。根据源和目的IP地址可以判断目的端是否与发送端位于同一网段,如果二者不在同一网段,则需要采用路由机制进行跨网段转发。

分片和重组

为什么会出现分片?

将报文分割成多个片段的过程叫做分片。

网络中转发的IP报文的长度可以不同,但如果报文长度超过了数据链路所支持的最大长度,则报文需要分割成若干个较小的片段才能够在链路上传输。

任何一个物理网络都有一个最大的传输单元,物理介质传输的能力是有限制的,不可能一次可传无限的数据帧。

以太网最大的帧长为1518, IP报文1500byte + 帧头18byte = 1518byte

接收方接收到分片后如何重组?

接收端根据分片报文中的标识符(Identification),标志(Flags),及片偏移(Fragment Offset)字段对分片报文进行重组。

标识符:用于识别属于同一个数据包的分片,以区别于同一主机或其他主机发送的其它数据包分片,保证分片被正确的重新组合。

标志字段:用于判断是否已经收到最后一个分片。

第1位没有被使用。

第2位D是不分片位(DF),Do not fragment,顾名思义,不要分片,当DF位设置为1时,表示路由器不能对报文进行分片处理。

第3位M表示还有后继分片(MF),More fragment,多分片,当路由器对报分进行分片时,除了最后一个分片的MF位设置为0外,其他所有分片的MF位均设置1,以便接收者直到收到MF位为0的分片为止。

片偏移字段:标识某个分片在分组中的位置.。第一个分片的片偏移为0,第二个分片的片偏移表示紧跟第一个分片后的第一个比特的位置。比如,如果首片报文包含1259比特,那么第二片报文的片偏移字段值就应该为1260。

解决网络拥塞——TTL

数据包在网络中传输为什么会出现拥塞?

报文在网段间转发时,如果网络设备上的路由规划不合理,就可能会出现环路,导致报文在网络中无限循环,无法到达目的端。环路发生后,所有发往这个目的地的报文都会被循环转发,随着这种报文逐渐增多,网络将会发生拥塞。

TTL——解决环路导致拥塞

为避免环路导致的网络拥塞,IP报文头中包含一个生存时间TTL(Time To Live)字段。报文每经过一台三层设备,TTL值减1。初始TTL值由源端设备设置。当报文中的TTL降为0时,报文会被丢弃。同时,丢弃报文的设备会根据报文头中的源IP地址向源端发送ICMP错误消息。

协议字段

目的端的网络层在接收并处理报文以后,需要决定下一步对报文该做如何处理。IP报文头中的协议字段标识了将会继续处理报文的协议。

与以太帧头中的Type字段类似,协议字段也是一个十六进制数。该字段可以标识网络层协议,如ICMP(Internet Control Message Protocol,因特网控制报文协议)。

IP报文头中的协议字段也标识上层协议,如TCP(Transmission Control Protocol,传输控制协议,对应值0x06)、UDP(User Datagram Protocol,用户数据报协议,对应值0x11)。

2 IP报文头的作用:
IP报文头部信息用于指导网络设备对报文进行路由和分片。

  • 报文头中的信息(源和目的IP地址)可以用来指导网络设备如何将报文从源设备发送到目的设备。

同一个网段内的数据转发通过链路层即可实现(后续会讲如何通过二层实现同网段的数据通信),而跨网段的数据转发需要使用网络设备的路由功能。(后续会讲数据包如何通过路由转发的)

  • 分片是指数据包超过一定长度时,需要被划分成不同的片段使其能够在网络中传输。

3 wireshark抓包看下IP报文头

前面我们讲了如何在ENSP模拟器上通过wireshark抓包,网络工程师必备技能|如何在华为ENSP模拟器上通过wireshark抓包,本章节就不再累赘,下面直接看下下图的IP报文头的格式。
用wireshark抓包带你详解下IP报文头

从图中的IP报文头中我们可以得到哪些信息呢?

1、IP协议版本为4,报文头为20个字节,即使固定的20个字节,报文的总长度为56个字节(包括20个字节IP报文头,8个字节的UDP报文头,28个字节的数据)

2、标识符值为33865,唯一标识该数据包;标志字段值为010,表示该报文为不分片;片偏移字段为0,表示是第一个报文

3、TTL值为128,表示该报文还可以在网络中传输128跳,当报文中的TTL降为0时,报文会被丢弃。

4、协议字段为UDP,表示接收端收到该报文后,会上送给传输层UDP协议处理;

5、校验和字段为correct,表示该报文无差错

6、source为192.168.1.2 和destination为192.168.1.3 ,表示数据包从源IP地址192.168.1.2发送给目的IP地址192.168.1.3。

总结

本章主要介绍了IP的报文头格式,IP报文头是网络层封装的内容,IP报文头部主要用于指导网络设备对报文进行路由和分片,大家有疑问可以后台留言交流呀!

上一篇:研究生博客记录4,记一次单片机的简单应用


下一篇:Raspberry Pi 4 Headless Setup