UDP协议
如网络游戏就是直接在传输层写,一般是UDP
TCP 可靠但重,每次通信都要先握手建连接。有些场景不需要这些——DNS 查一个域名,发一包收一包就完了;视频通话丢几帧没关系,但不能卡。这些场景用的是 UDP。
UDP 的设计哲学:把复杂的事交给应用层,自己只管发。
UDP 的特点
- 无连接:不握手,直接发,省去建连接的开销
- 不可靠:不保证到达,不保证顺序,丢了就丢了
- 面向报文:应用层交来一个包,UDP 原样发出去,不拆不合,所以不会粘包
- 支持一对多:可以广播和多播,TCP 不行
为什么不会粘包
TCP 是字节流,数据连续写入,接收方不知道边界在哪。UDP 每次发的是一个完整报文,接收方收到的也是一个完整报文,天然有边界。
差错检验
UDP 首部只有 8 字节,其中包含一个检验和字段。
发送方把报文(含伪首部:源IP、目的IP、协议号)每 16 位相加,溢出循环进位,结果取反填入检验和。接收方用同样方法验算,结果全为 1 则无误,否则直接丢弃。
UDP 只检错不纠错,发现问题直接丢,要不要重传由应用层决定。
如果你正在跟随梳理, 返回 MOC←