连接请求协议
1) 请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。
2) 服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认(ACK)序号设置为客户的ISN加1以对客户的SYN报文段进行确认(客户端会验证ACK是否为自己应该收到的序号)。一个SYN将占用一个序号。
3) 客户必须将确认序号设置为服务器的I S N加1以对服务器的SYN报文段进行确认(报文段3)。
连接终止协议
建立一个连接需要三次握手,而终止一个连接要经过4次握手。这由TCP的半关闭(half-close)造成的。
既然一个TCP连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了那个方向的数据传送。(发送FIN通常是应用层进行关闭的结果)
收到一个FIN只意味着对方已完成数据的传送,不会再向自己传输数据。
一个TCP连接在收到一个FIN后仍能发送数据。而这对利用半关闭的应用来说是可能的,尽管在实际应用中只有很少的TCP应用程序这样做。
(1)首先进行关闭的一方(即发送第一个FIN)将执行主动关闭;
(2)另一方(收到这个FIN)执行被动关闭。
(3)另一方完成发送任务后,会向已方发送FIN;
(4)另一方收到FIN后,向己方放送ACK确认
下图是连接建立过程: