Itsad

网络数据包解析

TCP/IP协议数据包,一般由应用层、传输层、网络层、数据链路层封装而成。

四层协议各自的作用:

  数据链路层实现了网卡接口的驱动程序。

  网络层实现了数据包的选路和转发。

  传输层为两台主机上的应用程序提供端到端(end to end)的通信。

  应用层负责处理应用程序的逻辑。

#1先封装的协议头是传输层,传输层有TCP、UDP、TLS 、DCCP 、SCTP 、RSVP 、PPTP,常用的有TCP,UDP

TCP头的结构(tcp头总长度为 20个字节+options可选选项)

(1)TCP源端口(Source Port):16位的源端口包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

(2)TCP目的端口(Destination Port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

(3)序列号(Sequence Number):32位 TCP连线发送方向接收方的封包顺序号。

(4)确认序号(Acknowledge Number):32位 接收方回发的应答顺序号。

(5)头长度(Header Length):偏移量(4bit)和保留(4bit)总共8位  。 表示TCP头的双四字节数,如果转化为字节个数需要乘以4。

(6)保留(2bit)和标记(6bit)总共8位。

 标记位: 

  URG:是否使用紧急指针,0为不使用,1为使用。

  ACK:请求/应答状态。0为请求,1为应答。

  PSH:以最快的速度传输数据。  

  RST:连线复位,首先断开连接,然后重建。

  SYN:同步连线序号,用来建立连线。

  FIN:结束连线。如果FIN为0是结束连线请求,FIN为1表示结束连线。

(7)窗口大小(Window):16位  目的机使用16位的域告诉源主机,它想收到的每个TCP数据段大小。

(8)校验和(Check Sum):16位  这个校验和和IP的校验和有所不同,不仅对头数据进行校验还对封包内容校验。

(9)紧急指针(Urgent Pointer):16位  当URG为1的时候才有效。TCP的紧急方式是发送紧急数据的一种方式。

(10)可选选项(options)24位,类似IP,是可选选项。填充8位,使选项凑足32位。

UDP头的结构

源端口(2字节)

目的端口(2字节)

封报长度(2字节)

校验和(2字节)

数据

(1)源端口(Source Port):16位的源端口域包含初始化通信的端口号。源端口和IP地址的作用是标识报文的返回地址。

(2)目的端口(Destination Port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

(3)封包长度(Length):16位  UDP头和数据的总长度。

(4)校验和(Check Sum): 16位 和TCP和校验和一样,不仅对头数据进行校验,还对包的内容进行校验。

#2、然后封装的是网络层,网络层主要是IP协议,还有ICMP协议,IGMP协议等

IP协议头(ip头总长度根据IP头的头长来计算。一般IP没有可选选项,长度为20字节,也就是对应头长等于5):

1-1.版本4位,表示版本号,目前最广泛的是4=B1000,即常说的IPv4;相信IPv6以后会广泛应用,它能给世界上每个纽扣都分配

一个IP地址。

1-2.头长4位,数据包头部长度。它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

  这个字段表示了IP头部的总长度,但它不是直接表示,因为它只占了4比特,最大也就15,实际的IP头部长度等于首部长度字段表示的          值乘以4,单位是字节,也就是首部最长为15×4=60字节,一般IP数据报首部都没有选择项,长度为20字节,也就是对应头长等于5。

1-3.服务类型,包括8个二进制位,每个位的意义如下:

过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

延迟字段:1位,取值:0(正常)、1(期特低的延迟)

流量字段:1位,取值:0(正常)、1(期特高的流量)

可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

成本字段:1位,取值:0(正常)、1(期特最小成本)

保留字段:1位 ,未使用

1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最大只能是65535,及64KB。

2-1.重组标识16位,发送主机赋予的标识,以便接收方进行分片重组。

2-2.标志3位,他们各自的意义如下:

保留段位(2):1位,未使用

不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)

更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

2-3.段偏移量13位,与更多段位组合,帮助接收方组合分段的报文,以字节为单位。

3-1.生存时间8位,经常ping命令看到的TTL(Time To Live)就是这个,每经过一个路由器,该值就减一,到零丢弃。

3-2.协议代码8位,表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

3-3.头检验和16位,是IPv4数据包头部的校验和。由发送端填充,接收端对其使用CRC算法检验IP数据报头部在传输过程中是否损坏。

4-1.源始地址,32位4字节,我们常看到的IP是将每个字节用点(.)分开,如此而已。

5-1.目的地址,32位,同上。

6-1.可选选项,主要是给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉,普联(TP_LINK)的TL-ER5110路由就能这么做。

ICMP协议头

ICMP报文就像是IP报文的小弟,总顶着IP报文的名头出来混。因为ICMP报文是在IP报文内部的:

ICMP所有报文的前4个字节都是一样的,但是剩下的其他字节不相同。

前四个字节统一的格式:类型(8位),代码(8位),校验和(16位)

类型和代码决定了ICMP报文的类型。常见的有:

  类型8, 代码0 ==> 表示回显请求(ping请求)

  类型0, 代码0 ==> 表示回显应答(ping应答)

  类型11,代码0 ==> 超时

检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。

ICMP报文具体分为查询报文差错报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)

#3、最后封装的是数据链路层,即以太网头和FCS

以太网头(总长度为14个字节)是由  6字节的目的MAC地址 + 6字节的源MAC地址 + 2字节的类型  组成。

以太的各种类型:

以太类型

协议

0x0800

Internet协议版本4(IPv4)

0x0806

地址解析协议(ARP)

0x8035

反向地址解析协议(RARP)

三个数值

AppleTalk(Ethertalk)

0x80f3

AppleTalk地址解析协议(AARP)

为0x8100

IEEE 802.1Q标签帧

三个数值

Novell IPX(alt)

0x8138

Novell公司

0x86DD

Internet协议版本6(IPv6)

0x8819

CobraNet技术

0x88a8

提供商桥接(IEEE 802.1ad)

0x8847

MPLS单播

0x8848

MPLS多播

0x8863

PPPoE发现阶段

0x8864

PPPoE会话阶段

0x888E

EAP over LAN(IEEE 802.1X)

0x889A

HyperSCSI(以太网SCSI)

0x88A2

以太网ATA

0x88A4

EtherCAT协议

0x88CD

SERCOS-III

0x88D8

以太网电路仿真服务(MEF-8)

0x88E5

MAC安全(IEEE 802.1AE)

0x8906

以太网光纤通道

0x8914

FCoE初始化协议

0x9100

Q-in-Q的

0xCAFE

Veritas低延迟传输(LLT)

在不定长的数据字段(以太网头后面的数据)后是4个字节的帧校验序列(FCS)

分类: 网络编程

搬砖:网络数据包解析相关推荐

  1. pcap文件解析工具_【免费毕设】PHP网络数据包分析工具的设计与开发(源代码+论文)...

    点击上方"蓝字"关注我们目录 系统设计 网络数据包分析系统的设计 整个网络数据报分析工具采用模块化的设计思想,原因是许多程序太长或太复杂,很难写在单一单元中.如果把代码分为较小的功 ...

  2. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程

    本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...

  3. python应用系列教程——python使用scapy监听网络数据包、按TCP/IP协议进行解析

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  4. 列举网络爬虫所用到的网络数据包,解析包?

    网络数据包 urllib.urllib2.requests 解析包 re.xpath.beautiful soup.lxml 转载于:https://www.cnblogs.com/sea-strea ...

  5. python网络数据包分析_Pyshark:使用了WirdShark的Python数据包解析工具(Tshark)

    Pyshark Pyshark是一款针对tshark的Python封装器,在Pyshark的帮助下,广大研究人员可以使用wireshark的解析器来进行Python数据包解析.扩展文档:[Pyshar ...

  6. Linux内核网络数据包发送(三)——IP协议层分析

    Linux内核网络数据包发送(三)--IP协议层分析 1. 前言 2. `ip_send_skb` 3. `ip_local_out` and `__ip_local_out` 3.1 netfilt ...

  7. Linux内核网络数据包发送(二)——UDP协议层分析

    Linux内核网络数据包发送(二)--UDP协议层分析 1. 前言 2. `udp_sendmsg` 2.1 UDP corking 2.2 获取目的 IP 地址和端口 2.3 Socket 发送:b ...

  8. python小数乘法_Polymorph:支持几乎所有现有协议的实时网络数据包操作框架

    Polymorph是一个用Python3编写的框架,其允许实时修改网络数据包,为用户提供对数据包内容的最大化控制.该框架旨在实现任何现有协议(包括没有公共规范的私有协议)的网络数据包的实时修改.除此之 ...

  9. 流量Ⅰ--一文了解pcap网络数据包的结构?

    一文了解pcap网络数据包如何分析 0x00 基础知识 1.OSI七层模型每层的作用 2.TCP/IP 结构及具有五层协议的结构体系 0x01 数据是如何在各层次间传输的 1.数据帧的封装 2.数据格 ...

最新文章

  1. pfSense2.32端口转发设置
  2. C/C++笔记(04):GB2312字符串和UTF-8之间的转换
  3. java 启动程序设置classpath/加载jar、类的方式
  4. PAT1061 判断题 (15 分)
  5. Object family 在Object search中的default逻辑
  6. 关于Jquery EasyUI中的DataGrid服务器端分页随记
  7. python的字符串删除操作 有点简单
  8. excel乘法公式怎么输入_python吊打Excel?那是你不会用!
  9. Oracle多行记录合并/连接/聚合字符串的几种方法
  10. .NET性能优化方面的总结(转)
  11. python中利用pygame模块输出文字
  12. Java 调用gc语句_Java GC 、引用
  13. QueryPerformanceFrequency
  14. ASEMI快恢复二极管型号大全之TO220和TO-3P封装
  15. oppor17刷鸿蒙系统,oppo a5刷机包下载
  16. mysql数据库解锁
  17. C语言随机数独教程,C语言数独游戏的求解方法
  18. 初学者必读VRay 2.0材质设置(2)——反射材质的表现
  19. js制作flash文件进度条
  20. python学习(二)

热门文章

  1. openwrt软路由实现ipv6上网配置
  2. 在线职教行业或将迎来下一个千亿市场
  3. 为什么电脑无限重启,难道是我的电脑装了无限宝石?
  4. yarn install报错及解决办法
  5. Chrome浏览器设置打开书签时在新标签页打开(保姆级图文)
  6. 智能客服机器人+在线客服,让你的服务不间断
  7. html表格自动分列,html页面中表单怎么用div分列布局
  8. YOLOX源码解析--全网最详细,建议收藏!
  9. 【MySQL】表操作和库操作
  10. 新疆库尔勒市杜鹃河上演人禽共泳和谐相处画卷