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

 一、TCP报头

 二、TCP的三次握手:

第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。

第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

三,四次挥手:

在这里插入图片描述

  • 第1次挥手:主动关闭方 向 被动关闭方 发送一个 FIN包 。也就是主动关闭方 告诉 被动关闭方 :我已经不会再给你发数据了。

  • 第2次挥手:被动关闭方 收到 FIN包 后,发送一个 ACK包 给 主动关闭方 。 就告诉 主动关闭方 已收到通知 。

(在 被动关闭方 发送 FIN包 之前,被动关闭方 还是可以向 主动关闭方 发送数据的。)

  • 第3次挥手:被动关闭方 又发送一个 FIN包,给 主动关闭方,用来关闭 被动关闭方 到 主动关闭方 的数据传送。
    也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。

  • 第4次挥手:主动关闭方 收到 FIN包后,发送一个 ACK包 给 被动关闭方 ,至此,完成四次挥手。

注意: 第2次和第3次, 被动关闭方 连续两次向 主动关闭方 发送报文。

四、主要字段

1)标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:

标志位含义说明
SYN发起建立连接当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该有 SYN=1,ACK=1。
ACK确认标识当ACK=1,确认标识才有效。
(为了与 确认号ack 区分开,我们一定要用大写字母)
FIN释放连接当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放。
PSH读取数据当PSH=1,提示接收端应用程序立即从TCP缓存区把数据读走。
RST重置连接当RST=1,表时TCP连接出现严重差错,必须释放连接,在后再重新连接。
URG紧急指针当URG=1,表明紧急指针字段有效,告诉系统此报文段中有紧急数据。

2)序号(sequence number):seq序号,占32位。用来标识从TCP源端向目的端发送的字节流,发起方 发送数据时 对此进行标记。

3)确认号(acknowledgement number):ack序号,占32位。只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。

说明:

SYN 是标志位,表示发起建立一个连接。

seq 即 seq序号,表示 发起方 发送 数据 进行标记。

ACK 是 标志位中的 确认标识。

ack 是 确认序号,接收到的对方的数据,ack=seq+1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值