这几天在公司做项目要用到WinPcap,但在实现的过程中,需要分析捕获的数据包,恰好用到了大学时学习的计算机网络课程。现初步总结了几个网络协议及其格式:
一、MAC协议
在局域网中,硬件地址又称为物理地址或MAC地址(因为这种地址用在MAC帧中)。
大家知道,在所有计算机系统的设计中,标识系统(identification system)都是一个核心问题。在标识系统中,地址就是为识别某个系统的一个非常重要的标识符。在讨论地址问题时,很多人常常引用著名文献[SHOC78]给出的如下定义:
“名字指出我们所要寻找的那个资源,地址指出那个资源在何处,路由告诉我们如何到达该处。”
这个非形式的定义固然很简单,但有时不够准确。严格地讲,名字应当与系统的所在地无关。这就像我们每一个人的名字一样,不随我们所处的地点而改变。但是802标准为局域网规定了一种48bit的全球地址(一般都简称为“地址”),是指局域网上的每一台计算机所插入的网卡上的地址。因此:
(1) 假定连接在局域网的一台计算机的网卡坏了而我们更换了一个新的网卡,那么这台计算机的局域网的“地址”也就改变了,即使这台计算机的地形位置一点也没有变化。所接入的局城网也没有任何改变。
(2) 假定我们将位于南京的某局城网上的一台计算机转移到北京。并连接在北京的某局域网上。虽然这台计算机的地理位置改变了,但只要这台计算机中的网卡不变,那么这台计算机在北京的局域网中的“地址”仍然和它在南京的局域网中的“地址”一样。
因此可见,802标准所说的“地址”严格地讲应当是每一个站的“名字”或标识符。但鉴于在家都早已习惯了将这种48bit的“名字”称为“地址”,所以本书也采用这种习惯用法。
尽管这种说法并不太严格,请读者一定要弄清这个概念。
MAC地址也叫物理地址、硬件地址或链路地址,由网络设备制造商生产时写在硬件内部。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位的。MAC地址的长度为48位(6个字节),通常表示为12个16进制数,每2个16进制数之间用冒号隔开,如:08:00:20:0A:8C:6D就是一个MAC地址,其中前6位16进制数08:00:20代表网络硬件制造商的编号,它由IEEE(电气与电子工程师协会)分配,而后3位16进制数0A:8C:6D代表该制造商所制造的某个网络产品(如网卡)的系列号。只要你不去更改自己的MAC地址,那么你的MAC地址在世界是惟一的。
以太网的MAC帧格式有两种标准,一种是DIX Ethernet V2标准,另一种是IEEE的802.3标准,图1 画出了这两种不同的MAC帧格式。
图1 两种不同的MAC帧格式
二、IP协议
IP协议(Internet Protocol)是网络层协议,用在因特网上,TCP,UDP,ICMP,IGMP数据都是按照IP数据格式发送得。IP协议提供的是不可靠无连接得服务。IP数据包由一个头部和一个正文部分构成。正文主要是传输的数据,IP头部由20字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到右,IP协议数据包格式如图2。
图2 IP协议数据包格式
-
版本
- IP报文首部的第一个字段是4位版本字段。对IPv4来说,这个字段的值是4。
-
首部长度(IHL)
- 第二个字段是4位首部长度,说明首部有多少32位字长。由于IPv4首部可能包含数目不定的选项,这个字段也用来确定数据的偏移量。这个字段的最小值是5(RFC 791),最大值是15。
-
DiffServ(DSCP)
- 最初被定义为服务类型字段,但被RFC 2474重定义为DiffServ。新的需要实时数据流的技术会应用这个字段,一个例子是VoIP。
-
总长
- 这个16位字段定义了报文总长,包含首部和数据,单位为字节。这个字段的最小值是20(20字节首部+0字节数据),最大值是65,535。所有