。
在TCP里,它内部会根据MSS的大小分段,这时候进入到IP层之后,每个包大小都不会超过MTU,因此IP层一般不会再进行分片。这时候发生丢包了,只需要重传每个MSS分段就够了。
TCP
MSS
MTU
但对于UDP,其本身并不会分段,如果数据过大,到了IP层,就会进行分片。此时发生丢包的话,再次重传,就会重传整个大数据包。
UDP
对于上面这种情况,使用UDP就比TCP要慢。
当然,解决起来也不复杂。这里的关键点在于是否实现了数据分段机制,使用UDP的应用层如果也实现了分段机制的话,那就不会出现上述的问题了。
TCP为了实现可靠性,引入了重传机制、流量控制、滑动窗口、拥塞控制、分段以及乱序重排机制。而UDP则没有实现,因此一般来说TCP比UDP慢。
TCP是面向连接的协议,而UDP是无连接的协议。这里的"连接"其实是,操作系统内核在两端代码里维护的一套复杂状态机。
大部分项目,会在基于UDP的基础上,模仿TCP,实现不同程度的可靠性机制。比如王者农药用的KCP其实就在基于UDP在应用层里实现了一套重传机制。
对于UDP+重传的场景,如果要传超大数据包,并且没有实现分段机制的话,那数据就会在IP层分片,一旦丢包,那就需要重传整个超大数据包。而TCP则不需要考虑这个,内部会自动分段,丢包重传分段就行了。这种场景下,其实TCP更快。
后台回复“加群”,带你进入高手如云交流群
推荐阅读:Go高性能编程技法解读容器网络|深入理解CiliumLinux下的TCP测试工具深入理解 Cache 工作原理Cilium 容器网络的落地实践【中断】的本质图解 | Linux内存回收之LRU算法Linux 应用内存调试神器- ASan深入理解 Cilium 的 eBPF 收发包路径Page Cache和Buffer Cache关系深入理解DPDK程序设计|Linux网络2.0一文读懂基于Kubernetes打造的边缘计算网络方案 Cilium 入门教程Docker 容器技术使用指南云原生/云计算发展白皮书(附下载)使用 GDB+Qemu 调试 Linux 内核防火墙双机热备常见的几种网络故障案例分析与解决Kubernetes容器之间的通信浅谈kube-proxy 如何与 iptables 配合使用完美排查入侵QUIC也不是万能的网络排错大讲解~OVS 和 OVS-DPDK 对比微软出品的最新K8S学习指南3.0下载
推荐阅读:
Go高性能编程技法解读
容器网络|深入理解Cilium
Linux下的TCP测试工具
深入理解 Cache 工作原理
Cilium 容器网络的落地实践
【中断】的本质
图解 | Linux内存回收之LRU算法
Linux 应用内存调试神器- ASan
深入理解 Cilium 的 eBPF 收发包路径
Page Cache和Buffer Cache关系
深入理解DPDK程序设计|Linux网络2.0
一文读懂基于Kubernetes打造的边缘计算
网络方案 Cilium 入门教程
Docker 容器技术使用指南
云原生/云计算发展白皮书(附下载)
使用 GDB+Qemu 调试 Linux 内核
防火墙双机热备
常见的几种网络故障案例分析与解决
Kubernetes容器之间的通信浅谈
kube-proxy 如何与 iptables 配合使用
完美排查入侵
QUIC也不是万能的
网络排错大讲解~
OVS 和 OVS-DPDK 对比
微软出品的最新K8S学习指南3.0下载
服务热线
1391-024-6332