TCP与UDP
最后一次更新时间:Saturday, August 22nd 2020, PM
TCP与UDP的对比
类型 | 是否面向连接 | 是否可靠 | 传输形式 | 传输效率 | 所需资源 | 应用场景 | 支持 |
---|---|---|---|---|---|---|---|
TCP | 面向连接 | 可靠 | 字节流 | 低 | 多 | 要求通信数据可靠 | 单播 |
UDP | 无连接 | 不可靠 | 数据报文段 | 高 | 少 | 要求通信速率高 | 广播、多播 |
TCP如何保证可靠性
- 数据包编号排序。发送方给包编号,接收方给包排序。
- 校验和。若一组数据包校验和有误,则丢弃整组数据包。
- 接收端丢弃重复数据。
- 流量控制(滑动窗口算法)
- 拥塞控制
- 自动重传(ARQ协议)
- 超时重传
TCP ARQ协议
ARQ协议分为两种,一种是停止等待ARQ
,另一种是连续ARQ
。
停止等待ARQ:发完一个分组,便等待接收方确认。优点是简单,但是信道的利用率低,且等待时间长。
连续ARQ:连续发送分组,接收方对按序的最后一个发送进行确认。举个栗子,收到了编号为1,2,4,5的数据包,则需重发3,4,5数据包。优点是信道的利用率高,丢失不需要全部重传。
TCP 拥塞控制
拥塞:网络中分组过多,使得整体性能下降。
TCP拥塞控制:慢开始、拥塞避免、快重传+快恢复。
TCP 粘包、拆包
举个栗子:Socket接收消息时,多个字符串粘在一起;一个字符串被拆开。
解决:可以用Netty自带的解码器解决。
TCP 长连接/短连接,心跳机制
短连接:Client与Server读写完就关闭连接。
长连接:Client与Server读写玩不关闭连接。
若Client与Server保持长连接,且一段时间无数据交互,它们是无法发现对方是否仍然在线,即无法保证TCP的可靠性。为了解决这个问题,引入了心跳机制。
心跳包:双方一段时间无交互时,一方就会主动发送一个特殊数据包,另一方收到之后也会回复一个特殊数据包。双方收到即可确认彼此在线(亦称作PING-PONG交互)。
滑动窗口算法
待深入。
除特别声明外,本站所有文章均采用 CC BY-SA 4.0 协议 ,转载请注明出处!