TCP三次握手与四次挥手

TCP三次握手与四次挥手
TCP三次握手与四次挥手解析

  • 客户端连接服务器(三次握手)
  • 客户端关闭与服务器连接(四次挥手)
    总结

TCP三次握手与四次挥手、流量控制(滑动窗口)、拥塞控制、半连接状态、2MSL

TCP三次握手与四次挥手

TCP三次握手与四次挥手_第1张图片

TCP标志位:

标志位 含义
SYN 建立连接
ACK 响应确认
FIN 结束
RST 重置
PSH 推送
URG 紧急

TCP 三次握手(TCP Three-Way Handshake)

  1. 客户端发送同步序列号(SYN)报文: 客户端发送一个TCP报文,其中SYN位被置为1,表示请求建立连接。同时,客户端会选择一个初始序列号(ISN,Initial Sequence Number)。

  2. 服务器回应同步序列号(SYN)和确认序列号(ACK)报文: 服务器收到客户端的SYN报文后,如果同意建立连接,会以自己的SYN报文作为应答,并将确认序列号设置为客户端的ISN加1,同时自己也选择一个初始序列号。

  3. 客户端发送确认序列号(ACK)报文: 客户端收到服务器的SYN报文后,会发送一个带有ACK的报文,确认收到了服务器的连接应答。服务器收到这个报文后,完成三次握手,连接建立。

TCP 四次挥手(TCP Four-Way Handshake)

  1. 客户端发送结束连接报文(FIN): 客户端完成所有数据的发送后,发送一个带有FIN标志的TCP报文,表示数据发送完毕,请求断开连接。

  2. 服务器确认结束连接报文(ACK): 服务器收到客户端的FIN报文后,发送一个带有ACK的报文,表示已经接收到断开连接的请求。

  3. 服务器发送结束连接报文(FIN): 服务器在完成数据发送后,也向客户端发送一个带有FIN标志的报文,请求断开连接。

  4. 客户端确认结束连接报文(ACK): 客户端收到服务器的FIN报文后,发送一个带有ACK的报文,确认收到了服务器的断开请求。此时,连接完全断开。

以上过程是TCP连接的建立和断开的基本流程。在实际应用中,可能会有一些优化和调整,但这是基本的握手和挥手过程。

TCP三次握手与四次挥手解析

客户端连接服务器(三次握手)

第一个阶段 初始链接阶段
TCP三次握手与四次挥手_第2张图片

第一次握手

SYN, seq=x

客户端 连接connect() 带上序列号X给服务器消息,客户端进入SYN-SEND的同步发送状态

第二次握手

SYN, seq=y, ACK=x+1

服务器 侦听listen() 相关的端口,通常HTTP协议请求端口,80端口和HTTPS的443端口

服务器监听到端口应用收到了消息后,给客户端回复带上自己的序列号Y,并带上ACK确认码(应答信号)为客户端带来的序列号+1

服务器进入SYN-RCVD的同步已回复状态

第三次握手

ACK=y+1

客户端收到了服务器的回复,带上服务器回复的序列号+1的确认码发送给服务器,建立链接成功,就可以进行数据的传递了

客户端关闭与服务器连接(四次挥手)

四次挥手是当客户端打算关闭连接
TCP三次握手与四次挥手_第3张图片

第一次挥手

客户端会主动带上握手时客户端确认码作为序列号发送给服务器断开连接

seq=u

客户端进入结束等待为 1的状态 FIN-WAIT-1

第二次挥手

服务器收到了客户端断开消息,会带上自己的序列号v,即客户端带来的序列号+1,作为确认码回复给客户端

seq=v, ACK=u+1

服务器进入CLOSE WAIT等待关闭的状态

客户端进入继续等待为 2的状态 FIN-WAIT-2

第三次挥手

服务器没有进一步的消息发送时,带上序列号w和客户端带来的序列号+1的确认码给客户端发送关闭请求

seq=w, ACK=u+1

然后服务器进入LAST-ACK 最后确认状态

第四次挥手

客户端收到了服务器的关闭请求后,带上服务器最后一次发送的序列号+1,和序列号+1的确认码回复服务器

seq=w+1, ACK=u+1

于是服务器关闭了链接

客户端进入了定时等待时间TIME_WAIT,即两个报文的最大生存周期时间,根据操作系统不同大约时1-4分钟,之后客户端才真正的断开

总结

当输入网站按下回车
第一步 是DNS找域名对应的IP
接下来三次握手进入初始链接阶段
每次链接都要经历TCP/IP七层模型
连接初始成功后
进入第二阶段 SSL的加密协议的证书协商阶段
接下来是服务器准备我们需要的内容,准备好内容后,就是客户端下载内容阶段

你可能感兴趣的:(Linux网络编程,tcp/ip,网络,网络协议,服务器,三次握手四次挥手)