TCP/IP随笔 TCP三次握手和四次挥手

TCPIP协议详解
在这里插入图片描述
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

在这里插入图片描述

第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

以下为本人通俗化的理解

三次握手

  1. 客户端:我能和你连接么?!(客户端请求与服务器进行连接,发出请求包)
  2. 服务器收到请求后:可以啊!但你确定要和我连接么?(服务器同意连接后一并发送确认包和之前的请求包)
  3. 客户端:我确定!!(客户端把请求包再重新发送给服务器以表决心)

四次挥手(因为是连接是全双工的,所以可以同一时间相互发数据)

  1. 客户端:我已经没有东西要发给你了!(客户端发送完毕,向服务器表示不再发送数据)
  2. 服务器:嗯的,好的(服务器先回应客户端,表示知道他不会再发数据了,但是服务器自己可能数据还没传递完,所以暂时先不告诉客户端断开连接)
  3. 服务器:我这里也没有东西要发给你了,我们断开连接吧!(服务器确认好自己没有要发的数据了,告诉客户端可以断开连接)
  4. 客户端:那我们就断开吧(客户端回应服务器)

为什么要三次握手,而不是两次

  1. 可能会因为网络延迟,第一次的请求在第二次的请求的连接都结束后才送到,如果服务器不再三确认直接建立连接,会浪费大量资源(也就是服务器和客户端建立连接后什么事情都没做,光耗着)
发布了68 篇原创文章 · 获赞 0 · 访问量 1731

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104666757