TCP三次握手与四次挥手

TCP三次握手linux

1、什么是三次握手服务器

        三次握手(Three-way Handshake),是指创建一个TCP链接时,须要客户端和服务器总共发送3个包。app

2、三次握手的目的ide

        三次握手的目的是链接服务器指定端口,创建TCP链接,并同步链接双方的序列号和确认号并交换 TCP 窗口大小信息。客户端执行链接请求时。将触发三次握手。spa

3、三次握手过程3d

    


第一次握手:
     客户端发送一个TCP的SYN标志位置1的包指明客户打算链接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。
第二次握手:
     服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的ISN加1以.即X+1。
第三次握手.
     客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1。若是正确则链接创建成功,客户端和服务器进入ESTABLISHED状态,完成三次握手,随后客户端与服务器之间能够开始传输数据了。把服务器发来ACK的序号字段+1,放在肯定字段中发送给对方.而且在数据段放写ISN的+1。
orm

TCP四次挥手blog

1、什么是四次挥手同步

      TCP的链接的拆除须要发送四个包,所以称为四次挥手(four-way handshake)。客户端或服务器都可主动发起挥手动做,任何一方执行close操做便可产生挥手操做。
it

2、四次挥手过程

 

第一次挥手:

     客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户机进入FIN_WAIT_1状态。
第二次挥手:

     服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。
第三次挥手:

     服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
第四次挥手:

     客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。


有限状态机FSM:Finite State Machine

一、CLOSED 没有任何链接状态

二、LISTEN 侦听状态,等待来自远方TCP端口的链接请求

3 、SYN-SENT 在发送链接请求后,等待对方确认

四、SYN-RECEIVED 在收到和发送一个链接请求后,等待对方确认

五、ESTABLISHED 表明传输链接创建,双方进入数据传送状态

六、FIN-WAIT-1 主动关闭,主机已发送关闭链接请求,等待对方确认

7 、FIN-WAIT-2 主动关闭,主机已收到对方关闭传输链接确认,等待对方发送关闭传输链接请求

八、 TIME-WAIT 完成双向传输链接关闭,等待全部分组消失

九、CLOSE-WAIT 被动关闭,收到对方发来的关闭链接请求,并已确认

十、LAST-ACK 被动关闭,等待最后一个关闭传输链接确认,并等待所有分组消失

十一、CLOSING 双方同时尝试关闭传输链接,等待对方确认

附加问题:


【问题1】为何链接的时候是三次握手,关闭的时候倒是四次挥手?

答:由于当服务器收到客户端的SYN链接请求报文后,能够直接发送SYN+ACK报文。其中ACK报文是用来回应的,SYN报文是用来同步的。可是关闭链接时,当服务器收到FIN报文时,极可能并不会当即关闭SOCKET,因此只能先回复一个ACK报文,告诉客户端,”发送的FIN报文已经收到”。只有等到客户端全部的报文都发送完了,客户端才能发送FIN报文,所以不能一块儿发送。故须要四步挥手。

【问题2】为何TIME_WAIT状态须要通过2MSL(最大报文段生存时间)才能返回到CLOSE状态?

答:四个报文都发送完毕,客户端和服务器能够直接进入CLOSE状态了,但有可能最后一个ACK丢失。因此TIME_WAIT状态就是用来重发可能丢失的ACK报文,确保以前的数据不会丢失后再进入close状态。


原创文章,做者:Light Yagami,如若转载,请注明出处:http://www.178linux.com/85976

相关文章
相关标签/搜索