• Home
  • 写文
  • 关于
    • jlweb Blog photo

      jlweb Blog

      occupied with moon theme of jelly

    • 详情
    • Github
    • Steam
  • 文章
    • 所有文章
    • 所有标签
  • 项目
  • 主站
search clear

IP包、TCP包、MTU、MSS

10 Dec 2023

阅读时长 ~1 分钟

编辑

1.MTU 与 MSS 只有UDP包才会在IP包时候被分片、TCP早在传输层就被MSS分段了

1.IP分片产生的原因是网络层的MTU;TCP分段产生原因是MSS. 2.IP分片由网络层完成,也在网络层进行重组;TCP分段是在传输层完成,并在传输层进行重组. //透明性 3.对于以太网,MSS为1460字节,而MTU往往会大于MSS. 故采用TCP协议进行数据传输,是不会造成IP分片的。若数据过大,只会在传输层进行数据分段,到了IP层就不用分片。 所以可以看成是这种情况:传输层协议想发送一个超过了MTI的数据报,这个时候网络层就需要对其进行分片,一般UDP和ICMP会出现分片情况,但是TCP不会出现这种情况!因为TCP使用了MSS来避免分片! IP分片只有第一个带有传输层或ICMP首部,其余的分片只有IP头。至于怎么重组就是到对端以后IP层的事情了。 若TCP报文非常长那么在IP层传输时就有可能要分解成多个短数据报片。(计算机网络谢希仁) TCP分段每个都有完整首部。 PS:所以我觉得是这样的,TCP的分段是针对应用层的数据来说的,比如使用TCP发送70KB的数据,这个时候就需要将70KB分成若干个MSS,到了网络层就不需要分片了。MSS的存在就避免了网络层分片的发生,

2.IP包分片(如UDP)后如何组装回的 基于字段“标识符”、“标志位”、“段偏移量”三位合一 image.png

  • 标志位

含有三位bit 第一位永远为零 未启用 第二位 0 1 如果为0 就是分配了分片 如果为1 就是未分配我就这一个帧 我没有兄弟姐妹 第三位 0 1 思考一下接收端怎么看有多少分片呢 就是标志位的最后一位表面我是不是最后一个分片 为1是就是还有后续分片 为0就是最后一个分片了 有一种攻击:段偏移量攻击—不断伪造ip包他就没法重组,然后就一直进行不断的重组,cpu就炸了(现在防火墙 中间位为0的都不让通过 只有010的能通过,重组都让应用层软件端重组,应用层发的时候分好片,交给应用层了) 对抓包和ip包头以及路由原理分析_路由器抓包_Ech_0的博客-CSDN博客

  • 标识符

标识符也就是id,是发送端随机生成的,主要是为了避免两个ip分片大包中的相同段偏移量子包的区分,具体而言就是标记这一片数据属于哪一个group id

  • 段偏移量

决定ip分片的先后顺序 3.NAT转换示意图 TCP Nagle算法、NAT 和 NAT 穿透 4.UDP和TCP数据包大小规范

  • UDP 协议的数据报不应该超过 MTU - 28 字节,一旦超过该限制,IP 协议的分片机制会增加 UDP 数据报无法重组的可能性
  • IP 协议会分片传输过大的数据包(Packet)避免物理设备的限制;
  • TCP 协议会分段传输过大的数据段(Segment)保证传输的性能;

5.不同MTU多设备传输路径上的妥协处理

  • 路径上的网络设备根据数据包的大小和自己的 MTU 做出不同的决定:
    • 如果数据包大于设备的 MTU,就会丢弃数据包并发回一个包含该设备 MTU 的 ICMP 消息;
    • 如果数据包小于设备的 MTU,就会继续向目的主机传递数据包;
  • 源主机收到 ICMP 消息后,会不断使用新的 MTU 发送 IP 数据包,直到 IP 数据包达到目的主机;

6.DNS为什么要求512字节数据以内 image.png

  • 以太网帧在局域网中的MTU是1500byte,但是在非局域网环境,如:internet下的时候,MTU是各个路由器进行一个配置的。所以,通常路由器默认的MTU为576字节。所以,为了适应网络环境,DNS协议在返回的数据报大于512的时候,就转化为了TCP协议。
  • 512并不是严格上界,而是考虑损耗的妥协量,最大传数据最大值应该是548=576-20-18(网络层IP数据报首部20字节,UDP报文首部8字节)


🥁-Network Share Tweet +1