TCP三次握手

本文详细解析了TCP协议的三次握手过程,包括每次握手的具体步骤、数据包内容及状态转换,帮助读者深入理解TCP连接建立机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

三次握手

第一次握手:主机A发送位码为syn=1,随机产生seq number=x的数据包到服务器,客户端进入SYN_SEND状态,等待服务器的确认;主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number(主机A的seq+1),syn=1,ack=1,随机产生seq=y的包,此时服务器进入SYN_RECV状态;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

在这里插入图片描述

tcp的报文格式
在这里插入图片描述

报文中的重要字段

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

确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。

标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
URG:紧急指针(urgent pointer)有效
ACK:确认序号有效
PSH:接收方应该尽快将这个报文交给应用层
RST:重置连接
SYN:发起一个新连接
FIN:释放一个连接




实例分析

用wireshark抓包,然后分析,下面已将三次握手的包取出
在这里插入图片描述


第一次握手

客户端向服务端发送SYN报文
在这里插入图片描述

第一次握手发送的状态为syn的报文,seq =0。在某个主机开启一个tcp会话时,它的初始序列号是随机的,可能是0 和 4,294,967,295之间的任意值,然而,wireshark中,通常显示的都是相对序列号/确认号,而不是实际的序列号/确认号。

查看相对序列号/确认号的真实值。
edit → preferences → protocols → TCP,去掉Relative sequence number前面的勾。

在这里插入图片描述

第二次握手

服务端接收到客户端的syn报文,回复syn+ ack报文

在这里插入图片描述

第三次握手

客户端接收到服务端发送的syn+ack包,回复ack包
在这里插入图片描述

图表分析

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值