TCP协议
TCP协议已经是一种可靠的网络传输协议。在创建TCP连接时,客户端和服务端会先进行三次握手,确保服务端能够收到客户端的数据。而终止一个TCP连接需要四次挥手(由于TCP的半关闭的特性导致的)。
三次握手
为了保证创建的TCP链接能够正确的发送数据,需要先进行一次数据交互。
三次握手.jpeg
SYN:连接请求/接收 报文段
seq:发送的第一个字节的序号
ACK:确认报文段
ack:确认号。希望收到的下一个数据的第一个字节的序号
这个流程可以符合我们打招呼的情景。
客户端:吃了没?(发送SYN=1,seq=x)
服务端:吃过了,你吃了没?(发送SYN=1,seq=y,确认ACK=1,ack=x+1)
客户端:我也吃过了。(确认ACK=1,seq=x+1,ack=y+1)
经过以上三次对话,客户端和服务端都正好都获取到双方的发送的信息。
四次挥手
由于 TCP 的半关闭(half-close)特性造成的,TCP 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
半关闭:TCP 提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
四次挥手.jpeg
FIN :连接终止位
seq:发送的第一个字节的序号
ACK:确认报文段
ack:确认号。希望收到的下一个数据的第一个字节的序号
这个流程换成日常再见的流程。
客户端:到点啦,俺该回家啦。(发送FIN,seq)
服务端:急啥,这才几点,再拉会呱。(发送seq,确认ACK,ack)
服务端:(巴拉巴拉说一堆,说完了)。(发送FIN,seq,确认ACK,ack)
客户端:俺走啦。(确认ACK,ack,发送seq)
以上四次对话,结束本次串门。