[关闭]
@yangwenbo 2023-06-30T14:24:09.000000Z 字数 1341 阅读 266

http

TCP协议的三次握手和四次挥手

image.png-2063.8kB

报文类型 含义 状态
SYN 发起一个新连接 1表示发起连接
FIN 释放一个连接 1表示结束连接
ACK 确认序号有效 1表示序号有效
seq 随机序号 随机数
ack 随机序号回复 ack=seq+1

1、三次握手

1.1 三次握手原理:

  • 第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
  • 第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
  • 第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。

其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。

1.2 三次握手过程详细说明:

  • 第一次握手:Client将标志位SYN置为1,随机产生一个seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
  • 第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

2、四次挥手

2.1 四次挥手原理

  • 第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
  • 第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
  • 第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
  • 第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。

其中:FIN标志位数置1,表示断开TCP连接。

2.2 四次挥手​​​​​​​过程详细说明

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,同时发送一个seq=x的随机序号。Client进入FIN_wait_1状态
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)Server进入CLOSE_WAIT状态。
  • 第三次挥手:Server发送一个FIN,用来关闭Server到CLient的数据传输,同时发送一个seq=y的随机数,Server进入LAST_ACK状态
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次回挥手
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注