一、TCP与UDP区别:
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接(三次握手) |
是否可靠 | 不可靠传输,不使用流量控制和拥塞控制 | 可靠传输,使用流量控制和拥塞控制 |
连接对象个数 | 支持一对一,一对多,多对一和多对多交互通信 (单播、多播、广播) | 只能是一对一通信(单播) |
传输方式 | 面向报文 (对应用层交下来的报文既不合并也不拆分) | 面向字节流 |
首部开销 | 首部开销小,仅8字节 (传输时高效) | 首部最小20字节,最大60字节 |
包大小 | udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535 udp包头占8字节, ip包头占20字节, 65535-28 = 65507 | 最大长度是由最大传输大小(MSS,Maxitum Segment Size)决定,MMS一般是1640Byte |
接收和发送缓冲区 | 没有发送缓冲区,只要有数据就发,不管对方能否接收 接受缓冲区满,就丢弃,没有流量控制 | 接收缓冲区把数据缓存入内核, recv(),把内核缓冲区中的数据拷贝到应用层用户的buffer里。 发送缓冲区 send()将数据拷贝进入socket的内核发送缓冲区中。 |
适用场景 | 适用于实时应用(IP电话、视频会议、直播等) | 适用于要求可靠传输的应用,例如文件传输 |
二、TCP如何实现可靠性?
1.校验和:判断传输数据是否出现修改
2.确认应答和序列号:每次收到数据后都会确认应答,序列号可以将接收到的数据排序,去掉重复数据。
3.超时重传
4.连接管理:三次握手,四次挥手
5.滑动窗口来实现流量控制和拥塞控制。
三、如何设计一个可靠的UDP?
RUDP,其实感觉大部分还是借鉴TCP的可靠实现。