你不得不知道的 IP 包详解(傻瓜式讲解)

写在前面的话: 

在刚开始学习网络的时候感觉一些包以及一些啥层的啥协议特别抽象,总是不能窥探其中的原理。而经过自己利用模拟软件进行网络学习环境的搭建,以及传输时的抓包分析,终于将那一层窗户纸捅破了,希望你们能坚持下去,努力会有收获的--共勉!

简介:

IP协议控制传输的协议单元称为IP数据报(IP Datagram,IP数据报、IP包或IP分组)。IP协议屏蔽了下层各种物理子网的差异,能够向上层提供统一格式的IP数据报。lP数据报采用数据报分组传输的方式,提供的服务是无连接方式。IP数据报的格式能够说明lP协议具有什么功能。IPv4数据报由报头和数据两部分组成,其中,数据是高层需要传输的数据,报头是为了正确传输高层数据而增加的控制信息。报头的前一部分长度固定,共20字节,是所有IP数据报必须具有。在首部固定部分的后面是可选字段,长度可变。

IP包具体结构:

分析条件:

 利用华为的模拟器 eNSP + Wireshark 搭建一个超级简单的网络环境

对PC2端口进行抓包,利用数据包分析IP包各个部分的具体含义。

版本:由抓包分析 为4 《---》 ipv4协议

首部长度: 这里必须要明确,因为由 ip 包分析存在可变部分,也即数据包的长度是不固定的。(一般可变部分是用不上的)

服务类型:举一个简单的例子,一台PC发数据,一个发邮件,另一个发视频通话,你觉得哪个包应该先发出去? 顾名思义当然是即时通信的优先了(视频通话先发)

这里我是使用最简单的 ICMP(网络探测包协议)ping 两台 pc 是否互通抓的包,也就不存在哪个优先级高低的问题了

总长度:如果长度>1500byte 就要进行分段传输

在IP层时:这里的 总长度最大= 2^16-1=65535(在物理层进行封装时 MTU=1500)

标识:假如发一个 5000byte 的数据包,肯定分段传输,那再接收层如何拼接分段的数据包?  --- 》 为同一类型的包打一个tag

 

  将一个 5000byte 的包拆分成了四个,查看每个包的标识都是  0x615d

标志: 判断一个被分段的数据包是否全部接收成功(通常由三个字节组成)如:这个 001 表示后面还有分段数据包

      000表示传输完成:

片偏移: 记录分段数据包在完整包时所处的位置---》 用于拼接完成的数据包

生存时间(TTL): 每经一个路由器则自减,当TTL=0时表示传输失败,等待重传。

   小技巧:如何根据 TTL 的时间判断对方的操作系统?

               windows : 128   Linux: 64   unix:255  没事的时候ping一下百度判断百度服务器的操系统是啥?

协议: 指出数据将交给那个进程处理。

     如果协议号为tcp,则接受端将数据交给传输层的进程处理 

首部检验和: 判断首部字段有没有传输错误,通常 发/接 双方进行异或操作(对数据取反码)

源地址: 发送方的 ip 地址(寄快递时发送方的地址)

目的地址:接收方地址(收快递人的地址)

可变部分:

IP首部的可变部分就是一个可选字段。选项字段用来支持排错、测量以及安全等措施,内容很丰富。此字段的长度可变,从1个字节到40个字节不等,取决于所选择的项目。某些选项项目只需要1个字节,它只包括1个字节的选项代码。但还有些选项需要多个字节,这些选项一个个拼接起来,中间不需要有分隔符,最后用全0的填充字段补齐成为4字节的整数倍。

增加首部的可变部分是为了增加IP数据报的功能,但这同时也使得IP数据报的首部长度成为可变的。这就增加了每一个路由器处理数据报的开销。实际上这些选项很少被使用。新的IP版本IPv6就将IP数据报的首部长度做成固定的。这些任选项定义如下:

(1)安全和处理限制(用于军事领域)

(2)记录路径(让每个路由器都记下它的IP地址

(3)时间戳(Time Stamp)(让每个路由器都记下IP数据报经过每一个路由器的IP地址和当地时间)

(4)宽松的源站路由(Loose Source Route)(为数据报指定一系列必须经过的IP地址)

(5)严格的源站路由(Strict Source Route)(与宽松的源站路由类似,但是要求只能经过指定的这些地址,不能经过其他的地址) [1] 

这些选项很少被使用,并非所有主机和路由器都支持这些选项。

发布了51 篇原创文章 · 获赞 65 · 访问量 3241

猜你喜欢

转载自blog.csdn.net/weixin_44678969/article/details/105496550