网络协议分析笔记
一、链路层协议分析
1、划分Vlan后,相同Vlan的主机之间的通信。
以太网V2的MAC帧格式
以太网802.1q帧的格式
要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。
IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用于标识数据帧所属的VLAN。
在思科模拟器中,当你查看以太网802.1q帧时,可以看到TCL字段,这是因为思科模拟器在显示帧时将TCL字段解释为802.1Q VLAN标签的一部分。在实际的网络数据传输中,TCL并不会被发送出去,因为它是VLAN trunk链路协商的一部分,不是802.1q帧中的一个字段。因此,在理解802.1q帧的内容和结构时,不需要考虑TCL字段。
这里的TCL字段的值代表的就是这个帧属于哪一个VLAN,图中的0x0002转换为10进制为2,代表这个帧属于VLAN 2。
直接通信与间接通信
当前封装点
直接通信:同一网络
间接通信:不通网络
(1)直接交付,比如PC0与PC2通信
用户告知主机目的主机的IP,主机用自己的子网掩码与目的IP进行与运算,对比运算后的结果是否与自己的网络号相同,若相同,则说明在同一网络,直接交付;若不同,则说明在不同网络,需要间接交付。
(2)间接交付,比如PC0与PC1通信
用目的主机的IP与封装点的子网掩码进行与运算,得到网络号,用这个网络号与封装点的网络号进行比较,不相同,不在同一个网络,间接交付。
间接交付:用默认网关的MAC进行封装,发给网关,网关收到之后查找转发表,若目的IP是直连网络的,那么直接交付,若不是直连,那就发给下一跳,下一跳路由器也是同样的处理过程,最后发往目的主机时一定是直接交付。
实验过程
(1)用PC0去pingPC2,查看数据帧在转发过程中变化的情况。
(2)数据帧进入第一个交换机(也就是Switch0)前,数据链路层使用的是以太网V2格式的数据帧,但数据帧进入交换机后,被交换机处理成了以太网802.1q格式的数据帧。
因为PC0所连接的端口f0/1被划分为了VLAN 2,所以若交换机要将从f0/1端口进来的数据转发到其他交换机或路由器的话,就要将这个数据帧进行封装(加上VLAN标识),用来区别它是那个VLAN的。
注意:当加上VLAN后FCS需要重新计算。
但需要注意的是,如果目的源主机与目的主机都 连接在同一个交换机上的话,那么交换机就不会对这个帧进行封装,在后面会讲到,划分了VLAN后,数据帧从经过的第一个交换机出来前要将数据帧进行封装(加上VALN标识),从最后一个交换机出来时,又要将这个数据帧解封装(将VLAN标识去掉),还原成一开始(从源出来时)的状态,然后再转发给目的主机。当源主机与目的主机都连接在同一个交换机上时,这个交换机既是第一个又是最后一个,所以不会将数据帧封装。也可以理解为,因为这个交换机知道发送数据的两台主机是属于哪个VLAN的,所以不需要加标签来区分。下面的这个实验可以证明这一结论:
(3)数据帧从Switch1出来时,数据帧格式又变回了刚开始时的以太网v2
从PC2发出的回应报文也是类似的,在出第一个交换机前加上VLAN标签,出最后一个交换机前去掉VLAN标签。
所以, 对于相互通信的两台主机来说,VLAN是透明的。从下图中可以看到,PC0发出的数据帧与PC2发出的数据帧是相同的,它们并不知道中间发生的数据帧封装的事。
补充:当交换机划分VLAN后,那么广播域也将会被划分开来。比如,在没有划分VLAN时,ARP地址解析的过程中,交换机找不到目的MAC地址,就会对除数据进入的那个端口之外的所有端口转发数据包;但是划分VLAN后,那么ARP的数据包就只会转发给与入端口相同VLAN的端口。下面这个实验可以证明:
因为PC2、3、4都不属于VLAN 2所以不会收到ARP广播包。
2、不同Vlan之间的通信
ARP的请求过程:
(1) 同一子网
主机A在准备构造链路层以太网帧头时,首先根据目的IP去查找ARP表,如果找到对应项,则直接得到目的MAC地址,如果没有查到才执行上面所说的ARP广播请求。这样做是为了最大限度地减少广播。
(2)不同子网
主机A首先比较目的IP地址与自己的IP地址是否在同一子网中,如果在同一子网,则向本网发送ARP广播(如果ARP表中有目的MAC的话就不用广播),获得目标IP所对应的MAC地址;如果不在同一子网,就通过ARP询问默认网关对应的MAC地址, 将数据转发给网关, 网关进行与主机A类似的ARP解析过程,将数据发送给主机B,或者转发给下一个网关继续进行路由,直到到达主机B。
路由器逻辑子接口
路由器包含的接口数量一般都比较少,有时为了拓展功能,会将某一个物理接口在逻辑上划分为多个子接口,这些逻辑子接口不能被单独地开启或关闭,当某一个子接口被开启或关闭时,所有的该接口的子接口也会随之被开启或关闭。在实际应用中,往往用这些子接口分别作为局域网中不同vlan的网关,这样就可以仅使用一个物理接口为局域网中不同的vlan提供路由了,这样做的好处是可以节约设备,降低组网成本。
封装点、封装与解封装的概念
什么是封装与解封装?
封装的概念就是,数据从应用层开始往下传,层层封装,并且在每一层有不同的名称:
经过传输层,加上TCP头组成数据段;经过网络层,加上IP头组成数据包;经过数据链路层;加上MAC头,加完后再加上一个FCS校验组成数据帧,就封装完成了,然后在物理层通过Bit来传输。
所以说数据包的时候知道有ip地址,说数据帧的时候知道有mac地址即可。传输过程不关心具体的数据是什么,应用程序也不关心数据是怎样被传输过去的,数据通过网络封装,再通过网线传输的过程对应用程序来说是透明的。
解封装的过程是计算机在接收到数据帧后,需要去掉为了传输而添加的附加信息,这称为解封装。
内容来源于:[封装与解封装 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/577918254#:~:text=经过传输层,加上TCP头组成数据段;经过网络层,加上IP头组成数据包;经过数据链路层;加上MAC头,加完后再加上一个FCS校验组成数据帧,就封装完成了,然后在物理层通过Bit来传输。 所以说数据包的时候知道有ip地址,说数据帧的时候知道有mac地址即可。 传输过程不关心具体的数据是什么,应用程序也不关心数据是怎样被传输过去的,数据通过网络封装,再通过网线传输的过程对应用程序来说是透明的。,解封装的过程是计算机在接收到数据帧后,需要去掉为了传输而添加的附加信息,这称为解封装。 发布于 2022-10-27 02%3A38)
实验过程
(1)使用PC0去pingPC3,观察两台处于不同VLAN主机之间通信时,数据帧的转发情况。
(2)由于PC0不知道PC3的MAC地址,所以使用ARP解析。
在PC0发出的包中可以看到,ARP报文中的目的IP是192.168.2.1,这是因为PC3(IP为192.168.3.5)与PC0不在同一个子网里面,也就是不在同一个局域网里,那么PC0想要找到PC3就得离开这个局域网,到外面去找。而网关就是网络的出口,所以这个包想要出去,当然就要从网关走了。
PC0通过ARP寻找网关的过程与相同VLAN时的类似。
(3)当PC0收到网关发来的ARP回应报文后,就向网关发送ICMP报文。
(4)当路由器收到ICMP报文后,查找自己的转发表
当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某⼀个端⼝的物理地址,这时路由器会把以太网数据帧的封装去掉。 路由器认为这个IP数据包是要通过自己进行转发,接着匹配路由表。 匹配到路由项后,它就将包发往下⼀条地址。
由于目的地址是路由器的直连网络,所以路由器直接将数据包转发给目的主机。又因为路由器不知道PC3的MAC,所以调用ARP解析。
如果目的地址不在直连网络上的话,那么路由器根据路由表将数据包转发给下一跳,下一个路由器也是重复和这个路由器一样的操作,直到找到PC3为止(或生存时间为0)。
因为ARP结束后,交换机又发送了很多数据,占用信道,所以这个ICMP包超时了,PC0又继续发下一个ICMP包。
(5)当第二个ICMP包到达路由器后,路由器就可以直接将包转发给交换机,然后转发给PC3了。
(6)PC3收到后,像PC0发送回应报文。
对于这个模型来书,VLAN 2和VLAN 3可以将它们理解为两个网络,路由器连接这这两个网络,只不过他们都连接在同一个端口而已。
路由器将g0/1端口划分为了若干个子接口,其中g0/1.2端口做为VLAN 2的网关,g0/1.3端口做为VLAN 3的网关。
对于PC0来说,它的网关是g0/1.2(192.168.2.1),对于PC3来说,它的网关是g0/1.3(192.168.3.1),但这两个网关的MAC、地址都是一样的。
ARP协议分析
在cmd终端查看IP与MAC的映射表
输入arp
查看arp命令的选项及其用法。
输入arp -a
查看ARP表
使用arp -d *
可删除所有arp表。。。。。。(我的删除不了,但可以删除指定的项)
使用Wireshark捕获ARP协议数据包
在cmd终端使用ipconfig命令可以查看我的IP和网关的IP
我的IP是192.168.224,网关的IP是192.168.101
删除arp表后,使用Wireshark捕获,并过滤出arp协议的数据包
ARP协议报文格式
硬件类型:表示硬件地址的类型(其中,值为1表示以太网地址,其他还可能表示令牌环地址)。
协议类型:表示要映射的协议地址类型(其中,0x0800表示IP地址,其他还可能是ICMP/IGMP)。
硬件地址长度:指出该报文中硬件地址的长度(ARP报文中,它的值为6)。
协议地址长度:指出该报文中协议地址的长度(ARP报文中,它的值为4)。
op:操作字段,共有4种类型(1.ARP请求,2.ARP应答,3.RARP请求,4.RARP应答)。
发送者mac地址:发送方设备的硬件地址。
发送者ip地址:发送方设备的IP地址。
目的mac地址:接收方设备的硬件地址。
目的Iip地址:接收方设备的IP地址。
可以看出,上面的这个ARP报文是由我(192.168.171.224)发送给我的网关(192.168.171.101)的请求报文(因为op字段为1)。
二、PPP协议
PPP协议是用户计算机和ISP进行通信时所使用的链路层协议。
1.PPP协议应满足的需求:
- 封装成帧
- 透明性
- 差错检测
- 简单
- 多种网络层协议
- 多种类型链路
- 检测连接状态
- 最大传送单元
- 网络层地址协商
- 数据压缩协商
2、PPP协议的组成
(1) 一个将 IP 数据报封装到串行链路的方法。
(2) 链路控制协议 LCP (Link Control Protocol)。
(3) 网络控制协议 NCP (Network Control Protocol)。
2.PPP协议的帧格式
标志字段表示一个帧的开始或结束,是PPP帧的定界符,连续两个帧之间只需要一个标志字段,两个连续的标志字段表示空帧。
F:标志 A:地址 C:控制 FCS:帧检验序列
3、透明传输问题
(1)字节填充(异步传输)
PPP使用异步传输时,把转义字符定义为0x7D(即01111101)。
在信息字段中:
a.把0x7E变为0x7D,0x5E
b.把0x7D变为0x7D,0x5D
c.把ASCII码的控制字符(即数值小于0x20的字符)前加入0x7D,同时改变该字符的编码。如0x03变为0x7D,0x23。
记住:7E变7D5E 7D变7D5D 03变7D23
(2)零比特填充(同步传输)
因为F字段(标志字段)的值为01111110,有6个连续的1。所以,
在发送端:当信息字段中出现5个连续的1时,立即填入一个0;
在接收端:信息字段中扫面到连续的5个1时,就把其后的一个0删除。
4、PPP协议的工作状态
实验过程
Wireshark捕获结果分析
三、IP协议
1、IP分组的转发过程
2、路由表的建立(RIP、OSPF)
关闭路由器端口,使网络发生故障,查看故障前后路由表的变化。
四、RIP协议
RIP 是最广泛使用的动态选路协议,协议采用距离向量算法。
距离向量算法即相邻的路由器之间互相交换整个路由表,并进行矢量的叠加,最终获得 整个网络的路由信息。
RIP 以跳数(hop count)作为路由器之间距离的度量,所有直接连接接口的跳数为1, 每增加一个路由器,可达到的网络跳数加1。
为限制路由收敛的时间,RIP 规定跳数取值为 0~15,大于等于16的跳数表示目的不可达。度量最大值为15限制了网络的大小,使得 RIP 只适用小型网络。
RIP 有两个版本,RIP v1(定义在RFC 1058)和 RIP v2(定义在RFC 2453)。
RIP v2相 比RIP v1,增加了对变长子网的支持。
RIP 报文包含在 UDP 数据报中,RIP 常用 的 UDP 端口号是520。
RIPv1
报文格式
RIP v1报文格式如 图6-3所示,其中各个字段的含义如下。
(1)命令字段:可以取值1~6,用以表示报文的类型,有以下两个取值。
-
“1”:为 RIP 请求,表示要求其他系统发送其全部或部分路由表。
-
“2”:为RIP 应答,包含发送者全部或部分路由表。
(2)版本字段:通常为1,而RIP v2 中将此字段设置为2。
(3)地址系列:对于IP 地址系列取值为2;对于特殊的请求,则地址系列的值为“0”。
(4)IP地址:目的地的32位 IP 地址。
(5)度量:去往目的地的跳数,16表示无限远,即不可达。
从图6-3中可以看到,每一条 RIP 路由信息采用20字节格式。这样, 一个RIP 报文可以通告最多25条路由信息。上限25是用来保证 RIP 报文的总长度为20×25+4=504,小于512字节。这是因为RIP 由 UDP 传输,而许多UDP 应用程序在设计中都采用小于512 字节的数据部分。
如果路由表中数据较多,由于每个报文最多携带25条路由,因此为了发送整个路由表, 经常需要多个报文。
RIP运行过程
(1)初始化:在启动一个路由守护程序时,它先判断启动了哪些接口,并在每个接口上发送一个RIP 请求报文,要求其他路由器发送完整路由表。若网络支持广播的话,这种请求是以广播形式发送的。请求报文的命令字段为1,地址系列字段设置为0,度量字段设置为16。
(2)在网络上运行RIP的路由器,如果接收到这个特殊请求,就将完整的路由表发送给请求者。如果是其他请求,则对有连接到指明地址的路由将度量设置成自己的值,否则将度 量置为16,表示没有到达目的的路由,然后发回响应。
(3)接收到响应的路由器,可能会更新路由表(含增、删、改路由表项)。
定期选路更新:每过30秒,所有或部分路由器将其完整路由表发送给相邻路由器。
触发更新:而当有一条路由的度量发生变化时,则不需要发送完整路由表,而只发送那些发生变化的表项。(触发更新是在路由变化时就发送,还是30秒一次?)
(4)RIP为路由表中的每条路由都建立一个定时器,如果发现一条路由在180秒内未更新,就将该路由的度量设置成无穷大(16),并标注为删除。再过60秒,将从本地路由表中删除该路由。
RIPv2
RIPv2利 用RIP报文中一些标注为“必须为0”的字段,传递一些额外的信息。加入了路由域、路由标记等信息,还可以支持简单认证信息。最主要的是增加子网掩码应用于相应的IP地址上,用下一站或 IP 地址指明发往目的IP 地址的报文该发往何处。
不带认证信息的 RIP v2 报文格式如图6-4所示。下面简单说明不同于 RIP v1 的各个域。
(1)选路域:是选路守护程序的标识符,可以是选路守护程序的进程号。该域允许管理员在单个路由器上运行多个 RIP 实例,每个实例在一个选路域内运行。、
(2)网络的路由标记:是为了支持外部网关协议而存在的,通常是一个EGP (外部网关协议)和 BGP (边界网关协议)的自治系统号。
(3)网络子网掩码:应用于相应的网络IP 地址上。
(4)网络下一跳IP地址:指明发往目的 IP 地址的报文该发往何处。该字段为0,意味着发往目的地址的报文应该发给发送 RIP 报文的系统。
RIP v2提供了一种简单的认证或鉴别机制。采用认证的 RIP 报文中,20字节的路由记录里指定地址系列取值为0xFFFF; 路由标记取值为2,表明认证类型为明文认证;其余16字节包含一个明文口令。如果口令的长度不足16字节,用0填充。 RFC 2082 描述了采用MD5 密文认证的RIP v2。
五、OSPF协议
1.协议OSPF的特点
OSPF的名字叫开放最短路径优先。使用了最短路径算法SPF。
OSPF工作于IP层之上,作为IP数据包传送,IP协议号为89。以组播地址224.0.0.5发送协议包。
OSPF的优点:OSPF的链路状态能够较快的进行更新,更新过程收敛得快。
OSPF的特点:
- 使用洪泛法向本自治系统中所有路由器发送信息。
- 发送的信息就是与本路由器相邻的所有链路状态。
- 当链路状态变化(触发更新),或每隔一段时间(30分钟),路由器用洪泛法向所有相邻路由器发送链路状态信息。
洪泛法:R通过所有的输出端口向所有相邻的R发送信息,每一个相邻的R又将这条信息发往其所有相邻的R(但不再发给刚刚发来的路由器)。
链路状态:就是说明本路由器和哪些路由器相邻,以及该链路的度量。
度量:又叫做代价,表示费用、距离、时延、带宽等等。
链路状态数据库:这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。所以OSFP中的每个路由器都知道全网的拓扑结构,可根据数据库构造出自己的路由表。
2.OSPF的五种分组类型
(1)问候(hello)分组:用于定位邻居路由器,发现和维持邻站的可达性。
(2)数据库描述分组(DD):邻站发送自己链路状态中所有链路的摘要信息。
(3)链路状态请求分组(LSR):向对方请求发送某些链路状态的详细信息。
(4)链路状态更新分组(LSU):用洪泛法对全网更新链路状态。
(5)链路状态确认分组(LSAck):对链路更新分组的确认。
好文:
3、OSPF的5种报文格式
OSPF这五种报文具有相同的报文头格式,长度为24字节。
- Version(版本号):当前广泛实现的版本是OSPF v2,值为2。
- Type(类型): 1字节 ,表示OSPF报文的类型,有下面几种类型:Hello报文;DD报文;LSR报文;LSU报文;LSAck报文。
- Packet length(报文长度) :2字节,OSPF报文的总长度,包括报文头在内,单位为字节。
- Router ID(路由器ID):4字节,发送该报文的路由器标识。
- Area ID(区域ID): 4字节 ,发送该报文的所属区域。
- Checksum 校验和):2字节,校验和,包含除了认证字段的整个报文的校验和。
- AuType(鉴别类型):2字节 ,验证类型值有如下几种表示, 0表示不验证;1表示简单(明文)认证;3表示MD5认证。
- Authentication(鉴别):8字节 ,鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。
(1)Hello报文
Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。
- Network Mas:32bit,发送Hello报文接口所在的子网掩码;
- Hello interval:16bit,发送hello报文的时间间隔,单位为秒,默认是10秒;
- Options:8bit,可选项,E:允许泛洪 AS-External-LSAs;MC:转发IP组播报文;N/P:处理Type-7 LSAs;DC:处理按需链路;
- Rtr Pri:8bit,DR优先级,默认为1,如果为0不参与DR/BDR选举;
- Router Dead Interval:32bit,失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;
- Designated Router:32bit,本网段DR的接口地址;如果设置为0.0.0.0,表示未选举DR路由器。
- Backup Designated Router:32bit,本网段BDR的接口地址;如果设置为0.0.0.0,表示未选举BDR。
- Neighbor:32bit,邻居列表,以router ID标识;
Hello报文被周期性(默认为10秒)地发向邻居路由器接口发送,如果在设定时间(默认为40秒,通常至少是Hello包发送时间间接4倍)内没有收到对方OSPF路由器发送来的Hello报文,则本地路由器会认为该对方路由器无效。
如果路由器发现所接收的合法Hello报文的邻居列表中有自己的Router ID,则认为已经和邻居建立了双向连接,表示邻居关系已经建立。
验证一个接收到的Hello报文是否合法包括:
1、如果接收端口的网络类型是广播型,点到多点或者NBMA,所接收的Hello报文中Network Mask字段必须和接收端口的网络掩码一致,如果接收端口的网络类型为点到点类型或者是虚连接,则不检查Network Mask字段;
2、所接收的Hello报文中Hello Interval字段必须和接收端口的配置一致;
3、所接收的Hello报文中Router Dead Interval字段必须和接收端口的配置一致;
4、所接收的Hello报文中Options字段中的E-bit(表示是否接收外部路由信息)必须和相关区域的配置一致。