- 确认机制和超时重传
- 收到消息后会恢复ack来确认到达,如果一段时间后未收到ack则会重传
- 数据校验和
- tcp的报文头有校验和,校验是否损坏
- 排序
- 接收方会根据顺序来进行排序,将先到的数据缓存起来,等待之前的包到达后才发送给应用
- 流量控制
- 可以根据接收方的接收能力来调整滑动窗口的大小
- 拥塞控制
- 当网络情况不好的时候,可以调整滑动窗口的大小来防止丢包
延伸
- 拆包和粘包
- 拆包就是说,发送方一次发送的数据,接收方可能两次才能收到
- 发送的大小大于了IP包的大小
- 发送过急,大于发送缓冲区剩余大小
- 粘包,接收方读取一次数据,接收到了发送方两次发送的内容
- 发送缓冲区未满,一次将多个包发出
- 接收太慢,缓冲区满了,一次读取多个包
- 解决方案
- 为每个包增加长度信息
- 将所有的包封装为固定长度
- 包之间设置边界