《计算机网络》实验报告四 TCP协议分析
本文介绍了TCP协议分析实验,通过wget下载新疆大学主页并使用tcpdump抓包,借助Wireshark分析TCP报文结构、三次握手建立连接及四次挥手释放连接的过程。实验详细解析了TCP报文各字段功能,包括源/目标端口、序列号、确认号、控制标志位等。通过实际操作,验证了TCP面向连接、可靠传输的特性,并总结了滑动窗口、拥塞控制等机制。实验过程遇到的问题如命令输入错误、过滤条件设置不当等,通过修正
目 录
1、实验目的
1、了解运输层TCP协议基本概念、报文结构
2、分析TCP报文头部
3、分析TCP连接建立过程、TCP连接释放
4、掌握利用tcpdump和wireshark进行tcp协议分析技术
2、实验环境
1、硬件要求:阿里云云主机ECS 一台、笔记本电脑一台
2、软件要求:Linux/ Windows 操作系统
3、实验内容
TCP是面向连接的、在不可靠的互联网络上提供可靠的端到端通信,是TCP/IP协议集的核心协议。
TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
3.1 利用wget下载新疆大学主页
利用wget下载新疆大学主页www.xju.edu.cn,与此同时使用tcpdump抓包。
3.2 使用wireshark分析TCP报文结构
根据捕获的数据包,分析TCP报文结构由哪几部分组成,其功能是什么?
3.3 使用wireshark分析建立连接的三次握手
根据捕获的数据包,分析建立连接的三次握手,将TCP协议中各字段名,字段长度,字段值,字段含义填入到对应表格中。
3.4 使用wireshark分析释放连接的四次挥手
根据捕获的数据包,分析释放连接的四次挥手,将TCP协议中各字段名,字段长度,字段值,字段含义填入到对应表格中。
4、实验结果与分析
4.1 利用wget下载新疆大学主页
1. 使用wget命令下载新疆大学主页www.xju.edu.cn。
wget www.xju.edu.cn

2. 使用tcpdump命令抓取www.xju.edu.cn网站的数据包,并将所抓取的数据包保存在xju.cap文件中。
tcpdump host www.xju.edu.cn -w xju.cap

3. 使用wireshark打开爬取的数据包文件xju.cap,查看所爬取的数据包的信息。

4.2 使用wireshark分析TCP报文结构
1. 使用Ping命令查看网站www.xju.edu.cn的IP地址,查询后的IP地址为111.115.76.75。
Ping www.xju.edu.cn

2. 通过在过滤栏中输入以下语句将使用TCP协议并且IP地址为111.115.76.75的数据包进行过滤。
tcp and ip.addr==111.115.76.75

3. 根据捕获的数据包,分析TCP报文结构由哪几部分组成,其功能是什么。
源端口(16位):通信发送方使用的端口号。
目标端口(16位):通信接收方使用的端口号。
序号(32位):用来确保数据可靠传输的唯一值。
确认号(32位):接收方在响应时发送的数值。
数据偏移(4位):标志数据包开始的位置,TCP 头部的长度。
保留(6位):保留为今后使用,但目前应该置为0。
紧急URG:数据包中承载的内容应该立即由 TCP 协议栈立即进行处理:当 URG=1 时,表明
紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。
确认ACK:确认收到的数据包:只有当 ACK=1 时,确认号字段才有效;当 ACK=0 时,确认号无效。
推送PSH:数据包直接发送给应用,而不是缓存起来:接收 TCP 收到 PSH=1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。
复位RST:之前尝试的连接被关闭,(信号差,信号拥挤):当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
同步SYN:发起连接的数据包:同步 SYN=1 表示这是一个连接请求或连接接受报文。
终止FIN:连接成功,传输完毕之后,连接正在断开:用来释放一个连接,FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
窗口(16位):匹配缓存区的大小。
校验和(16位):确认 TCP 数据段中的内容是否发送了变化。
紧急指针(16位):明确显示数据之前的 16 进制序列号。
选项:长度可变,最长可达40字节,当没有使用选项时,TCP的首部长度是20字节。
4.3 使用wireshark分析建立连接的三次握手
1. 第一次握手
客户端将标志位 SYN 置为 1 ,随机产生一个值seq = X,并将该数据包发送给服务器,等待服务器确认。

分析建立连接的第一次握手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

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

分析建立连接的第二次握手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

3. 第三次握手
客户端收到确认后,检查 ack是否为X + 1,ACK 是否为 1 ,如果正确则将标志位 ACK 置为 1 ,ack= Y + 1,并将该数据包发送给服务器,服务器检查 ACK 是否为1 ,如果正确则连接建立成功。

分析建立连接的第三次握手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

4.4 使用wireshark分析释放连接的四次挥手
1. 第一次挥手
主动关闭方发送一个 FIN ,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发送数据了(当然,在 FIN 包之前发送出去的数据,如果没有收到对应的 ACK 确认报文,主动关闭方依然会重发这些数据),但此时主动关闭方还可以接受数据。

分析释放连接的第一次挥手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

2. 第二次挥手
被动关闭方收到 FIN 包后,发送一个 ACK 给对方,确认序号为:收到报文序号seq+收到报文所携带数据长度len+ 1 。上一个报文可能“捎带”了主动关闭方发送的最后一块数据,其长度用字段len来表示。

分析释放连接的第二次挥手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

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

分析释放连接的第三次挥手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

4. 第四次挥手
主动关闭方收到 FIN 后,发送一个 ACK 给被动关闭方,确认序号为:收到报文的序号seq + 收到报文所携带数据长度len+ 1 ,至此,完成四次挥手。

分析释放连接的第四次挥手,将TCP协议中源端口、目的端口、序号、确认号、窗口、校验和及紧急指针的字段名,字段长度,字段值,字段含义填入到对应表格中。

5、实验小结
5.1 问题与解决办法:
1. 问题一:使用tcpdump进行数据包的抓取时出现如下提示此命令未找到:
![]()
解决方法:由于命令输入错误导致,数据包的抓取命令为tcpdump,而不是tcpdnmp,将对应命令进行更改后错误消失。
2. 问题二:对指定网络接口的数据包进行抓取时出现如下提示语法错误:
![]()
解决方法:由于命令键入不完整所导致,指定网络接口所需要的参数是-i,在eth0前方添加-i后错误消失。
3. 问题三:使用tcpdump抓取所有的数据包时一直在抓取,不能够自动停止抓包:

解决方法:使用Ctrl+c就可以终止运行的命令,进而就可以停止抓包。
4. 问题四:使用Wireshark对抓取的数据包进行过滤时出现如下提示输入框出现红色:

解决方法:由于过滤命令输入错误,在过滤地址时使用ip.addr,将输入内容中的id.addr改为ip.addr后红色报错消失。
5. 问题五:使用Wireshark对抓取的数据包进行多个条件同时成立过滤时出现如下提示输入框出现红色:

解决方法:由于多个条件同时成立时需要使用and进行连接,但是输入命令时并没有使用and进行连接所导致,在输入内容中加入and后红色报错消失。
5.2 心得体会:
1、TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2、要控制 TCP 发送速率,不能发送得太快,以免数据来不及处理,也不能发送得太慢,以免浪费资源。
3、在 TCP 中,发送端和接收端其实都维护着对应的窗口:分别为发送端窗口和接收端窗口。
4、发送端窗口是由接收窗口剩余大小决定的。接收方会把当前接收窗口的剩余大小写入应答报文,发送端收到应答后根据该值和当前网络拥塞情况设置发送窗口的大小,所以发送窗口的大小是不断变化的,这个不断变化的窗口就叫做滑动窗口。
5、拥塞控制作用于网络,目的是防止过多的数据拥塞网络,避免出现网络负载过大,带宽被大量占用的情况。
6、建立连接需要三次握手,断开连接需要四次挥手。
7、超时重传机制保证每一次传输的数据都是可靠的。
8、滑动窗口动态调整发送端窗口大小,保证接收方来得及接收数据。
9、拥塞窗口动态调整发送端窗口大小,防止过多的数据拥塞网络,出现网络带宽不够用的情况。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)