分析Packet Tracer抓取到的报文

1. 基本信息

姓名学号班级网络是否连通能否正常抓取报文

2. 建立网络拓扑结构

 

3. 配置网络参数

3.1 客户端

 

3.2 服务端

 

 

4. 抓取报文并分析

4.1 概览

 

为上述报文进行归类,哪些序号的报文是做什么,举例:

  • 报文1-3:DNS域名解析

  • 报文4-6和报文8:TCP连接建立

  • 报文7和报文9-11:HTTP请求报文,响应报文

  • 报文12-15:TCP断开连接

再对上述的分门别类展开阐述。每一个报文每个字段是什么含义。以下以DNS报文为例。

4.2 DNS域名解析

客户端向本地域名服务器发送DNS请求报文,域名服务器给客户端返回DNS响应报文。

4.2.1 DNS请求报文

 

基础结构

每个字段含义如下:

(1)Transaction ID: 0x4350

会话标识(2个字节),是DNS报文的标识,对于请求报文和其对应的应答报文,这个字段是相同的,通过它可以区分DNS应答报文是哪个请求的响应。

(2)标志

标志(2个字节),

  • QR(1位),报文没有显示,查询/响应标志,0表示查询,1表示响应

  • OPCODE: 0x01,操作码,0x01表示

  • AA表示授权回答

  • TC表示可截断的

  • RD表示期望递归

  • Ra表示可用递归

  • rcode:0x0表示返回码,0表示没有差错,3表示名字差错,2表示服务器错误

(3)QDCOUND: 1表示问题的数量

(4)ANCOUND: 1表示回答的数量

(5)NSCOUND: 0表示权威RR数

(6)ARCOUND: 0表示附加RR数

问题区域(Queries)

每个字段含义如下:

(1)Name: ruixin.cai表示要查询的域名信息。其中ruixin为二级域名,cai为一级域名

(2)TYPE表示查询类型,CLASS表示查询类

(3)TTL表示生存时间,即各地的DNS缓存服务器多久去权威域名解析服务器获取一次域名的解析IP,记录了该报文过期时间为86400s

(4)LENGTH表示数据长度

4.2.1 DNS响应报文

 

回答区域(Answer)

每个字段含义如下:

(1)Name: ruixin.cai表示要查询的域名信息。其中ruixin为二级域名,cai为一级域名

(2)TYPE表示查询类型,CLASS表示查询类

(3)TTL表示生存时间,即各地的DNS缓存服务器多久去权威域名解析服务器获取一次域名的解析IP,记录了该报文过期时间为86400s

(4)LENGTH表示数据长度,IP为需要访问的域名的地址

4.2.3 UDP

 

SOURCE PORT:53 源端口号,DNS 协议运行在 UDP 协议之上,使用端口号 53 。

DESTINATION PORT:1025 目的端口号

LENGTH:0X003a UDP长度

CHECKSUM:0 UDP检验和

DATA 数据

4.3 TCP连接建立

4.3.1 概述

 

  • 序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

  • ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

  • SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

  • FIN:"finished"简写。表示发送者以及发送完数据。通常用在发送者发送完数据的最后一个包中。

4.3.2 连接请求报文

首先 Client 端发送连接请求报文。

 

4.3.3 连接接受报文

Server 段接受连接后回复 ACK 报文,并为这次连接分配资源。

 

4.3.4 第三次握手

Client 端接收到 ACK 报文后也向 Server 段发生 ACK 报文,并分配资源,这样 TCP 连接就建立了。

 

4.4 HTTP

分析HTTP请求和响应报文,除了关注HTTP请求和响应报文格式,还要关注被封装成TCP报文的序号、确认号和标志位的演变。

4.4.1 HTTP请求报文

HTTP Data:Accept-Language: en-us//表示用户希望优先得到英文版本的文档
Accept: */*                     //表示告知服务器客户端会接受与其请求相符的任意媒体类型
Connection: close               //表示告诉服务器发送完请求的文档后就可释放连接
Host: ruixin.cai                //表示主机的域名
​

4.4.2 HTTP响应报文

HTTP Data:Connection: close     //表示告诉服务器发送完请求的文档后就可释放连接
Content-Length: 369             //表示描述HTTP消息实体的传输长度为369
Content-Type: text/html         //表示具体请求中的媒体类型为HTML格式
Server: PT-Server/5.2           //表示服务器的名称和版本

4.4.3 IP数据报

 

  • VER:4:ip报文中,版本占了4位,用来表示该协议采用的是那一个版本的ip,相同版本的ip才能进行通信。一般此处的值为4,表示ipv4

  • IHL:5:该字段用四位表示,表示整个ip包头的长度,其中数的单位是4字节。即二进制数0000-1111(十进制数0-15),其中一个最小长度为0字节,最大长度为60字节。一般来说此处的值为0101,表示头长度为20字节。

  • DSCP:0x00:Tos服务字段,该字段用8位表示。该字段一般情况下不使用。

  • TL:491:该字段表示整个ip报文的长度,单位是1字节。能表示的最大字节为2^16-1=65535字节。不过由于链路层的MTU限制。超过1480字节后就会被分片(以太帧MTU为1500的情况下,除去20字节的包头)

  • ID:0x0009:该字段是ip软件实现的时候自动产生的,该字段的目的不是为了接受方的按序接受而设置的,而是在ip分片以后,用来标识同一片分片的。方便ip分片的重组。

  • FLAGS:0:该字段是与ip分片有关的。其中有三位,但只有两位是有效的,分别为MF,DF,MF。MF标识后面是否还有分片,为1时,表示后面还有分片。DF标识是否能分片,为0表示可以分片。

  • FRAG OFFSET:0x000 :该字段是与ip分片后,相应的ip片在总的ip片的位置。该字段的单位是8字节。比如,一个长度为4000字节的ip报文,到达路由器。

  • TTL:128 :该片表示生存周期,该值占8位。ip分片每经过一个路由器该值减一,它的出现是为了防止路由环路,浪费带宽的问题。

  • PRO:0x06 :该值标识上层的协议。

  • CHKSUM:该值是对整个数据包的包头进行的校验。占16位。

  • SRC IP:192.168.1.7 :源地址。

  • DST IP:192.168.1.8 :目的地址。

  • DATA:数据。

4.5 TCP连接释放

4.5.1概述

 

4.5.2 断开连接请求报文

Clien发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

4.5.3 服务端接收报文

Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。

Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

正在上传…重新上传取消

4.3.4 第四次挥手

Client收到FIN后,Client进入TIME_WAIT状态,发送ACK给Server,Server进入CLOSED状态,完成四次挥手。

正在上传…重新上传取消

5. 实验过程中遇到的问题及解决方法

为什么连接的时候是三次握手,关闭的时候却是四次握手?

①因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。 ②但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。 ③只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

为什么TCP头定义不是6位吗?但在报文中却有十位?

当前,为TCP头部定义了8位的字段,尽管有些老的实现只能理解最后的6位。

0b表示这段数字是二进制。

CWR : 拥塞窗口减(发送方减低它的发送速率) ECE : ECN回显(发送方接收到了一个更早的拥塞通告) URG : 紧急(紧急指针字段有效,很少被用到) ACK : 确认 (确认号字段有效,连接建立后一般都处于启用状态) PSH : 推送 (接收方应尽快给应用程序发送这个数据,目前没有可靠地实现或者用到) RST : 重置连接 (当前连接关闭,重新建立新的连接) SYN : 用于初始化一个连接的同步序列号 FIN : 该报文的发送方已经没有数据要发送,请求对方关闭当前连接。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值