TCP三次握手和四次挥手------抓包实验

实验准备与介绍

阿里云服务器(IP:106.14.165.89)
虚拟机客户端(IP:192.168.163.134)

TCP三次握手和四次挥手

演示TCP的连接的建立与关闭

参考游双3.3TCP连接的建立与关闭,用telnet远程登陆演示,tcpdump抓包。
客户端:
在这里插入图片描述客户端:
在这里插入图片描述
参考小林coding的图解网络。演示登录HTTP服务, Wireshark ⼯具进行可视化分析。

在这里插入图片描述
最开始的 3 个包就是 TCP 三次握⼿建⽴连接的包

中间是 HTTP 请求和响应的包

⽽最后的 4 个包则是 TCP 断开连接的挥⼿包

在这里插入图片描述
在这里插入图片描述

TCP 三次握⼿异常情况分析

TCP 第⼀次握⼿的 SYN 丢包了,会发⽣什么?

服务器端模拟:(参考游双3.3.3连接超时)

iptables -F
iptables -I INPUT -p tcp --syn -i eth0 -j DROP

服务器端处于LISTEN状态
在这里插入图片描述

客户端:

tcpdump -n -i ens33 port 23 -w tcp_sys_timeout.pcap
date;telnet 106.14.165.89 23;date    

客户端处于SYN_SENT状态
在这里插入图片描述

客户端:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述从上图可以发现, 客户端发起了 SYN 包后,⼀直没有收到服务端的 ACK ,所以⼀直超时重传了 4次,并且每次
RTO 超时时间是不同的:
第⼀次是在 1 秒超时重传
第⼆次是在 3 秒超时重传
第三次是在 7 秒超时重传
第四次是在 15 秒超时重传

可以发现,TCP报文段被发送的时间间隔是1s、2s、4s、8s,当超过最⼤重传次数后,客户端不再发送 SYN 包。
在 Linux 中,第⼀次握⼿的 SYN 超时重传次数,是如下内核参数指定的:
客户端:
在这里插入图片描述

问题1:我的测试结果是重连了4次,但是内核定义为6,这是为什么呢?

实验一小结

通过实验⼀的实验结果,我们可以得知,当客户端发起的 TCP 第⼀次握⼿ SYN 包,在超时时间内没收到服务端的
ACK,就会在超时重传 SYN 数据包,每次超时重传的 RTO 是翻倍上涨的,直到 SYN 包的重传次数到达
tcp_syn_retries 值后(这个我没测出来???)
,客户端不再发送 SYN 包。

TCP 第⼆次握⼿的 SYN、ACK 丢包了,会发⽣什么?

# 客户端配置防火墙规则
iptables -I INPUT -s 106.14.165.89 -j DROP
tcpdump -n -i ens33 port 8888 -w tcp_synack_timeout.pcap

客户端:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

问题2:我的测试结果是重连了3次,但是内核定义为2,这是为什么呢?

阿里云服务器:
在这里插入图片描述

实验二小结

通过实验⼆的实验结果,我们可以得知,当 TCP 第⼆次握⼿ SYN、ACK 包丢了后,客户端 SYN 包会发⽣超时重
传,服务端 SYN、ACK 也会发⽣超时重传。
客户端 SYN 包超时重传的最⼤次数,是由 tcp_syn_retries 决定的;服务端 SYN、ACK 包时重传的最⼤次数,是由 tcp_synack_retries 决定的。

TCP 第三次握⼿的 ACK 包丢了,会发⽣什么?

# 服务端配置防火墙规则
iptables -I INPUT -s 192.168.163.134 -p tcp --tcp-flag ACK ACK -j DROP

客户端:

tcpdump -i ens33 tcp and host 106.14.165.89 and port 8888 -w tcp_3_ack_timeout.pcap

客户端:
在这里插入图片描述
TCP 第⼀次握⼿的 SYN 包超时᯿传最⼤次数是由 tcp_syn_retries 指定,TCP 第⼆次握⼿的 SYN、ACK 包超时᯿传
最⼤次数是由 tcp_synack_retries 指定,那 TCP 建⽴连接后的数据包最⼤超时᯿传次数是由什么参数指定呢?

TCP 建⽴连接后的数据包传输,最⼤超时᯿传次数是由 tcp_retries2 指定,默认值是 15 次,如下:
在这里插入图片描述

实验三小结

在建⽴ TCP 连接时,如果第三次握⼿的 ACK,服务端⽆法收到,则服务端就会短暂处于 SYN_RECV 状态,⽽
客户端会处于 ESTABLISHED 状态。

由于服务端⼀直收不到 TCP 第三次握⼿的 ACK,则会⼀直᯿传 SYN、ACK 包,直到重传次数超过
tcp_synack_retries 值(默认值 5 次)后,服务端就会断开 TCP 连接。

⽽客户端则会有两种情况:

如果客户端没发送数据包,⼀直处于 ESTABLISHED 状态,然后经过 2 ⼩时 11 分 15 秒才可以发现⼀个
「死亡」连接,于是客户端连接就会断开连接。

如果客户端发送了数据包,⼀直没有收到服务端对该数据包的确认报⽂,则会⼀直重传该数据包,直到᯿传
次数超过 tcp_retries2 值(默认值 15 次)后,客户端就会断开 TCP 连接。
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 北京工业大学TCP实验是该校计算机科学与技术专业中的一门实践课程。该实验旨在通过设计和实现一个简单的TCP协议栈,加深学生对TCP协议的理解。 在这个实验中,学生需要深入学习TCP协议的工作原理和相关概念,了解数据的传输建立、数据的传输可靠性、拥塞控制等TCP协议的基本特性。 该实验可以分为以下几个主要步骤: 首先,学生需要通过学习TCP协议的基本知识,理解TCP报文的结构和协议的工作方式。 其次,学生需要实现TCP协议栈的关键功能,包括建立TCP连接、传输数据、确认数据接收、拥塞控制等。 然后,学生需要在实现的TCP协议栈上进行测试和调试,确保其能够正确地完成TCP协议所要求的功能。 最后,学生还需要进行实验报告的撰写,总结实验过程中遇到的问题、解决方法以及实验结果的分析和结论。 通过完成北京工业大学TCP实验,学生将能够深入理解TCP协议的工作原理和核心概念,培养网络编程和调试的能力,提高解决实际问题的能力。同时,该实验也为学生今后从事相关领域的研究或工作奠定了坚实的基础。 ### 回答2: 北京工业大学 TCP 实验是该校计算机科学与技术专业的一门实验课程,该课程主要针对 TCP(Transmission Control Protocol,传输控制协议)的原理和应用进行探讨和实践。 在这门实验中,学生将深入了解 TCP 协议的功能、特点和工作原理,通过实际操作和实验分析,加深对 TCP 的理解。实验内容通常涉及 TCP 连接的建立与维护、数据的可靠性传输、拥塞控制、流量控制等方面。 实验中,学生需要通过配置网络环境,搭建 TCP 实验平台。利用网络测试工具和抓包工具,实现 TCP 连接的建立和数据的传输。通过对比不同实验参数、网络条件以及数据量等因素对 TCP 性能的影响,学生能够分析并总结 TCP 的工作特点,并深入探讨 TCP 协议的局限性与改进方向。 通过这门实验课程,学生能够学习到 TCP 协议在实际应用中的重要性,掌握 TCP 的基本原理和使用方法。同时,通过实验分析,学生能够提高问题解决和实验设计能力,培养科学研究的思维和实践能力。 总之,北京工业大学 TCP 实验是一门重要的实践课程,通过实际操作和实验分析,学生能够深入了解和应用 TCP 协议,提高自己的专业水平和实践能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值