有限状态机&Time_wait的解读

一、TCP有限状态机
ide

wKiom1eXFrfh9COUAAF4dkHVDa8500.png

其中各状态的含义:spa

    

状态 含义
closed 初始状态
listen 被动打开一方——监听状态
syn_sent 主动打开一方——链接创建已发送
syn_rcvd 被动打开一方——链接创建已接收
established 双方——链接已经创建
fin_wait1 主动关闭一方——FIN已发送,等待确认
fin_wait2 主动关闭一方——确认已收到,等待对方关闭请求
time_wait 主动关闭一方——最后的确认已经发送,须要等待2MSL
close_wait 被动关闭一方——询问我方进程是否还有数据要发送,没有也要发送FIN进行关闭
last_ack 被动关闭一方——我方的fin已经发送,想要收到你的最后的确认
closing

主动关闭一方——在发送完FIN以后没有收到确认可是收到了对端的FINserver

                            (场景:同时发送的FIN)blog


二、为何须要三次握手进程

wKioL1eXGpiQ2hQiAADqHK4QXZA980.png

1)合并了链接确认和链接请求,如图上的2
资源

2)最后一次的ACK,防止了已失效的链接请求报文get

   (client向server发送了SYN链接请求报文,可是因为链路问题,滞留好久,client认为这个报文丢失因而又重传了一次;而在新链接过 it

      程中,server收到了这个消失好久的报文,若是没有三次握手,server就认为这是一个新链接,因而链接创建,server会向这个新链接io

      发送的数据都不会被client处理,server这样就浪费了不少资源)table

三、为何须要四次挥手

wKiom1eXHBfA01WRAAETBW_LZno235.png

1)FIN报文和ACK报文是成对的,而且能够容许有半关闭的状况;一方关闭了本身的发送方向,不在发送数据;可是另一方还有数据想要发送,这个时候是能够不发送FIN报文,继续发送数据到对端,对端只不过是关闭了发送方向,接收方向依然能够接收数据

四、time_wait必须等待2MSL时间的理由

1)为了保证主动关闭一方发送的最后一个ACK报文能过到达被动关闭的一方

    (由于这个报文有可能丢失,因此被动关闭的一方有可能重传FIN报文,而后主动一方在2MSL中能收到这个重传的报文,A在确认一次

       并重启2MSL)

2)防止“已失效的链接请求报文”,和上面的三次握手中最后一个ACK必须有的那种状况同样,若是在2MSL中那个链接请求报文到了,咱们不对这个迟到的报文作处理,让其消失;不会让此次释放链接完成后,还有旧的链接请求存在。

相关文章
相关标签/搜索