2021-12-12
- TCP连接管理
-
- TCP连接的建立与终止
-
- 三次握手与四次挥手
TCP连接标志位有 URG、ACK、PSH、RST、SYN、FIN
URG:紧急指针有效标识。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
ACK:确认序号有效标识。只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效
PSH:标识接收方应该尽快将这个报文段交给应用层。接收到PSH = 1的TCP报文段,应尽快的交付接收应用进程,而不再等待整个缓存都填满了后再向上交付
RST:重建连接标识。当RST=1时,表明TCP连接中出现严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立连接
当服务器接受来自客户的报文中,SYN并未置1且服务器与客户间没有建立TCP连接,服务器就会向客户发送RST,例如服务器掉电重启后,与客户的TCP连接中断,这时客户向服务器发送的报文都会获得RST回复
SYN:同步序号标识,用来发起一个连接。SYN=1表示这是一个连接请求或连接接受请求
FIN:发端完成发送任务标识。用来释放一个连接。FIN=1表明此报文段的发送端的数据已经发送完毕,并要求释放连接
TCP连接管理
TCP连接的建立与终止
三次握手与四次挥手
为什么是三次握手而是不两次握手:
三次握手是为了保证通信双方都知道对方正确的序列号,第一次握手的时候,客户向服务器发送自己的序列号,第二次握手的时候,服务器向客户发送自己的序列号,并使确认号为客户序列号+1,这样客户在收到第二次握手的时候就知道服务器知道了自己正确的序列号,第三次握手的时候,客户向服务器发送的序列号+1,确认号为服务器序列号+1,这样服务器就知道客户也知道了自己正确的序列号
如果是两次握手的话,服务器无法知道客户是否收到了正确的序列号,而无法达成消息同步
为什么是四次挥手而不是三次:
因为客户断开连接的时候,服务器可能还有些消息没发给客户
第一次挥手的时候,客户提出FIN请求。第二次挥手是服务器接收到FIN请求后,立刻传回一个ACK表示同意客户断开连接,并且进入关闭等待状态,这时候如果服务器有消息未发完,可继续发送给客户,如果没有就可以直接关闭了。第三次挥手是服务器发送完剩余消息后,发送一个FIN请求给客户。第三次挥手是客户发送一个ACK给服务器,表示同意服务器断开连接,并等待一段时间后自己断开连接