简单理解什么是TCP/IP三次握手和四次挥手

简单理解什么是TCP/IP三次握手和四次挥手

为什么要进行三次握手

先送给大家一个笑话:

嗨,我想听一个 TCP 的笑话。
你好,你想听 TCP 的笑话么?
嗯,我想听一个 TCP 的笑话。
好的,我会给你讲一个TCP 的笑话。
好的,我会听一个TCP 的笑话。
你准备好听一个TCP 的笑话么?
嗯,我准备好听一个TCP 的笑话
Ok,那我要发 TCP 笑话了。大概有 10 秒,20 个字。
嗯,我准备收你那个 10 秒时长,20 个字的笑话了。
抱歉,你的连接超时了… 你好,你想听 TCP 的笑话么?
我给你们讲个 UDP 的笑话吧。

在计算机网络中,信息的传递是不稳定的,所以为了确保传输信息的完整性,TCP进入了历史舞台。

  • 三次握手的目的在于确认发送方与接收方的发送与接收信息的能力都是完好可用的。然后便是建立连接,进行可靠传输
    听起来有点拗口。
    再来看下三次握手的示意图:
    三次握手

  • 这里还需要引入TCP报文的基础知识:
    TCP报文的头部信息中包含有确认ACK、同步SYN、终止FIN
    确认ACK:仅当ACK=1时确认号字段有效,ACK=0无效
    同步SYN:SYN=1表示这是一个连接请求报文或者接受连接报文
    终止FIN:FIN=1表示本条报文数据发送完毕

第一次:客户端发送SYN=1的报文给服务端
第二次:服务端发送SYN=1,ACK=1的报文给客户端
第三次:客户端发送ACK=1的报文给服务端

看起来好像很简单,实际上比这复杂的多,发送的请求中还包含校验信息。

那么它们都有什么作用呢?

客户端向服务端发送连接请求,并带上自己的确认号,服务端收到请求后,返回给客户端一条报文,并带上客户端的确认号和自己的确认号。
这时候客户端和服务端都不知道自己的发送和接收功能是不是完整 。
当客户端收到服务端发送回来的报文时,客户端知道了自己的发送功能没问题,接收功能也OK。
但是,这时候服务端还不知道自己的各项功能是不是OK
然后,客户端又发给服务端一条确认信息,告诉服务端我收到了你的请求,你的确认号是XXX,服务端收到后查看信息无误,知道了自己的发送和接收功能 也都是正常的。
连接建立。

四次挥手

因为TCP是面向连接的传输控制协议,建立了连接,那就有需要断开的时候。
四次挥手

第一次:客户端向服务端发送FIN=1的报文,告诉服务器数据发送完毕,请求断开连接。
第二次:服务端收到请求后,发送ACK=1的报文给客户端,客户端收到后,客户端到服务端的连接断开。
此时,连接处于半关闭状态,客户端无法向服务端发送数据,但是服务端仍能向客户端发送数据,客户端还会接收。
第三次:服务器端确认没有数据需要继续发送后,向客户端发送FIN=1的报文,请求断开连接。
第四次:客户端收到服务端断开连接的请求后,发送ACK=1的报文,告诉服务端可以断开连接。

  • 但是此时的连接并没有真正的断开。
  • TCP连接必须等待2MSL后才能真正的释放掉。
    MSL:MSL是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
    等待的原因是为了确保断开连接的请求能够到达服务端,避免影响下一次连接的建立。

猜你喜欢

转载自blog.csdn.net/qq_36963372/article/details/83929531