wireshark验证TCP3次握手

本文通过Wireshark捕获的数据包详细解析TCP三次握手的过程,并验证理论与实践的一致性。展示了如何使用Wireshark进行网络流量分析,并深入解释了TCP头部字段的功能。

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

wireshark过滤条件:ip.addr == 120.79.36.180
千万别写成 ip.dst == 120.79.36.180 ,这样子就看不到服务器给我们返回的包了
此时,在浏览器输入120.79.36.180:8080,敲下回车,然后查看wireshark的捉包;
在计算机网络课上,我们知道有下面的理论;现在我就从wireshark抓包中论证这个理论。

image_1cduvgvfd1fq4sd1thq1t5pht99.png-31.9kB

tcp 的头部

英文版

image_1cduvirj5ib613ct8gl12fret816.png-144.1kB

中文版

image_1cduvma3j1pjr6261kbte3311hb1j.png-150.9kB

上图中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
需要注意的是:
(A)不要将确认序号Ack与标志位中的ACK搞混了。
(B)确认方Ack=发起方Req+1,两端配对。

接下来我们来看wireshark捉到的包

第一次握手

书中写第一次握手的包是 syn = 1 , seq = x ,这里的x是任意的,

image_1cdv02vbh10r01pvu13dm1q061gvu20.png-269.4kB

我们从第一个捕捉到的包开始看,这个从source、destination中我们可以知道,这是我本地发送给120.79.36.180的一个tcp请求;再看下面的信息;
可以看到 Sequence number :0 还有 Flags.Syn = 1 ,这里跟书中的理论描述是一致的,这也印证了这是tcp第一次握手的包。

第二次握手

书中写第二次握手的包是 Syn = 1 , Ack = x + 1 , Seq = y ;
这里的Ack是确认序号,不是标记为的Ack,标记位的Ack的
用 1 表示第一次握手, 2表示第二次握手,3表示第三次握手
这里的 x 是第一次握手中的x,也就是第一次握手的Seq,说明第二次握手的Ack等于第一次握手的Sqe + 1,我们得到公式 2.Ack = 1.Seq + 1
而第二次握手的Seq变成了y,说明第二次握手的Seq是任意的。
image_1cdv0lock1t2i1cu1hh5sqpfvn2d.png-263.9kB
从上图中我们看到 2.Seq = 1 , 2.Ack = 1,印证了理论2.Ack = 1.Seq + 1

第三次握手

书中写第三次握手的包是Ack = y + 1 ,Seq = z ;
这说明第三次握手的包的Seq是任意的,3.Ack = 2.Seq + 1

我们再从下面的包中找到第一个从本地发给服务器的包,协议是TCP
image_1cdv21mi01sst1s7q87ks212m02q.png-284.4kB
从上图中,我们可以看到 3.Ack = 1, 而2.Seq = 0 也就是 3.Ack = 2.Seq + 1;从而印证了书中的理论。

参考:TCP三次握手

<think>好的,用户想了解WiresharkTCP握手的实验原理。首先,我需要回忆一下TCP握手的基本过程,然后结合Wireshark的具体操作来解释如何捕获和分析这些数据包。 首先,TCP握手包括SYN、SYN-ACK和ACK三个步骤。在Wireshark中,用户需要设置合适的过滤条件,比如tcp.port == [目标端口],来捕获相关的数据包。然后,通过分析每个数据包的标志位和序列号,确认握手是否成功。 接下来,用户可能对每个步骤的具体细节有疑问,比如序列号的变化、标志位的含义,握手失败的可能原因。此外,可能还需要解释如何识别重传握手失败的情况,比如SYN包重传RST包的出现在握手过程中。 还要考虑用户可能的实验环境,比如是在本地测试还是远程服务器,不同的环境可能会影响捕获到的数据包。比如本地使用localhost可能不如远程服务器明显,者防火墙设置可能会阻止某些包。 另外,引用部分提到了NULL值的处理,这可能和TCP中的某些字段标志位无关,但需要确保不混淆。用户可能误输入了“null”,但根据上下文,应专注于TCP握手的内容。 最后,生成相关问题时,要围绕Wireshark的使用、TCP握手原理、常见问题及解决方法展开,帮助用户深入理解和应用。</think>### WiresharkTCP握手的实验原理分析 #### 一、TCP握手基础 TCP协议通过三握手建立可靠连接,具体流程为: 1. 客户端发送SYN包(SYN=1,seq=x) 2. 服务端返回SYN-ACK包(SYN=1,ACK=1,seq=y,ack=x+1) 3. 客户端发送ACK包(ACK=1,seq=x+1,ack=y+1) 在Wireshark中可通过`tcp.flags.syn == 1 and tcp.flags.ack == 0`过滤初始SYN包[^1]。 #### 二、实验实施步骤 1. **抓包环境搭建** - 使用`tcpdump -i any -w capture.pcap`命令抓取原始数据 - 建议设置显示过滤器:`tcp.stream eq 0`(查看特定连接) 2. **关键字段解析 $$ \begin{array}{|c|c|} \hline \text{Flags} & \text{二进制值} \\ \hline SYN & 00000010 \\ ACK & 00010000 \\ \hline \end{array} $$ 通过对比十六进制值(如0x12表示SYN-ACK)验证握手阶段[^2]。 3. **异常情况检测 - 重传SYN包(TCP Retransmission提示) - 收到RST包(表示连接拒绝) - 序列号异常(如非单调递增) #### 三、实验原理验证 通过Wireshark的"Follow TCP Stream"功能可完整查看握手过程,特别注意: - 初始序列号的随机性(防预测攻击) - 窗口缩放因子协商过程 - 支持SACK选项的协商 ```python # 简易TCP客户端示例(Python伪代码) import socket s = socket.socket() s.connect(("example.com", 80)) # 触发三握手 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值