TCP 工作在传输层,底层IP协议只提供无连接、尽力而为的报文交付,存在丢包、乱序、重复、网络拥塞、接收缓冲区溢出等问题。TCP 就是在不可靠的IP网络之上,向上层应用提供可靠的、面向连接的字节流传输服务。
TCP 解决的核心问题:
-
建立与维持通信双方的连接
通过三次握手同步双方初始序列号,确认双方收发链路可用;通信结束通过四次挥手正常释放连接,避免资源泄漏。
-
解决数据丢失问题
采用确认应答(ACK)+ 超时重传机制。发送方等待接收方的确认报文,超时未收到ACK则重传数据,保证数据最终送达。
-
解决数据乱序问题
为每个字节分配序列号,接收端根据序列号重组报文,将有序字节流交付应用程序。
-
解决重复报文问题
利用序列号识别重复收到的数据包,丢弃重复报文,避免上层应用收到重复数据。
-
流量控制
使用滑动窗口机制,接收方通过窗口大小告知发送方自身剩余缓冲区容量,防止发送方发送速率过快,造成接收端缓冲区溢出。
-
拥塞控制
感知整个网络的拥塞状态,动态调整发送窗口,避免大量报文涌入网络,导致网络瘫痪。
-
字节流封装
将应用层的数据拆分成合适大小的TCP段,适配底层IP的MTU,向上层屏蔽底层网络分片细节。
一句话概括:TCP 在不可靠的IP网络上,为应用层提供可靠、有序、无重复、带流量与拥塞控制的面向连接字节流传输。