TCP常见问题
TCP全称Transmission Control Protocol,即传输控制协议。TCP控制的内容主要包括:
- 可靠性
- 有序性
- 流量控制
- 拥塞控制
为何不在IP层对数据进行上述控制?
不在IP层实现控制是因为IP层涉及到的设备很多,设备之间靠IP来寻址,如果在IP层实现控制,那么涉及到的设备都要关心很多事情,整体的传输效率会收到影响。
TCP所谓的连接只是双方都维护了一个状态
TCP协议头
如图:
- TCP包只有端口,没有IP
- Seq就是Sequence Number即序号,用来解决乱序问题
- ACK就是Acknowledgement Number,即确认号,用来解决丢包的情况,告知发送方接收到的包的序号
- 标志位就是TCP flags,用来标记包的类型,用来控制TCP的状态
- 窗口就是滑动窗口Sliding Window,用来进行流量控制
三次握手
目的有二:
- 确认双方的发送接收功能都正常
- 初始化Seq Number,SYN的全称为Synchronize Sequence Numbers,这个序号是用来保证传输数据的正确性
初始序号ISN的取值
如果ISN从0开始,假设建立好连接之后发送了第20个包之后网络断了,client重启了,序号又从0开始,此时服务端