网络协议分析笔记

一、链路层协议分析

1、划分Vlan后,相同Vlan的主机之间的通信。

以太网V2的MAC帧格式

image-20230920182054615

以太网802.1q帧的格式

要使交换机能够分辨不同VLAN的报文,需要在报文中添加标识VLAN信息的字段。

IEEE 802.1Q协议规定,在以太网数据帧的目的MAC地址和源MAC地址字段之后、协议类型字段之前加入4个字节的VLAN标签(又称VLAN Tag,简称Tag),用于标识数据帧所属的VLAN。

image-20230920185153794

在思科模拟器中,当你查看以太网802.1q帧时,可以看到TCL字段,这是因为思科模拟器在显示帧时将TCL字段解释为802.1Q VLAN标签的一部分。在实际的网络数据传输中,TCL并不会被发送出去,因为它是VLAN trunk链路协商的一部分,不是802.1q帧中的一个字段。因此,在理解802.1q帧的内容和结构时,不需要考虑TCL字段。

这里的TCL字段的值代表的就是这个帧属于哪一个VLAN,图中的0x0002转换为10进制为2,代表这个帧属于VLAN 2。

image-20230921203253201

直接通信与间接通信

当前封装点

直接通信:同一网络

间接通信:不通网络

(1)直接交付,比如PC0与PC2通信

用户告知主机目的主机的IP,主机用自己的子网掩码与目的IP进行与运算,对比运算后的结果是否与自己的网络号相同,若相同,则说明在同一网络,直接交付;若不同,则说明在不同网络,需要间接交付。

image-20231008145433664

(2)间接交付,比如PC0与PC1通信

用目的主机的IP与封装点的子网掩码进行与运算,得到网络号,用这个网络号与封装点的网络号进行比较,不相同,不在同一个网络,间接交付。

间接交付:用默认网关的MAC进行封装,发给网关,网关收到之后查找转发表,若目的IP是直连网络的,那么直接交付,若不是直连,那就发给下一跳,下一跳路由器也是同样的处理过程,最后发往目的主机时一定是直接交付。

image-20231008145645013

实验过程

(1)用PC0去pingPC2,查看数据帧在转发过程中变化的情况。

image-20230921211658389

(2)数据帧进入第一个交换机(也就是Switch0)前,数据链路层使用的是以太网V2格式的数据帧,但数据帧进入交换机后,被交换机处理成了以太网802.1q格式的数据帧。

因为PC0所连接的端口f0/1被划分为了VLAN 2,所以若交换机要将从f0/1端口进来的数据转发到其他交换机或路由器的话,就要将这个数据帧进行封装(加上VLAN标识),用来区别它是那个VLAN的。

注意:当加上VLAN后FCS需要重新计算。

image-20230921212219517

但需要注意的是,如果目的源主机与目的主机都 连接在同一个交换机上的话,那么交换机就不会对这个帧进行封装,在后面会讲到,划分了VLAN后,数据帧从经过的第一个交换机出来前要将数据帧进行封装(加上VALN标识),从最后一个交换机出来时,又要将这个数据帧解封装(将VLAN标识去掉),还原成一开始(从源出来时)的状态,然后再转发给目的主机。当源主机与目的主机都连接在同一个交换机上时,这个交换机既是第一个又是最后一个,所以不会将数据帧封装。也可以理解为,因为这个交换机知道发送数据的两台主机是属于哪个VLAN的,所以不需要加标签来区分。下面的这个实验可以证明这一结论:

image-20230921210632320

(3)数据帧从Switch1出来时,数据帧格式又变回了刚开始时的以太网v2

image-20230921212745376

从PC2发出的回应报文也是类似的,在出第一个交换机前加上VLAN标签,出最后一个交换机前去掉VLAN标签。

所以, 对于相互通信的两台主机来说,VLAN是透明的。从下图中可以看到,PC0发出的数据帧与PC2发出的数据帧是相同的,它们并不知道中间发生的数据帧封装的事。

image-20230921213732699

补充:当交换机划分VLAN后,那么广播域也将会被划分开来。比如,在没有划分VLAN时,ARP地址解析的过程中,交换机找不到目的MAC地址,就会对除数据进入的那个端口之外的所有端口转发数据包;但是划分VLAN后,那么ARP的数据包就只会转发给与入端口相同VLAN的端口。下面这个实验可以证明:

image-20230921221506165

因为PC2、3、4都不属于VLAN 2所以不会收到ARP广播包。

2、不同Vlan之间的通信

ARP的请求过程:

(1) 同一子网

img
主机A在准备构造链路层以太网帧头时,首先根据目的IP去查找ARP表,如果找到对应项,则直接得到目的MAC地址,如果没有查到才执行上面所说的ARP广播请求。这样做是为了最大限度地减少广播。

(2)不同子网

img
主机A首先比较目的IP地址与自己的IP地址是否在同一子网中,如果在同一子网,则向本网发送ARP广播(如果ARP表中有目的MAC的话就不用广播),获得目标IP所对应的MAC地址;如果不在同一子网,就通过ARP询问默认网关对应的MAC地址, 将数据转发给网关, 网关进行与主机A类似的ARP解析过程,将数据发送给主机B,或者转发给下一个网关继续进行路由,直到到达主机B。

路由器逻辑子接口

路由器包含的接口数量一般都比较少,有时为了拓展功能,会将某一个物理接口在逻辑上划分为多个子接口,这些逻辑子接口不能被单独地开启或关闭,当某一个子接口被开启或关闭时,所有的该接口的子接口也会随之被开启或关闭。在实际应用中,往往用这些子接口分别作为局域网中不同vlan的网关,这样就可以仅使用一个物理接口为局域网中不同的vlan提供路由了,这样做的好处是可以节约设备,降低组网成本。

封装点、封装与解封装的概念

什么是封装与解封装?

封装的概念就是,数据从应用层开始往下传,层层封装,并且在每一层有不同的名称:

经过传输层,加上TCP头组成数据段;经过网络层,加上IP头组成数据包;经过数据链路层;加上MAC头,加完后再加上一个FCS校验组成数据帧,就封装完成了,然后在物理层通过Bit来传输。

所以说数据包的时候知道有ip地址,说数据帧的时候知道有mac地址即可。传输过程不关心具体的数据是什么,应用程序也不关心数据是怎样被传输过去的,数据通过网络封装,再通过网线传输的过程对应用程序来说是透明的。

img

解封装的过程是计算机在接收到数据帧后,需要去掉为了传输而添加的附加信息,这称为解封装。

img

内容来源于:[封装与解封装 - 知乎 (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主机之间通信时,数据帧的转发情况。

image-20230922154818642

(2)由于PC0不知道PC3的MAC地址,所以使用ARP解析。

在PC0发出的包中可以看到,ARP报文中的目的IP是192.168.2.1,这是因为PC3(IP为192.168.3.5)与PC0不在同一个子网里面,也就是不在同一个局域网里,那么PC0想要找到PC3就得离开这个局域网,到外面去找。而网关就是网络的出口,所以这个包想要出去,当然就要从网关走了。

image-20230922165430137

PC0通过ARP寻找网关的过程与相同VLAN时的类似。

image-20230922171527149

image-20230922171533855

image-20230922171553209

(3)当PC0收到网关发来的ARP回应报文后,就向网关发送ICMP报文。

image-20230922173139728

image-20230922173146989

image-20230922173151546

(4)当路由器收到ICMP报文后,查找自己的转发表

当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某⼀个端⼝的物理地址,这时路由器会把以太网数据帧的封装去掉。 路由器认为这个IP数据包是要通过自己进行转发,接着匹配路由表。 匹配到路由项后,它就将包发往下⼀条地址。

由于目的地址是路由器的直连网络,所以路由器直接将数据包转发给目的主机。又因为路由器不知道PC3的MAC,所以调用ARP解析。

image-20230922183140183

如果目的地址不在直连网络上的话,那么路由器根据路由表将数据包转发给下一跳,下一个路由器也是重复和这个路由器一样的操作,直到找到PC3为止(或生存时间为0)。

因为ARP结束后,交换机又发送了很多数据,占用信道,所以这个ICMP包超时了,PC0又继续发下一个ICMP包。

image-20230922183446590

image-20230922183624815

(5)当第二个ICMP包到达路由器后,路由器就可以直接将包转发给交换机,然后转发给PC3了。

image-20230922185335836

image-20230922185343095

image-20230922185349978

(6)PC3收到后,像PC0发送回应报文。

image-20230922185356143

对于这个模型来书,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、地址都是一样的。

image-20230922190236862

ARP协议分析

在cmd终端查看IP与MAC的映射表

输入arp查看arp命令的选项及其用法。

image-20231009081752651

输入arp -a查看ARP表

image-20231009081946675

使用arp -d *可删除所有arp表。。。。。。(我的删除不了,但可以删除指定的项)

使用Wireshark捕获ARP协议数据包

在cmd终端使用ipconfig命令可以查看我的IP和网关的IP

我的IP是192.168.224,网关的IP是192.168.101

image-20231009083157655

删除arp表后,使用Wireshark捕获,并过滤出arp协议的数据包

image-20231009083933194

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地址。

image-20231009084651214

image-20231009085341384

可以看出,上面的这个ARP报文是由我(192.168.171.224)发送给我的网关(192.168.171.101)的请求报文(因为op字段为1)。

二、PPP协议

PPP协议是用户计算机和ISP进行通信时所使用的链路层协议。

image-20231008210858886

1.PPP协议应满足的需求:

  1. 封装成帧
  2. 透明性
  3. 差错检测
  4. 简单
  5. 多种网络层协议
  6. 多种类型链路
  7. 检测连接状态
  8. 最大传送单元
  9. 网络层地址协商
  10. 数据压缩协商

2、PPP协议的组成

(1) 一个将 IP 数据报封装到串行链路的方法。
(2) 链路控制协议 LCP (Link Control Protocol)。
(3) 网络控制协议 NCP (Network Control Protocol)。

2.PPP协议的帧格式

标志字段表示一个帧的开始或结束,是PPP帧的定界符,连续两个帧之间只需要一个标志字段,两个连续的标志字段表示空帧

F:标志 A:地址 C:控制 FCS:帧检验序列

image-20231008211416529

3、透明传输问题

(1)字节填充(异步传输

PPP使用异步传输时,把转义字符定义为0x7D(即01111101)。

在信息字段中:

a.把0x7E变为0x7D0x5E

b.把0x7D变为0x7D0x5D

c.把ASCII码的控制字符(即数值小于0x20的字符)前加入0x7D,同时改变该字符的编码。如0x03变为0x7D,0x23

image-20231008211927900

记住:7E7D5E 7D7D5D 037D23

(2)零比特填充(同步传输

因为F字段(标志字段)的值为01111110,有6个连续的1。所以,

发送端:当信息字段中出现5个连续的1时立即填入一个0

接收端:信息字段中扫面到连续的5个1时,就把其后的一个0删除

image-20231008212516387

4、PPP协议的工作状态

image-20231008213047591

实验过程

Wireshark捕获结果分析

image-20231010214020925

三、IP协议

1、IP分组的转发过程

image-20231107214407844

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所示,其中各个字段的含义如下。

image-20231107155742481

(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 的各个域。

image-20231107155930429

(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的特点:

  1. 使用洪泛法向本自治系统中所有路由器发送信息
  2. 发送的信息就是与本路由器相邻的所有链路状态
  3. 当链路状态变化(触发更新),或每隔一段时间(30分钟),路由器用洪泛法向所有相邻路由器发送链路状态信息。

洪泛法:R通过所有的输出端口向所有相邻的R发送信息,每一个相邻的R又将这条信息发往其所有相邻的R(但不再发给刚刚发来的路由器)。

链路状态:就是说明本路由器和哪些路由器相邻,以及该链路的度量。

度量:又叫做代价,表示费用、距离、时延、带宽等等。

链路状态数据库:这个数据库实际上就是全网的拓扑结构图,它在全网范围内是一致的(这称为链路状态数据库的同步)。所以OSFP中的每个路由器都知道全网的拓扑结构,可根据数据库构造出自己的路由表。

2.OSPF的五种分组类型

(1)问候(hello)分组:用于定位邻居路由器,发现和维持邻站的可达性。

(2)数据库描述分组(DD):邻站发送自己链路状态中所有链路的摘要信息。

(3)链路状态请求分组(LSR):向对方请求发送某些链路状态的详细信息。

(4)链路状态更新分组(LSU):用洪泛法对全网更新链路状态。

(5)链路状态确认分组(LSAck):对链路更新分组的确认。

好文:

精!万字15图详解OSPF路由协议 (qq.com)

3、OSPF的5种报文格式

OSPF这五种报文具有相同的报文头格式,长度为24字节

image-20231115110748492

  1. Version(版本号):当前广泛实现的版本是OSPF v2,值为2。
  2. Type(类型): 1字节 ,表示OSPF报文的类型,有下面几种类型:Hello报文;DD报文;LSR报文;LSU报文;LSAck报文。
  3. Packet length(报文长度) :2字节,OSPF报文的总长度,包括报文头在内,单位为字节。
  4. Router ID(路由器ID):4字节,发送该报文的路由器标识。
  5. Area ID(区域ID): 4字节 ,发送该报文的所属区域。
  6. Checksum 校验和):2字节,校验和,包含除了认证字段的整个报文的校验和。
  7. AuType(鉴别类型):2字节 ,验证类型值有如下几种表示, 0表示不验证;1表示简单(明文)认证;3表示MD5认证。
  8. Authentication(鉴别):8字节 ,鉴定字段,其数值根据验证类型而定。当验证类型为0时未作定义;类型为1时此字段为密码信息;类型为2时此字段包括Key ID、MD5验证数据长度和序列号的信息。MD5验证数据添加在OSPF报文后面,不包含在Authenticaiton字段中。

(1)Hello报文

Hello报文是最常用的一种报文,其作用为建立和维护邻接关系,周期性的在使能了OSPF的接口上发送。报文内容包括一些定时器的数值、DR、BDR以及自己已知的邻居。

image-20231115113550136

  1. Network Mas:32bit,发送Hello报文接口所在的子网掩码
  2. Hello interval:16bit,发送hello报文的时间间隔,单位为秒,默认是10秒
  3. Options:8bit,可选项,E:允许泛洪 AS-External-LSAs;MC:转发IP组播报文;N/P:处理Type-7 LSAs;DC:处理按需链路;
  4. Rtr Pri:8bit,DR优先级,默认为1,如果为0不参与DR/BDR选举;
  5. Router Dead Interval:32bit,失效时间。如果在此时间内未收到邻居发来的Hello报文,则认为邻居失效;
  6. Designated Router:32bit,本网段DR的接口地址;如果设置为0.0.0.0,表示未选举DR路由器。
  7. Backup Designated Router:32bit,本网段BDR的接口地址;如果设置为0.0.0.0,表示未选举BDR。
  8. 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(表示是否接收外部路由信息)必须和相关区域的配置一致。

六、UDP协议及其应用

posted @ 2024-01-03 11:20  最爱喝开水  阅读(154)  评论(0编辑  收藏  举报