1、引言
前段时间编写了一个网络监听工具。
为了分析抓到的数据包,要熟悉各种网络协议。本人痛苦的发现网上很少有集中讲解这方面的文章,而图书大部分讲解得不够仔细,小部分专门研究网络协议的图书又太大,不适合我们的要求。故把常用的以太网协议写出来和大家分享。
2、以太网的特点
以太网采用的是CSMA/CD技术,即带碰撞检测的载波侦听多址访问。在CSMA/CD技术中,如果网络上没有数据,则任何时候都可以将数据传送出去。如果网络被使用,那就要等到网络空闲时再传送。在以太网中传输的数据是无选择的发送到所有网卡的。这就为网络监听创造了条件。
3、以太网数据包
在以太网中,数据是以被称为帧的数据结构体为单位进行交换的。这种数据包结构如下图所示:
在以太网桢的报头中包含接收端及发送端的地址,桢的报文部分包含的是数据种类。最后放置的是错去校验和修正码。通常我们抓到的数据包已经去掉了同步码和桢分界符。下面先给出报头部分的定义:
以太网桢报头格式
接收端MAC地址(48位) |
发送端MAC地址(48位) |
类型字段(16位) |
注意:这里提到的是位,一位就是二进制数据中的一位。通常,一个字节是由8位组成的。
类型字段意义(参考RFC1700)
类型(十六进制) |
协议 |
0800 |
IP |
0806 |
ARP |
8035 |
RARP |
809B |
Appletalk |
8137-8138 |
Novell |
814C |
SNMP |
4、IP数据报的构成
当以太网数据桢的类型字段为十六进制0800时,表示以太桢报文部分是一个IP数据报。其格式如下所示,其中报头部分存储了版本、头长度、生存时间、接收和发送端IP地址等重要信息。
IP数据报报头定义
字段 |
位数 |
说明 |
版本 |
4 |
表示IP的版本。现目前的版本号为4 |
报头长度 |
4 |
表示报头的长以32位为一个单位 |
服务类型 |
8 |
优先级和可靠性等服务品质要求的数值 |
数据报长度 |
16 |
IP数据报的全部长度,以8位(字节)为单位 |
标识 |
16 |
识别IP数据报的编号 |
标志 |
3 |
标示有无碎块 |
数据块偏移 |
13 |
产生碎块时应该比达到的数据块早到的数据块大小 |
生存时间 |
8 |
存放控制IP数据报寿命长短的数值 |
协议 |
8 |
标示上层协议 |
报头校验码 |
16 |
检查报头错误用的校验码 |
发送端地址 |
32 |
发送端的IP地址 |
目的地地址 |
32 |
接收端的IP地址 |
5、TCP协议
传输控制协议(TCP)是在传输层使用的协议。当IP数据报的协议字段的值为6时,表示本IP数据报的报文部分是TCP数据报。
TCP数据报头定义
字短名 |
长度(位) |
意 义 |
发送端端口 |
16 |
发送端及客户夫端程序的端口号 |
接收端端口 |
16 |
接收端及服务器端程序得端口号 |
顺序号 |
32 |
标示消息段的数据位于全体数据块的眸字节的数值 |
确认号 |
32 |
表示接受端对于发送端接收到的数据块数值 |
数据偏移 |
4 |
报头长,以32位为一个单位 |
预留 |
6 |
扩展用(预留) |
控制位 |
6 |
表示某字段意义的位 |
窗口 |
16 |
窗口的大小(一次可以发送的数据量) |
校验码 |
16 |
错误检查用 |
紧急数据指针 |
16 |
插入信号等紧急数据的结束位置 |
选项和填充 |
32 |
选相等 |
6、UDP数据报
当IP数据报的协议字段的值等于17,表示IP数据报的报文部分携带的是UDP数据报。下面是UDP数据报头的构造。
UDP数据报
发送端端口(16位) |
接收端端口(16位) |
数据报长度(16位) |
校验码(16位) |
数据 |
7、关于程序
为了更好的理解本文提到的协议,及它们之间的一些简单关系,作者开发了一个简单的网络监控软件,读者可以参照程序的运行理解本文。
阅读(1339) | 评论(0) | 转发(0) |