当前位置: 首页 > news >正文

计算机网络--TCP、UDP抓包分析实验

计算机网络实验

目录

实验目的

实验环境

实验原理

1、UDP协议

2、TCP协议

实验具体步骤


  • 实验目的

1掌握使用wireshark工具对UDP协议进行抓包分析的方法,掌握UDP协议的报文格式,掌握UDP协议校验和的计算方法,理解UDP协议的优缺点,通过实验,进一步了解UDP协议;

2掌握使用wireshark工具对TCP协议进行抓包分析的方法;通过实验,进一步了解TCP协议。

  • 实验环境

  1. Windows11系统
  2. Ethereal、wireshark抓包工具
  • 实验原理

1、UDP协议

UDP是一种简单的面向数据报的传输层协议,与TCP相比,它不提供可靠性、顺序传输或拥塞控制。

UDP的主要特点:

无连接。发送数据之前不需要建立连接。

使用尽最大努力交付。即不保证可靠交付。

面向报文。UDP 一次传送和交付一个完整的报文。

没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。很适合多媒体通信的要求。

支持一对一、一对多、多对一、多对多等交互通信。

首部开销小,只有 8 个字节。

2、TCP协议

TCP是一种面向连接的、可靠的传输层协议,用于在网络上可靠地传输数据。

TCP特点:

TCP 是面向连接的运输层协议。

每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。

TCP 提供可靠交付的服务。

TCP 提供全双工通信。

字段

含义

源端口和目的端口

16位,表示数据包发送方\接收方的端口号

序号

32位,用于标识发送方发送的数据字节流的顺序,
以便接收方能够对接收到的数据包进行排序和重组。

确认号

32位,表示接收方期望收到的下一个字节的序列号

数据偏移

4位,表示TCP首部的长度,以32位(4字节)为单位。
数据偏移字段的最小值为5(即20字节),最大值为15(即60字节)

保留

6位,保留供将来使用,发送时设置为0

URG

当设置为1时,表示紧急指针字段有效

此时该字节会被优先发送

ACK

当设置为1时,表示确认号字段有效

PSH

当设置为1时,表示接收方应立即将数据提交给应用程序,
而不是等待缓冲区填满后再提交阿

RST

当设置为1时,表示发送方要求重置连接

SYN

当设置为1时,表示这是一个连接请求或连接接受报文,用于建立连接

FIN

当设置为1时,表示发送方已完成数据发送,请求关闭连接

窗口

2位,表示发送方允许接收方发送的数据量,以字节为单位。
窗口大小可以随着网络拥塞程度的

TCP各字段含义表

一、UDP

UDP报头由4个部分组成:源端口号、目标端口号、数据包长度和校验值,其中每个域各占用两个字节。UDP使用端口号为不同的应用保留其各自的数据传输通道。UDP和TCP正是采用这一机制实现对同一时刻内多项应用同时发送和接受数据的支持。数据发送一方(可以是客户端或服务器端)将UDP数据报通过源端口发送出去,而数据接收一方则通过目标端口接收数据。有的网络应用只能使用预先为其预留或注册的静态端口;而另外一些网络应用则可以使用未被注册的动态端口。因为UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0~65535。一般来说,大于49151的端口号都代表动态端口。

每个UDP报文称为一个用户数据报(User Datagram)。用户数据报分为两个部分:UDP首部和UDP数据区。

源端口

目的端口

报文长度

校验和

数据

                            图 UDP报文格式

二、TCP

TCP是面向连接的协议。在面向连接的环境中,开始传输数据之前,在两个终端之间必须先建立一个连接。对于一个要建立的连接,通信双方必须用彼此的初始化序列号seq和来自对方成功传输确认的应答号ack(指明希望收到的下一个八位组的编号)来同步,习惯上将同步信号写为SYN,应答信号写为ACK。整个同步的过程称为三次握手,如图下图所示。

图TCP连接的建立

对于一个已经建立的连接,TCP使用四次握手来结束通话(使用一个带有FIN附加标记的报文段),如图所示。

图TCP连接的释放

TCP每发送一个报文段,就对这个报文段设置一次计时器。只要计时器设置的重传时间到期,但还没有收到确认,就要重传这一报文段。

16位源端口号

16位目的端口号

32位序号

32位确认序号

4位首部长度

保留

(6位)

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

16位窗口大小

16位校验和

16位紧急指针

选项

数据

图TCP报文格式

  • 实验具体步骤

1、抓取本机和远程计算机通讯使用的UDP数据报

在本机上安装并运行腾讯QQ即时聊天工具(腾讯QQ即时聊天软件采用UDP的方式进行数据传输),QQ登陆以后,启动wireshark协议分析工具,并选择“Capture”à“Start”,开始数据包的抓取。然后使用QQ软件和好友进行聊天对话,等待一段时间后停止wireshark的抓包工作。停止抓包后在wiresharkl窗口中除了希望的UDP数据包外,还会有其他一些数据包,所以需要在wiresharkl中的“Filter”域中输入关键字“UDP”,然后点击“Apply”按钮,将非UDP数据包过滤掉。

2、UDP协议分析

分析查看这些UDP协议数据包,回答以下问题:

  1. 这些UDP数据包的包头分为多少个部分?每个部分代表什么含义?

答:源端口:8000,代表发送方的端口号

目的端口:55436,代表接收方的端口号

长度:73,整个 UDP 数据包的长度

校验和:用于检验数据包在传输过程中是否出现错误。

  1. 这些UDP数据包的源地址、目的地址分别是多少?通讯使用的源端口和目的端口号又分别是多少?

答:源地址为 36.155.207.242,目的地址为 10.102.91.91,源端口为 8000,目的端口为 55436。

  1. 观察这些发送的UDP数据包,有没有得到来自对方的回复?为什么?

答:没有回复,因为并没有从 10.102.91.91 的某个端口发往 36.155.207.242 的 8000 端口的数据包

3、UDP校验和的计算

图UDP校验和的计算

根据图5-2给出UDP计算校验和的步骤。

答:当计算UDP协议的校验和时,首先需要在UDP数据报前面添加一个伪首部,其中包含了源IP地址、目的IP地址、协议类型(UDP为17)和UDP数据报长度等信息。然后,将伪首部、UDP首部以及数据部分按照16位字节分割。如果数据部分字节数不是偶数,则需填充全零字节。接下来,对所有的16位字进行二进制反码求和。这意味着每一位进行异或操作,进位会在结果的最低位上被加上。最后,对求和结果取反,得到校验和值。在接收方收到UDP数据报后,也会按照同样的步骤计算校验和,并与接收到的校验和进行比较,以验证数据在传输过程中是否发生错误。

TCP

1、抓取本机和远程计算机进行文件传输时TCP数据包

在分析TCP之前,先通过HTTP POST的方式(通过HTTP方式传输数据有POST和GET两种方式,前者相对后者而言,更适合用于传输具有大量数据的文件),将本地的一个文件上传到一个远程的Web服务器上,然后使用Ethereal去捕获该文件传输过程中的TCP数据包。

(1)打开IE浏览器,在地址栏内输入

“http://gaia.cs.umass.edu/ethereal-labs/alice.txt”,

并复制其内容,然后在本地计算机上新建一个文本文件“alice.txt”,将刚才复制的内容粘贴到该文件中。

(2)在IE浏览器的地址栏中输入“http://gaia.cs.umass.edu/ethereal-labs/TCP-ethereal-file1.html”,出现如图所示的页面。

                               图 浏览器界面

(3)点击网页上的“浏览”按钮,选择需要上传的本地文件“alice.txt”。注意:在这一步不要点击网页最下面的“Upload alice.txt file”按钮。

(4)启动Ethereal协议分析工具,并点击程序上方“Capture”菜单下的“Start”开始数据包的抓取。

(5)返回到刚才打开的那个网页,点击网页上的“Upload alice.txt file”按钮,发送alice.txt文件。

(6)发送完文件以后,停止Ethereal的抓包工作,会看到如图6-2所示的Ethereal窗口。

图Ethereal抓取的TCP协议数据包

2、过滤无关的其他数据包

由于Ethereal抓包的时候,将网卡设为监听模式,因此在抓取的数据包中,会将网络上出现的所有数据包都抓下来,其中许多是与该实验无关的数据包,如ARP数据包、交换机的通讯包等,因此需要将这些抓到的无关数据包给过滤掉。过滤的步骤为:首先在Ethereal中的“Filter”域中输入关键字“TCP”,然后点击右边的“Apply”按钮,将捕获到的与传输无关的数据包过滤掉,剩下与本实验相关的部分。

在过滤后的数据包捕获窗口中,看到的是本机和gaia.cs.umass.edu之间的一系列的TCP和HTTP通讯信息,其中有初始化连接的含有“SYN”信息的3次TCP握手,一个HTTP POST信息和一系列的从本机发往gaia.cs.umass.edu的TCP包和HTTP包。查看捕获的数据包,回答以下问题:

  1. 本地计算机的IP地址是什么,通讯使用的TCP端口号是多少?

答:128.119.245.12    80                        

(2)gaia.cs.umass.edu的IP地址是多少,对方使用哪个端口发送和接收TCP数据包?

答:10.102.182.112   发送80 接受64829

3、TCP协议分析

由于这个实验是分析TCP协议,所以接下来需要将上述的窗口中的HTTP信息过滤掉,只留下TCP数据包。点击“Analyze” 菜单中的“Enableed Protocols”,在弹出的如图6-3所示的“Enabled Protocols”对话框中将“HTTP”的勾选去掉。

图 屏蔽HTTP信息

点击“确定”按钮以后,将会看到只有本机和gaia.cs.umass.edu之间通讯的TCP数据包。分析查看这些TCP数据包,回答以下问题:

  1. 用于初始化连接的TCP SYN数据包中的sequence号是多少?在该数据包中哪部分表明了该数据包数否为一个SYN数据包?

答:0 syn标志位

  1. gaia.cs.umass.edu回复的SYNACK数据包中的sequence号是多少?数据包中的哪部分表明了该数据包是否为一个SYNACK数据包?

答:sequence 号是1;

这个数据包中,Flags 字段的值为 0x01010000,其中第 16 位(从右往左数)为 ACK 位,第 17 位为 SYN 位,这两个位都被设置为 1,因此可以确定该数据包是一个 SYNACK 数据包。

  1. 包含HTTP POST指令的TCP数据包中的sequence号是多少?

答:1

  1. 如果将含有HTTP POST指令的TCP数据包作为连接建立后的第一个数据包,那么前6个数据包的sequence号是多少?并且它们分别是什么时间发送的?这些数据包的ACK确认包又是什么时候收到的?比较发送的TCP数据包和其确认包有什么不同。这6个数据包的RTT值是多少?在收到每一个ACK确认包后,RTT估计值又是多少?

答:前6个数据包的序列号分别是:1、15、12240、1360、5440和2720。

发送时间:4.439929。

收到时间:4.666633。

发送的TCP数据包包含数据,而ACK确认包只包含确认信息,不包含数据。

这6个数据包的RTT值是0.226704。

收到每个ACK确认包后,估计的RTT值也是0.226704。

(5)前6个TCP数据包的长度分别是多少?

答:分别是565、1460、1460、1460、1460、1460。

相关文章:

  • 企业构建AI所需的最低可行基础设施:从数据存储到大模型集成
  • Python线程终止:如何优雅地结束一场“舞蹈”
  • 制造企业为何需要PLM系统?PLM系统解决方案对制造业重要性分析
  • 【Linux的内存管理】
  • 一文让你看懂微服务,服务网格以及Serverless
  • gRPC协议简介
  • Unity 查看Inspectors组件时严重掉帧
  • uni-app+vue3+pina实现全局加载中效果,自定义全局变量和函数可供所有页面使用
  • Python 面向对象编程基础
  • CSR、SSR、SSG
  • 相关数据库类型介绍
  • 如果MySQL已经安装但mysql --version命令不好用,怎么办?
  • MySQL索引详解
  • Chrome截取网页全屏
  • The First项目报告:探索Yield Guild Games运行机制与发展潜力
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 0x05 Python数据分析,Anaconda八斩刀
  • canvas 五子棋游戏
  • const let
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • HTML-表单
  • Java到底能干嘛?
  • Linux中的硬链接与软链接
  • 给Prometheus造假数据的方法
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 入口文件开始,分析Vue源码实现
  • 首页查询功能的一次实现过程
  • 说说动画卡顿的解决方案
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 由插件封装引出的一丢丢思考
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​第20课 在Android Native开发中加入新的C++类
  • #宝哥教你#查看jquery绑定的事件函数
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $.ajax,axios,fetch三种ajax请求的区别
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (4)事件处理——(7)简单事件(Simple events)
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (四)Android布局类型(线性布局LinearLayout)
  • (源码分析)springsecurity认证授权
  • (转)Linq学习笔记
  • (转)Linux下编译安装log4cxx
  • .NET C# 配置 Options
  • .Net Core中Quartz的使用方法
  • .NET 依赖注入和配置系统
  • .NET 直连SAP HANA数据库
  • .NET4.0并行计算技术基础(1)
  • .NET单元测试使用AutoFixture按需填充的方法总结
  • .NET框架
  • .NET企业级应用架构设计系列之结尾篇
  • .pop ----remove 删除