TCP
TCP(Transmission Control Protocol 传输控制协议)
TCP提供一种面向连接的、可靠的字节流服务;在一个TCP连接中仅有两方进行通信(广播和多播不能用于TCP)
一个IP地址和一个Port称为一个Socket(套接字),一个Socket Pair(套接字对)可唯一确定一个TCP连接(即本地IP&Port和远端IP&Port)
TCP提供全双工服务(即两个方向上独立传输)
检验和覆盖整个TCP报文段(TCP首部+TCP数据),计算时也使用和UDP类似的伪首部
TCP状态变迁图
MSL(Maximum Segment Lifetime 报文最大生存时间),2MSL指两倍该值
连接建立与终止
建立一个连接需要握手3次,终止需要握手4次
系统MSS(Maximum Segment Size 最大报文段长度)值以协商后的最小值为准
半关闭
一端结束发送后还能接收另一端的数据(客户端半关闭一般用于通知服务器数据传送已完成,等待服务器的反馈)
复位报文段
对于UDP,当数据报达到无效端口时产生一个“ICMP端口不可达”差错,而TCP则产生复位(RST)报文
相对于有序释放(FIN报文)来说,异常释放(RST报文)可立即丢弃任何待发数据
RST报文的接收方不会有任何响应或确认,接收方直接终止连接并通知应用层连接复位
半连接
一方已经关闭或异常终止而另一方却不知道(比如客户端突然断电)
同时打开与关闭
同时打开:两个程序同时彼此执行主动打开(可能性极小),TCP为同时打开仅建立一条连接
同时打开需要交换4个报文,比正常握手3次多一个;同时关闭与正常关闭需要交换的报文数相同
TCP服务器设计
TCP服务器在指定端口等待连接,客户端使用随机端口发起连接
TCP服务器也可以在指定IP等待连接(当有多个接口时,可限定来源网络),或者等待指定IP&Port发来的连接请求(虽然规范支持,但大多数开发接口不支持)
TCP有一个连接队列,该队列中的连接都已经完成3次握手,等待应用层的接受后,被移除出队列;
如果连接队列已满,则不会处理任何连接请求(SYN)