TCP头部、TCP三次握手、TCP四次挥手

TCP

在TCP中,数据被分割成多个数据包,并在发送端和接收端之间进行可靠传输。

TCP头部

三次握手

这是建立TCP连接的过程。在客户端和服务器之间,需要交换三个数据包以确认双方的连接参数并完成连接建立。
A连接A标志位序号B标志位B连接
1CLOSEDLISTEN
1SYN_SENDSYN=1Seq=x->
2<-Seq=y ACKN=x+1ACK=1 SYN=1SYN_RECV
3ESTABLISHEDACK=1Seq=x+1 ACKN=y+1->ESTABLISHED
  1. 第一次握手:A端(客户端)发送连接请求报文段。
    1. SYN置为1,序号(Sequence Number)为x,
    2. A端进入SYN_SEND状态,等待B端(服务端)确认。
  2. 第二次握手:B端 接收到A端发送的SYN报文段,现在需要对其确认。
    1. 设置 确认序列(Acknowledge Number)为序号加1,ACK置为1,
    2. 同时发送SYN请求信息,序号为y,
    3. 最后将两者放入同一报文段中,一并发给A端,
    4. B端进入SYN_RECV状态,等待A端确认。
  3. 第三次握手:A端接收到B端的ACK+SYN报文。
    1. 设置序号为x+1(报文的确认序号),
    2. 同时设置当前确认序号为y+1(报文序号+1),置ACK为1。
    3. 报文发送完毕后,A端与B端都将进入ESTABLISHED状态,完成三次握手。

四次挥手

这是终止TCP连接的过程。在数据传输结束后,需要交换四个数据包以确认连接的关闭。在某些情况下(如连接异常或服务器强制断开),则会同时置RST标志为1
A连接A标志位序号B标志位B连接
1ESTABLISHEDESTABLISHED
1FIN_WAIT_1FIN=1Seq=u->CLOSE_WAIT
2FIN_WAIT_2<-Seq=v ACKN=u+1ACK=1
3<-Seq=w ACKN=u+1ACK=1 FIN=1LAST_ACT
4TIME_WAITACK=1Seq=u+1 ACKN=w+1->CLOSED
4CLOSED2MSL
  1. 第一次挥手:A端(即可能是客户端,也可能是服务端)发送结束连接报文段。(表示A端没有数据要发送给B端了)
    1. FIN为1,序号为u,
    2. 发送后进入A端进入FIN_WAIT_1状态。
  2. 第二次挥手:B端接收到A端的结束连接报文,现需要对其确认。(即同意A端的关闭请求)
    1. ACK为1,确认序号为u加1,
    2. 设置序号为v。
    3. 发送完成后B端进入CLOSE_WAIT状态,A端进入FIN_WAIT_2状态。
  3. 第三次挥手:(如B端发送完成所有数据或也没有数据要发送给A端后)B端发送结束确认报文。
    1. FIN为1,序号为w。
    2. 同时置ACK为1,确认序号为u+1。
    3. B端进入LAST_ACT状态。
  4. 第四次挥手:A端接收到B端的结束确认报文,最后再对其确认。
    1. 设置序号为u+1(结束报文的确认序号),
    2. 同时置ACK为1,确认序号为w+1。
    3. 发送完成后A端进入TIME_WAIT状态,而B端接收完则进入CLOSED状态。
    4. A端会等待2MSL,如没有新的报文(即证明B端已正常关闭),则A端进入CLOSED状态。

思考

为什么TCP是三次握手,而挥手是四次呢?

这主要是因为三次握手是建立连接的过程,需要双方明确彼此的参数和状态;而四次挥手是关闭连接的过程,需要双方都明确彼此的关闭意图并完成资源的释放。这个过程中涉及到的一些数据包可能会因为网络延迟等原因需要多次尝试才能成功发送或接收,因此需要更多的数据包交换来确保连接的建立和关闭。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值