服务器开发系列


文章目录

  • 服务器开发系列
  • 一、计算机网络传输基础知识
  • 二、IP分片、TCP分段
    • 1.MTU 定义
    • 2. MSS 简述
    • 3. udp 或 tcp 包的最佳大小
    • 4. 如何测出当前网络最佳MTU值
    • 5. MTU 对 UDP的影响
    • 6. MTU 对TCP 的影响
    • 7. 为什么会分片、分段
  • 总结

一、计算机网络传输基础知识

OSI 七层结构:
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

七层结构如下:

网络中的数据传输过程:
数据发送应用层发送请求,需要通过硬件层发送,于是要往下层走。每经过一层,都会要给数据加上报头,最终发送出数据。在局域网中的数据都能收到数据,收到数据的主机会在链路层分析报头是否与当前主机mac地址匹配,不匹配将数据丢弃,匹配继续向上解包,每次向上发送数据要确定是发送给哪个协议。最终会在应用层收到最终的数据。

对封装和分用的理解:
在传输层,切割成数据段;
在网络层,打成IP包 数据包;
在数据链路层,切割成 数据帧。
在物理层,转变成 比特流。


二、IP分片、TCP分段

1.MTU 定义

MTU是什么?
  MTU的英文全称为Maximum Transmission Unit,中文是意思是最大传输单元。MTU就是指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位)。

MTU的大小?
在 Ethernet 中,一个标准的以太网数据帧最大1518字节,头信息有14 字节,尾部校验和 FCS 占了 4 字节,剩下数据即为MTU,最大为1500字节。
通常数据包的大小范围是在 [64 1518] 字节之间,如果除去头部开销,则实际的数据大小为 [46 1500] 字节之间。
一般情况下,数据包的大小都是在这个范围内,如果数据包小于64字节,称为碎片;
如果大于1518 字节,称为 特大数据包。这两种类型的数据包都是非正常的以太网数据包,它们将影响网络的正常运行。无论是碎片或特大数据包,都会增加网络的负载,导致网络故障的发生。所以,我们在对网络进行分析的时候,对数据包大小的判断也是不可缺少的一个环节。

2. MSS 简述

MSS(Maximum Segment Size,最大报文长度),是TCP协议定义的一个选项,MSS选项用于在TCP连接建立时,收发双方协商通信时每一个报文段所能承载的最大数据长度。
MSS是最大报文段长度的缩写,是TCP协议里面的一个概念。MSS是TCP数据包每次能够传输的最大数据分段。
为了达到最佳的传输效能,TCP协议在建立连接的时候通常要协商双方的MSS值,这个值TCP协议在实现的时候往往用MTU值代替(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以一般MSS值1460

3. udp 或 tcp 包的最佳大小

netsh interface ipv4 show subinterfaces本地 MTU 值 = 1500:
UDP 包的大小: 1500 - IP头(20) - UDP头(8) = 1472(Bytes)
TCP 包的大小: 1500 - IP头(20) - TCP头(20) = 1460 (Bytes)

4. 如何测出当前网络最佳MTU值

这条命令的意思是向 www.baidu.com(百度主页)发送一个探测请求,请求将一个不允许分割的 1480 字节的数据包发送出去。经过多次测试,可以知道www.baidu.com的最大MTU是1464字节。
ping -l 1480 -f www.baidu.com

5. MTU 对 UDP的影响

MTU 对 UDP 的影响:
一旦 UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么UDP 数据就会在网络层被分成多个IP数据报。即:发送方 IP 层就需要将数据包分成若干片,而接收方 IP 层就需要进行数据报的重组。
更严重的是,如果使用 UDP 协议,当 IP 层组包发生错误,那么包就会被丢弃。接收方无法重组数据报,将导致丢弃整个 IP 数据报。

6. MTU 对TCP 的影响

TCP 的一个数据报也不可能无限大,还是受制于 MTU,TCP 单个数据报的最大消息长度,称为MSS。TCP在建立连接的过程中,双方会进行 MSS 协商,最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度受限于数据链路层的 MTU)。双方在发送 SYN 的时候会在 TCP 的头部写入字节能支持的 MSS 值,然后双方得知对方的MSS值之后,选择较小的作为最终MSS,MMS的值就在 TCP首部的 40 字节变长选项中(kind=2)。MTU通过限制MSS(单个数据报的最大消息长度)的取值,来限制单个TCP包的长度。

7. 为什么会分片、分段

TCP/IP 协议栈中定义了MSS, 为的是提高网络的性能,因为如果让IP层分包的话,丢包后的重发没法控制,需要重传整个TCP包(浪费了网络资源)。MSS就是这个协商的结果,不能人为修改,这个MSS的大小是MTU减去TCP头,从TCPDUMP结果中我们可以看到我们的TCP协商的MSS都在1.3~1.4K字节。
UDP包,因为UDP是用IP层来分包的,所以对于UDP层来说发一个大包,收到就是一个大包,但是IP层丢了包也没有办法处理,这样就需要应用层多一点校验。

IP层协议格式:
16位标识:发送端发送的IP数据包标识字段都是一个唯一值,该值在分片时被复制到每个片中。
3位标志:
第一位保留。
第二位表示禁止分片,如果设置了该位,IP数据报长度超过MTU将被丢弃,返回错误。
第三位表示更多分片,除了最后一个分片,其它都要置它为1.。

当数据报被分片后,每个片的总长度值要改为该片的长度值。而每一个分片的有效载荷需要减去分片信息(32字节),所以如果要发送的IP数据包是4096字节(包含tcp/udp头),发送的IP数据20(IP头)+4090,将会被分三次发送:
每次发送的IP数据都为发送3次,每次1500字节。即Header + 数据部分
32(IP分包头部)+(1472-32),
32(IP分包头部)+(1472-32),
32(IP分包头部)+(1230+填充数据)。

所以TCP协议进行数据传输,是不会造成IP分片的。若数据过大,只会在传输层进行数据分包,到了IP层就不用分片。而我们常提到的IP分片是由于UDP传输协议造成的,因为UDP传输协议并未限定传输数据报的大小。

总结

通过本文的学习,应该了解了对UDP分片与TCP分段的原理与过程。

参考:https://blog.csdn.net/LearnLHC/article/details/115228649

IP分片、TCP分段相关推荐

  1. ip分片 tcp分段(转)

    为什么会有IP分片?直接原因是上层协议企图发送一段数据,其长度超过了MTU(Maxitum Transmission Unit).什么情况,或者说什么协议会尝试发送这么长的数据?常见的有UDP和ICM ...

  2. IP分片和TCP分段解析--之IP分片

    本文目录 什么是IP分片 为什么会产生IP分片 为什么要避免IP分片 如何避免IP分片 什么是IP分片 IP协议栈将TCP/UDP传输层要求它发送的,但长度大于发送端口MTU的一个数据包,分割成多个I ...

  3. 【网络协议】TCP分段与IP分片

    参考:https://www.cnblogs.com/xfgnongmin/p/10612647.html MTU前面已经说过了,是链路层中的网络对数据帧的一个限制.依旧以以太网为例,MTU为1500 ...

  4. TCP分段与IP分片

    我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 1,MTU(Maximum T ...

  5. 【网络协议】TCP分段与UDP/IP分片 (MTU最大传输单元,MSS最大分段大小)

    我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 我们先来看两个与TCP报文段分 ...

  6. IP分片和TCP分段的区别

    1.MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492个字节.链路层的这个特性称作 ...

  7. 详解IP分片与TCP分段的区别

    首先注意:一般听到的TCP分片应该称为TCP分段.IP分片与TCP分片是两个不同概念,别把IP分片与TCP分片别弄混淆了, 接下来直接划重点,两者主要区别: 1.IP分片产生的原因是网络层的MTU:T ...

  8. IP分片与TCP分段

    目录 IP分片(网络层) 1. 原因 2. 缺陷 3. 改进方式 TCP分段(传输层) 优势 备注 阅读目标 理解TCP/IP对报文的拆分逻辑 对IP协议还比较陌生的同学异步到IP协议报文详解 在TC ...

  9. 关于tcp分段和ip分片

    Maximum Segement Size (MSS) 最大分段长度 tcp会将应用层交付下来的数据分为tcp认为最适合发送的数据块(这里的最适合指的是用户可以自己配置mss长度),单位为字节,发送端 ...

最新文章

  1. 如何创建一个基础jQuery插件
  2. python 引用和对象理解
  3. 6.NFC之非NDEF格式
  4. 理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)
  5. java中保留小数位_Java中保留两位小数的方法
  6. $.extend(true,{},a,b)解析
  7. 具体解决VS“滴答数必须介于 DateTime.MinValue.Ticks 和 DateTime.MaxValue.Ticks 之间”奇怪问题...
  8. java 类型转string类型_java常用类String与其他数据类型之间的转化
  9. Bailian2786 Pell数列【数列】(POJ NOI0102-1788,POJ NOI0103-1788)
  10. fasfdfs安装记录(CentOS7)
  11. 感觉百度输入法好于搜狗输入法
  12. MySQL高级进阶(三)、InnoDB存储引擎详解
  13. C语言常见例题源代码
  14. centos7搭建使用花生壳
  15. html修改全局字体,最好CSS全局字体写法
  16. 数据分析 告诉你《飞驰人生》为什么这么燃?
  17. WebRoot目录和WebContent目录的区别
  18. GO语言实现用户注册方法(互亿无线)
  19. 阿里云服务器被恶意ddos攻击了怎么办?
  20. 嵌入式之Linux的LCD背光调节及驱动的工作原理

热门文章

  1. 不良资产案件执行难的原因
  2. 1.3 电功率和能量
  3. 2022-2028全球与中国微生物强化采油市场现状及未来发展趋势
  4. java全文检索工具_TRS全文检索开发文档及API,工具包
  5. 统信UOS安装东方通中间件Tongweb--Tomcat国产化替代
  6. [CTF] 每日一题汇总
  7. chatgpt智能提效职场办公-ppt怎么压缩文件大小
  8. 跨境电商培训机构靠谱吗?跨境电商在我国遍地开花
  9. 2021-天梯赛(cccc)比赛题解
  10. 车辆姿态角(Euler角)Pitch、Yaw、Roll 的设定