【IP协议(一)】——IP数据报格式及其含义,IP数据报的切分

  • 💂 个人主页:努力学习的少年
  • 🤟 版权: 本文由【努力学习的少年】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦

🚀 IP数据报格式

  • 版本:占4位,指ip协议的版本
  • 首部长度:表示IP数据报中报头的长度,可表示的最大的十进制位是15。首部长度表示的基本单位是4个字节,因此首部长度的最小值是5,也就是报头最小长度是20个字节。当首部长度是1111时,表示的是报头最大是60个字节。
  • 区分服务:占8位,用来获得更好的服务,但实际上一直没被用过。
  • 总长度:指的是一个IP数据报总的长度,也就是报头+数据。
  • 标识:占16位,在IP软件在存储器中维持着一个计数器,每产生一个数据报,计数器就+1,并将此值赋值给标识字段。当IP数据报长度超过MTU而必须进行分片,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各个数据报片最后的能正确地重装成为原来的数据。
  • 标志:占3位,但目前只有两位有意义
  1. 标志字段中的最低位为MF。MF=1即表示后面“还有分片”的数据报。MF=0表示的是这个数据报的最后一个。
  2. 标志字段中的中间一位记为DF,当DF记为1时,表示的是“不能分片”。
  • 片偏移: 占13位。片偏移指出,较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,相对于用户的数据字段,该片从何开始。片偏移以8字节为单位。这就是说,每个分片长度一定是8字节的整数倍。 
  • 生存时间 :占8位,生存时间字段常用英文缩写是TTL(Time to Live),表明的是数据报在网络中的寿命。由发出数据报圆点设置这个字段,目的是防止无法交付的数据报无限制地在因特网中兜圈子,占用网络资源。TTL以跳数作为基本单位,路由器在转发数据报中,TTL值就会-1,当TTL为0时,该数据报就会被丢弃。显然数据报能在因特网中经过的路由器的最大数值是255。若把TTL的初始值设置为1,就表示该数据报只能在本局域网中传送。
  • 协议:占8位,协议字段指出此数据携带的数据是使用何种协议,以便让使目的的IP层知道将数据部分上交到哪个处理过程。如TCP,UDP等等
  • 首部检验和: 占16位,这个字段只检验数据报的首部,不包括数据部分。
  • 源IP地址:占32位。
  • 目的IP地址:占32位。

🚀 IP数据报分片问题

在了解IP数据报分片之前,我们先思考一下IP数据报为什么要进行分片?

  • 在数据链路层当中MAC层规定了MAC帧中最多能携带数据是MTU个字节(默认的MTU值是1500个字节),那么MAC中能携带最大能携带1500个字节。如果IP层向下传递一个超过1500个字节IP数据报给mac帧,则MAC帧是不会将数据报发送出去的,所以如果在IP层中是不能将一个大小是超过MTU的IP数据报传递到MAC层,如果检测到一个IP数据报的大小是超过MTU,则IP层会将IP数据报中的数据部分进行切片。

IP层是如何将IP数据报进行分片呢?

  • 假设一个数据报的总长度为3820,其数据部分是3800,如果MTU是1420个字节,为了能让我们的MAC层能将IP报发出去,所以分片后的IP数据报不能超过1420个字节,因为IP报头是固定的20个字节,所以分片后的IP报中数据部分不能超过1400个字节,于是如下分成3片,其数据部分1400,1400,1000个字节。

 接受方主机是如何判断收到的IP报中的数据被分片过呢?

  • 如果收到一个IP数据报中的MF标志位是1,则说明该IP数据报中的数据部分被分片过,需要对数据部分进行组装。或者收到一个IP数据报中的MF标志位是0,且偏移量不是0的IP数据报,也说明该IP数据报中的数据部分也被分片过。

接收方主机是如何判断IP数据报中数据部分组装完成或者IP数据报中的数据不需要进行组装了呢?

  • 如果接收方的IP层收到一个IP数据报中的MF标志位是0,且偏移量是0,说明该IP中的数据部分不需要进行组装,如果收到是一个IP数据报中的MF标志位是0,且偏移量不是0,那么就会检测组装数据部分中是否存在缺失的情况(根据偏移量进行检测),如果组装的数据部分是连续的,那么就说明被切片的数据字段已经组装完成。

如果IP数据报中的数据部分被切片后,其中某些分片缺失后会怎么样?

  • 如果某些分片在网络中丢失后,那么接收方中的数据部分组装后是不完整的,所以代表被切分的IP数据报丢失了,所以其它的相同标识分片的数据报是会被丢弃掉,因此发送过来的数据字段就丢失了,如果上层是TCP协议,则会进行超时重传一个IP报,当然效率是会减低很多的。因此,如果将一个IP报中的数据字段被切分多个分片,是会增加该IP报丢失几率的(IP协议是没有可靠协议的),只要其中一个切片丢了,则被切分的IP报就丢了,因此是不建议将IP报进行切分。

TCP协议为了减少IP报被切分的概率,双方主机在握手阶段会交换自己的MSS,那么MSS是什么呢?

  • MSS是TCP层交互给IP层最大分段大小,不包含TCP报头,只包含数据。由于在MAC层中规定了一个最大传输单元MTU,所有的MAC帧的数据部分不能超过该MTU,因此就要求IP层不能传输超过MTU字节的IP报,但IP报中报IP报头和IP数据部分,IP数据部分是由TCP层面决定的因此,所以TCP为了减少被切分的概率,就确定一个MSS限制每一次交互给IP层的数据大小。MSS数据大小去掉IP报头和TCP报头,IP报头和TCP报头都是20个字节(不考虑扩展项)。因此:MSS数据大小=MTU-20-20.(MTU默认值是1500个字节,也可以是其它值)。

 

  • 所以双方主机在建立连接的时候会交换自己的MSS大小值,最终大小取决于双方主机的较小值,如果一台主机的MSS是1200个字节,另一台主机的MSS是1300个字节,所以双方主机MSS都取1200个字节,那么双方通信的时候TCP层面发送的数据都是1200个字节。

Ip层是如何将 IP数据报中的报头和数据部分分开的?

  • Ip层收到一个数据报,会先读取前20个字节,因为前20个字节是固定的,然后再找到首部长度判断报头中是否存在选项,如果首部长度是0101,则说明报头为20个字节,所以刚刚读取的20个字节就是报头,然后再找到总长度,数据大小=总长度-首部长度,所以接下来再读取数据大小个字节就是该数据报的数据部分。

  • 13
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
IP数据是在网络层上传输的数据单元,由IP头部和数据部分组成。IP头部包含了多个字段,每个字段都有着不同的含义。以下是IP数据头部各字段的含义: 1. 版本号(Version):指定IP协议的版本号,通常为4,即IPv4。 2. 首部长度(Header Length):指定IP头部的长度,以4字节为单位。最小值为20字节,最大值为60字节。 3. 区分服务(Differentiated Services):用于标识IP数据的优先级和服务质量。 4. 总长度(Total Length):指定整个IP数据的长度,以字节为单位。 5. 标识(Identification):用于识别IP数据的唯一标识符。 6. 标志(Flags):包含3个比特位,用于控制IP数据的分段和重组。 7. 片偏移(Fragment Offset):用于指定IP数据分段后的偏移量,以8字节为单位。 8. 生存时间(Time to Live):指定IP数据在网络中的最长生存时间,以秒为单位。 9. 协议(Protocol):指定IP数据传输时使用的协议,如TCP、UDP、ICMP等。 10. 校验和(Header Checksum):用于检验IP头部的完整性,防止头部在传输过程中被损坏。 11. 源IP地址(Source Address):指定发送IP数据的源IP地址。 12. 目标IP地址(Destination Address):指定接收IP数据的目标IP地址。 IP数据头部各字段的含义和作用都非常重要,对于正确传输和接收数据都有着至关重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值