TCP三次握手与四次挥手

本文结构如下:

  • 部分字段简介
  • 三次握手
  • 四次挥手

部分字段简介:

TCP(传输控制协议):是一种面向连接、可靠的传输层协议。
在进行连接和释放连接时会用到TCP报文段首部中的以下字段:

  • 序列号:TCP为传输过程中的所有数据字节编号,初始化序列号为随机数。
  • 确认号:其中的内容是接收方期望下次收到的字节的编号(序列号)。此时说明接收方已经收到了该字节之前的所有字节。
  • ACK标志ACK=1表示确认号字段有效,ACK=0,则表示确认号字段无效
  • SYN标志:建立连接时用于同步序号,当SYN=1,ACK=0时表示其是一个连接请求报文段,若同意请求则返回ACK=1,SYN=1.
  • FIN标志:用于释放一个连接,当FIN=1,表示此报文段的发送端已发送完毕,并要求释放传输连接。

三次握手:

当客户端需要与服务端建立连接时,通过三次握手完成,过程如图:
在这里插入图片描述
过程描述:

① 客户端向服务器发送含有 SYN =1,ACK=0,seq = i(随机数) 的报文段,向进行连接请求

② 服务端接收到客户端发来的报文段后,发送SYN=1, ACK=1,表示同意连接,同时发送seq = j(j也为随机数),ack = i+1 ,表明其已收到序号i及其之前发送的所有数据。

③ 客户端接收到服务端发送的报文段后,发送ACK=1,ack=j+1,表明已经收到j及其之前的所有消息。至此连接建立完毕。

四次挥手:

在释放连接时,客户端和服务端通过四次挥手来完成。过程如图:
在这里插入图片描述

① 客户端向服务器发送FIN=1请求终止连接。

② 服务器收到后,ACK=1(说明ack字段有效),ack=x+1表明收到序号x及其之前的报文段。

③ 服务器发送FIN=1的请求,向客户端请求终止连接。

④ 客户端确认收到③的报文段,向服务端发送ACK=1,ack=z+1报文段,并处于TIME-WAIT状态。在等待2MSL(Maximum Segment Lifetime 最长报文段寿命)个时间后,才释放掉连接。

这里就有一个问题:为什么要经过2MSL时间后才释放连接?
原因有两点:

  • 确保客户端发送的确认信息能够到达服务端
  • 防止 已失效的报文段连接请求报文 出现在之后的连接中。等待2MSL时间后,本次连接的所有请求均从网络消失。而不会出现在下一次连接。即,可以保证下次连接不受影响
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值