大白话TCP/IP协议三次握手与四次分手流程

三次握手流程

1 客户端发个请求“开门呐,我要进来”给服务器
2 服务器发个“进来吧,我去给你开门”给客户端
3 客户端有很客气的发个“谢谢,我要进来了”给服务器

三次握手(three times handshake;three-way handshaking)所谓的“三次握手”即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据

四次挥手流程

1 客户端发个“时间不早了,我要走了”给服务器,等服务器起身送他
2 服务器听到了,发个“我知道了,那我送你出门吧”给客户端,等客户端走
3 服务器把门关上后,发个“我关门了”给客户端,然后等客户端走(尼玛~矫情啊)
4 客户端发个“我知道了,我走了”,之后自己就走了

四次挥手:
1 客户端A发送一个“FIN”报文段给服务器B,其中该报文中的FIN标志位被置为1。
2 服务器B收到了FIN报文段后,它会向客户端发送“ACK”报文段,表示允许断开该TCP连接了。同时它还会通知高层应用程序,客户端已经请求释放连接。此时客户端已经不再会给服务器发送数据了,但是服务器到客户端的TCP连接还没有断开,所以服务器还是可以向客户端发送数据,此时状态称为“半关闭状态”。
3 当服务端的高层程序已经没有数据要发送了,它会通知TCP可以断开连接了,这时候,服务器就会向客户端发送FIN报文段。
4 客户端收到FIN报文段后,客户端会发送“ACK”报文段给服务器,同时客户端会进入一个叫“TIME-WAIT”的状态,需要再等待两个报文寿命(MSL)时间后,才进入最后的“CLOSE”状态。
刚刚说进入到半关闭状态了 客户端怎么还能给服务器端发送数据呢,在我一开始理解的时候很是困惑,原来客户端最后发送的ACK报文是不含数据的 相当于一个标示一样。

猜你喜欢

转载自blog.csdn.net/qq_38844040/article/details/80426546