UDP细节笔记

UDP笔记

资源列表

https://zhuanlan.zhihu.com/p/101552588

1.UDP报文大小的影响因素
  • UDP协议本身,UDP协议中有16位的UDP报文长度字段,即长度不能超过2^16-1=65535字节
  • 以太网的MTU限制
  • socket的UDP发送缓存区大小

UDP包最大长度
(65535-8(UDP包头)-20(IP包头))=65507字节

UDP包理想长度
MTU = 1500字节,如果UDP包大小超过MTU则会在IP层被分包。因此如果要避免分包,UDP包最大为1500字节,减去UDP头(8字节)和IP头(20字节),UDP数据大小最大为1472字节。

2.UDP发送和接收过程

(1) 发送过程

  1. Sendto()把数据放在Send Buffer里,通知OS来取
  2. OS在适当的时候,过来取数据,并发送到网络

注意:这里UDP的Send Buffer和TCP的不一样,UDP虽然会先将数据写到socket send buffer里面,但是在数据链路层发送之后就会清除对应的数据包。而在TCP中即使发出去了也不会马上清除,等到收到了ACK之后才会清楚对应的数据包。因此,在教科书上一般会说UDP没有发送缓存,但是实际上还是会有套接字发送缓存来做中转的。

问题:

  • 存入数据和发送数据存在时间差(异步,有排队时延)
  • 如果存入数据过多,缓存区会溢出导致丢包

(2) 接收过程

  1. OS不断地从网络上接收数据,缓存到Receive Buffer里
  2. 应用层从Receive Buffer里取数据

问题:

  • Receive Buffer溢出会导致丢包
  • UDP数据包的无序性和非可靠性
3.UDP的丢包问题

(1) Lost on the way out
如果socket发送缓冲区满了,后续应用程序发送的UDP包会被内核丢弃

(2) Lost in transit
UDP包在网络中传输时,遇到路由等网络中间件缓存溢出导致的丢包。或者是信道本身导致的随机性丢包

(3) Lost on the way in
当UDP包到达了接收端,但是接收端的socket接收缓冲区满了,那么这个包会被丢弃。

在linux中可以通过 netstat -suna查看缓存导致的丢包数量

4.UDP的时延问题

(1) 传输时延
即数据包从发送端发出去的时延(发送端排队时延)

(2) 传播时延
物理层的信号传播时延

(3) 排队时延/处理时延
在路由器中的处理和排队时延(网络拥塞)

5. TCP VS UDP

(https://www.pico.net/kb/udp-vs-tcp)

1.Throughput (UDP 优于 TCP)

  • UDP包头只有8字节, 而TCP包头至少20字节
  • TCP的流量控制策略限制了其Throughput

2.Latency (UDP 优于 TCP)

  • UDP包头小,测量RTT时有优势
  • TCP的流量控制和拥塞控制会导致本地socket的排队时延
  • TCP的建立连接耗时(三次握手)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值