TCP/IP 协议要点

Published: 26 Sep 2014 Category: 技术

TCP 协议三次握手,四次挥手

  • 三次握手
    SYN, seq = x    
A -----------------> B

    ACK = x + 1, seq = y
A <----------------- B

    ACK = y + 1
A -----------------> B

三次握手从根本上来讲是为了保证在一个不可信的信道上,进行可信的传输。在三次握手中,双方告知对方自己的序列号,并给出 ACK 确认, 有了序列号,就可以知道此后的传输是否乱序,是否重复,保证可靠的传输。

从建立连接的角度看,如果两次握手,假如客户端发出的一个请求连接的包在某个网络节点长时间滞留,那么客户端会发出新的请求,这次 请求正常到达,并与服务器通信,随后,通信关闭。此时,之前滞留的请求连接的包到达服务器,如果是两次握手,服务器就会建立连接,并等待 客户端发送数据,但是客户端永远不会发送数据。

  • 四次挥手
    FIN seq=x+3, ACK=y+1    
A -----------------> B

    ACK=x+3
A <----------------- B

    FIN seq=y+1
A <----------------- B

    ACK = y + 2
A -----------------> B

四次挥手的原因在于 TCP 的全双工通信,两端都需要发出 FIN,表示自己不再发送数据,并且给对方的 FIN 发出 ACK 确认。