二层网络及三层网络的子网掩码设置原则_二三层网络配置-程序员宅基地

技术标签: 服务部署  

1 网络基本知识

推荐首先读下这篇文章,形象化的描述了各网络术语的含义:计算机主机网关的作用是什么?(转 )

1.1 OSI七层网络模型

在这里插入图片描述

  • 对于物理层而言打交道的基本都是电信号和光信号,例如网卡、光纤、双绞线等都被归到物理层考虑;
  • 对于链路层,数据在离散电/光信号的基础之上,被逻辑划分成一帧一帧(Frame)来管理,这一层是数据交换的主要层面,交换的依据主要是网卡MAC地址,以太网(定义了一种帧格式)、交换机、集线器都划归这一层;
  • 网络层是比链路层更高一级的逻辑层,在这一层主要工作的是路由器,路由器基于IP地址进行跨网链路的计算;
  • 传输层顾名思义是用来控制网络层传输的,因为网络层只是一个“尽力而为”的层,其传输不是完全可靠的,如果将超时重传等可靠性保障机制都交给程序员来做,估计大部分程序员都要疯了,幸好有了传输层提供了TCP和UDP两种机制给我们,才让我们可以高枕无忧的传输数据,而我们在代码里要做的只是打开一个传输层的套接字(即Socket)就可以了;
  • 至于表示层和会话层我们就不多做理解了,这两层基本只是摆设;
  • 应用层是最高层的协议,Web HTTP协议、远程登录SSH协议等都被划归这一层,确切来说这一层已经不属于基础网络了,基本都是软件自定义协议。

OSI模型的两个原则

①每一层都相对独立:信息只能在本层使用,不能跨层,这样保证在修改了某一层信息的时候,不用再更改其他层。

②每一层只能和相邻的层通信:当传输数据时,OSI从最上层遍历到最下层 7>4>3>2>1,接收数据时,则从最下层到最上层 1>2>3>4>7。

理解了网络各层的概念后,我们再回过头来看,在这七层中网络层、链路层、物理层属于低三层,其余属于高四层,从字面上可以看出传输层以下才是真正通过网络传输数据的层面。对于物理层,主要定义的是各种传输介质的信号传输方式,比如时钟频率、电平高低、信道编码等,这一层只是机械的传输,不涉及数据包选路逻辑,链路层(L2层)和网络层(L3层)才是我们要理解的地方。

1.2 传输媒介

要传输电信号,就必须要有传输媒介,常见的传输媒介有:

①同轴电缆

直径超过1cm,里外共有四层,从外到内分别是:外部绝缘层、网状导体、内部绝缘层、数据线。我记得小时候家里电视的闭路线就是这种,现在已经基本被淘汰 。

②双绞线

目前使用最广泛的线缆,就是平时我们看到的网线,通过RJ45接口连接在设备上,RJ45接口分为一公一母,网线头的这一端称为公头,网卡的接口处就是母头。

双绞线里面有4对线两两绞在一起,一共8根线,目前我们只使用到里面的2对线,一对用于接收数据,一对用于发送数据。

③光纤

光纤是由石英或塑料制成的纤维,通过光传输信号:电信号通过光发射机转为光信号,光信号沿着光纤传输到目的地,光接收机再将光信号转换为电信号。

光纤分为单模光纤和多模光纤。单模光纤使用的是激光,波长单一。多模光纤使用的是白光,包含多种波长。在传输距离和效率上面,单模光纤的性能更好。

光在光导纤维中传输的损耗比电在电线中传输的损耗更低,但是目前一般还是使用双绞线,因为使用光纤,所有接口必须换成光卡口,同样长度的光纤也比双绞线更贵。

④集线器

集线器用于连接多台设备,如多台电脑、打印机、路由器等;

集线器与交换机的区别

相同点:

都是用于连接多个设备,都可以转发数据。

不同点:

a.端口的数量不同,集线器端口较少,常见的有4口,交换机端口较多,常见24口、48口。

b.转发数据方式不同,集线器采用的是广播的方式,他会将信息转发给除了发送端口以外的所有端口,所有相连的设备都能收到信息,所以不利于信息的保密。交换机则是根据设备的 MAC 地址进行转发数据,只与发送源和接受源发生关系,从而可以达到防止数据丢失和提高吞吐量的目的。

c.集线器属于osi第一层,交换机属于osi第二层。交换机的性能优于集线器,随着技术进步,集线器已经慢慢退出市场。

1.3 MAC 地址

OSI第二层的作用,使局域网中的机器能互相连接并建立通信,还能够侦测传输错误。要向局域网中的其他机器发送信息,就需要借助 MAC 地址,来指定发送信息的目的地。

MAC 地址其实就是网卡的地址,一台电脑有一个或多个网卡,但是每个网卡都只一个独一无二的 MAC 地址。

MAC地址用16进制表示,由6个字节编码组成,每个字节用冒号隔开,如 00:0c:29:10:5a:55.

一个字节(byte)是8个比特位(bit),一个比特位就是一个二进制的位,一个二进制的位只能取值0或1,因此一个比特位可以取 2^1=2 个值,8个比特位可以取 2^8=256 个值,那么一个字节可以取256个值,从 0 ~ 255 的整数。

MAC 地址是由 6 个字节编码组成,因此可以取 2^48 个值,这是一个很大的数,肯定能保证每个 MAC 地址都是唯一的,网卡制造商会购买 MAC 地址区块,因此不会有重复的 MAC 地址。

其中有一个特殊地址,每一个二进制位都是1,二进制的11111111转换为十六进制是 ff,因此这个地址是 ff:ff:ff:ff:ff:ff

这个地址被称为广播地址,广播地址可以代替任意一个网卡,因此发送到广播地址的信息就会发送到所在网络的所有网卡上。

1.4 以太网协议

为了使连接到网络上的机器能够相互交流,需要定义一种语言,也称之为协议,ISO模型的第二层使用的就是以太网协议,协议定义了信息的传输格式,术语称为帧或者数据帧。

一个以太网帧的格式如下:
在这里插入图片描述

  • DST 是 destination 的缩写,表示接收方;
  • SRC 是 source 的缩写,表示发送方;
  • 应用在发送信息的时候,osi从上到下穿越,第三层会告诉第二层第三层应用了什么协议,并封装在以太网帧中,在接收信息的时候,osi从下到上穿越,接收方在接收数据校验 MAC 目标地址后,如果是自己的地址,就可以将信息发送到第三层对应的协议;
  • CRC 是一个用于校验错误的数值,发送方和接收方都会使用某个公式计算被传输信息的一个 CRC 值,如果两个CRC一致,则说明发送帧和接收帧是一样的,验证发送过程中没有出错。如果不一致,则说明发送帧和接收帧不一样,说明发送过程中有出错,接收方可要求发送方重新发送。

1.5 交换机

交换机是外观上拥有多个RJ45接口的盒子,是一个能够互联多个机器的设备。

类似于OSI第一层中的集线器,但是比集线器强大很多,因为交换机可以隔离对话,它的内存中有一个 CAM 表。这个表将交换机中的每一个 RJ45 接口与一个 MAC 地址相关联,交换机就是依据这个表里的对应关系和帧里面包含的目标地址,将数据帧发送到正确的机器上。

CAM 表是以动态方式构建的,当交换机读取一个流经的帧的时候,都会去扩充 CAM 表里的内容或更新已有内容。

当 CAM 表在刚开始构建的时候,交换机如果找不到此帧中的目标 MAC 地址,那么它就会把这个帧发送给除了帧来源以外的所有机器,这样目标机器收到这个帧的时候,看到 MAC 地址是自己的就会接收这个帧,同时向发送帧的机器回复一个信息,这样 CAM 表就会被更新。具体执行过程见2.5节。

交换机带来的变革

之前总线拓扑上需要用到 CSMA/CD 协议去解决冲突,在交换机上这种冲突就不会存在了,交换机使用双绞线链接设备,双绞线中使用不同的线进行接收信息和发送信息,因此不会产生这种冲突。(集线器也能使用双绞线,但集线器是以半双工的模式工作)

如果有多台机器向同一台机器发送信息,则多条信息都会到达这台机器的接收线上,因为交换机拥有内存,当它接收到多个帧时,可以将其储存在内存中,当目标机器连接的双绞线传输对空闲的时候再转发该帧。

因此,在没有交换机之前,机器发送信息必须监听,确定网络是空闲的时候才能发送帧,而交换机出现后,可以确保不发生冲突,机器想发送帧的时候就能发送。

三种通信方式

在交换机上,网卡是以全双工的方式运作。在集线器上使用 CSMA/CD 协议通信,网卡是以半双工方式运作,还有一种方式叫单工。

单工:数据传输是单向的,一方固定为发送端,一方固定为接收端,帧只能沿一个方向传输,类似于汽车单行道。

半双工:数据传输是双向的,但是不能同时进行,无线对讲机就是一种半双工设备。

全双工:数据传输是双向的并且能够同时进行,类似于汽车双向车道。

总的来说,集线器无法配置,总是以总线拓扑半双工的方式运作,需要配合 CSMA/CD 协议才能很好的工作,如果把集线器与交换机相连,那么交换机连接集线器所在的端口将以半双工的方式来运作,其他端口则维持全双工。

1.7 单播、组播、广播

单播:网络节点之间的通信就好像是人们之间的对话一样。

假设一个人对另外一个人说话。那么用网络技术的术语来描写叙述就是“单播”。此时信息的接收和传递仅仅在两个节点之间进行。单播在网络中得到了广泛的应用。网络上绝大部分的数据都是以单播的形式传输的,仅仅是一般网络用户不知道而已。

比如,你在收发电子邮件、浏览网页时,必须与邮件server、Webserver建立连接,此时使用的就是单播传输数据方式。可是通常使用“点对点通信”(Point to Point)取代“单播”,由于“单播”一般与“组播”和“广播”相对应使用。

组播:“多播”也能够称为“组播”。在网络技术的应用并非非常多,网上视频会议、网上视频点播特别适合採用多播方式。

由于假设採用单播方式,逐个节点传输,有多少个目标节点,就会有多少次传送过程,这样的方式显然效率极低。是不可取的;假设采用不区分目标、所有发送的广播方式。尽管一次能够传送完数据。可是显然达不到区分特定数据接收对象的目的。采用多播方式,既能够实现一次传送所有目标节点的数据,也能够达到仅仅对特定对象传送数据的目的。

IP网络的多播一般通过多播IP地址来实现。多播IP地址就是D类IP地址。即224.0.0.0至239.255.255.255之间的IP地址。Windows 2000中的DHCP管理器支持多播IP地址的自己主动分配。

多播的地址是特定的,D类地址用于多播。D类IP地址就是多播IP地址,即224.0.0.0至239.255.255.255之间的IP地址,并被划分为局部连接多播地址、预留多播地址和管理权限多播地址3类:

1、局部多播地址:在224.0.0.0~224.0.0.255之间,这是为路由协议和其他用途保留的地址,路由器并不转发属于此范围的IP包。

2、预留多播地址:在224.0.1.0~238.255.255.255之间,可用于全球范围(如Internet)或网络协议。

3、管理权限多播地址:在239.0.0.0~239.255.255.255之间,可供组织内部使用,类似于私有IP地址,不能用于Internet,可限制多播范围。

广播:“广播”可以理解为一个人通过广播喇叭对在场的全体说话,这样做的好处是通话效率高,信息一下子就可以传递到全体。

“广播”在网络中的应用较多,如客户机通过DHCP自动获得IP地址的过程就是通过广播来实现的。但是同单播和多播相比,广播几乎占用了子网内网络的所有带宽。拿开会打一个比方吧,在会场上只能有一个人发言,想象一下如果所有的人同时都用麦克风发言,那会场上就会乱成一锅粥。

在网络中不能长时间出现大量的广播包,否则就会出现所谓的“广播风暴”。广播风暴就是网络长时间被大量的广播数据包所占用,正常的点对点通信无法正常进行,外在表现为网络速度奇慢无比。出现广播风暴的原因有很多,一块有故障的网卡,就可能长时间向网络上发送广播包而导致广播风暴。

集线器由于其工作原理决定了不可能过滤广播风暴,一般的交换机也没有这一功能,不过现在有的网络交换机(如全向的QS系列交换机)也有过滤广播风暴功能了,路由器本身就有隔离广播风暴的作用。

广播风暴不能完全杜绝,但是只能在同一子网内传播,就好像喇叭的声音只能在同一会场内传播一样,因此在由几百台甚至上千台电脑构成的大中型局域网中,一般进行子网划分,就像将一个大厅用墙壁隔离成许多小厅一样,以达到隔离广播风暴的目的。

广播二层以太网帧地址为ffff-ffff-ffff,这是由12个十六进制组成的mac,48bit长度。当二层通信中需要发送广播的时候目的mac地址为全ffff-ffff-ffff。

广播报文是不可以穿越三层设备的,也就是说他只能在同一个广播域范围内生效的。广播三层以太网数据包时候可以是全网发送,这时候目的IP地址255.255.255.255,全网所有设备将收到来着这台主机的广播包。也可以是本网段的广播地址。通常使用的IP地址192.168.1.0 255.255.255.0 这个子网,它的广播地址是192.168.1.255 。本网段的三层广播地址通常是本网络的最后一个IP地址。

1.8 IP地址

OSI第三层是网络层,第二层的作用是让局域网中的机器能够通信,第三层则让网络之间的机器能够通信,使我们可以从一个网络向另一个网络发送信息。

第二层中有 MAC 地址来标识不同的机器,那么第三层中就有 IP 地址来标识不同的网络,在 CMD 里面使用 tracert(windows环境)+ 主机名 可以查看本地主机连接到另一个网络的跟踪路径。

在这里插入图片描述比如我这里使用 tracert http://www.zhihu.com,显示从我电脑所在的网络到达知乎服务器主机所在的网络,需要经过很多不同的网络,上面显示的每一行,对应在到达目标主机所在网络之前遇到的每一个网络。

IP 地址用以点分隔的 4 个字节来表示,比如 192.168.0.1 。每个字节的数字是用十进制来表示,一个字节是 8 个二进制位,可以取值 2 ^ 8 = 256 个,因此一个字节的取值范围是 0 到 255。

那么最小的 IP 地址是当所有二进制位均为 0 时: 0.0.0.0,最大的 IP 地址是当所有二进制位均为 1 时:255.255.255.255。(二进制的 00000000 转换为十进制为 0,二进制的 11111111 转换为十进制为255 )

IP地址实际上包含了两个部分,一部分是网络地址,另一部分是主机地址,IP 地址和子网掩码密不可分,子网掩码中定义了此 IP 地址的网络地址和主机地址。

1.9 子网掩码

子网掩码与 IP 地址的格式一样,4个字节32位。

子网掩码中为1的位必须在左边,为0的必须在右边,不能混合使用0和1。所以子网掩码中的每一个字节只能取以下几个值:
00000000 —> 0

10000000 —> 128

11000000 —> 192

11100000 —> 224

11110000 —> 240

11111000 —> 248

11111100 —> 252

11111110 —> 254

11111111 —> 255

子网掩码中为1的二进制位代表 IP 地址中的网络地址,为0的二进制位代表IP地址中的主机地址

比如上面显示我这台机器的IP地址是192.168.1.142,子网掩码是255.255.255.0,以二进制的形式写出来就是

192.168.1.142 —> 11000000.10101000.00000001.10001110

255.255.255.0 —> 11111111.11111111.11111111.00000000

因此,我这个IP地址的网络地址是192.168.1(对应二进制为11000000.10101000.00000001),主机地址是142(对应二进制为10001110)

如果分割刚好发生在一个字节中间,就只能以二进制的形式表示,不能再转回十进制了。比如IP地址192.168.1.142和子网掩码255.255.224.0

192.168.1.142 —> 11000000.10101000.00000001.10001110

255.255.224.0 —> 11111111.11111111.11100000.00000000

分割刚好在第三个字节中间,这个IP地址的网络地址为11000000.10101000.000,主机地址为00001.10001110。

IP 地址范围的计算

属于同一网络中的所有主机,它们的网络地址都是相同的,如果两台主机的IP地址中的网络地址不同,则它们不属于同一网络

因此,将主机地址位设置为不同的0或者1,就可以取到不同的IP值,所以网络中的第一个IP地址是主机地址所有位都为0的,网络中的最后一个IP地址是主机地址所有位都为1的。比如我这里IP地址192.168.1.142子网掩码255.255.255.0的取值范围为

11000000.10101000.00000001.00000000—>192.168.1.0

11000000.10101000.00000001.00000001—>192.168.1.1

……

11000000.10101000.00000001.11111110—>192.168.1.254

11000000.10101000.00000001.11111111—>192.168.1.255

网络中的地址数

要找到网络中的地址数量,只需知道主机地址的二进制位数即可,如果主机地址位数有1位,那么就能取值 2 ^ 1 = 2 个,如果主机地址位数有2位,那么就能取值 2 ^ 2 = 4 个……

而IP地址中的主机地址位数又由子网掩码中0的个数决定,所以网络中可用的IP地址数 = 2 ^ 子网掩码中0的个数

比如我这里相关联的192.168.1.142 和 255.255.255.0,子网掩码转换为二进制是,11111111.11111111.11111111.00000000

因此子网掩码中有8个0,可用的IP地址数为 2 ^ 8 = 256,但是IP地址范围中的第一个地址是这个网络的地址本身,最后一个地址为广播地址,这两个地址不能为某个主机所用,因此我这里实际可用的IP地址数为256-2=254

子网掩码可以用连续的1的位数来表示,如255.255.255.0可以写成24,255.255.240.0可以写成20.那么192.168.1.155/24,就表示IP地址为192.168.1.155,子网掩码为255.255.255.0.

1.10 网关

什么是网关

网关(Gateway)又称网间连接器、协议转换器。网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。

如何来理解网关
大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络向另一个网络发送信息,也必须经过一道“关口”,这道关口就是网关。顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。

按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关。

网关的ip地址
那么网关到底是什么呢?
网关实质上是一个网络通向其他网络的IP地址,网关在网段内的可用ip中选一个,不过,一般用的是第1个和最后一个

例如有网络A和网络B,网络A:的IP地址范围为“192.168.1.1~192. 168.1.254”,子网掩255.255.255.0;

如果需要与其它网段通信,那么它的网关可以设置为192.168.1.1,当然也可以设置为网段内其它的一个ip地址。

网络B:的IP地址范为“192.168.2.1~192.168.2.254”,子网掩码255.255.255.0。

如果需要与其它网段通信,那么它的网关可以设置为192.168.2.1,当然也可以设置为网段内其它的一个ip地址。

在这里插入图片描述

网关是如何实现通信

在没有路由器的情况下,不同的两个网络之间是不能进行TCP/IP通信的,即使是两个网络连接在同一台交换机(或集线器)上,TCP/IP协议也会根据子网掩码(255.255.255.0)判定两个网络中的主机处在不同的网络里。而要实现这两个网络之间的通信,则必须通过网关。

如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机(如附图所示)。网络B向网络A转发数据包的过程

所以说,只有设置好网关的IP地址,TCP/IP协议才能实现不同网络之间的相互通信。

什么是默认网关?
如果搞清了什么是网关,默认网关也就好理解了。就好像一个房间可以有多扇门一样,一台主机可以有多个网关。默认网关的意思是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关。

1.11 IP协议

OSI第二层中用以太网协议定义了信息传输单元,简称为帧,它长这个样子。
在这里插入图片描述
同样的在OSI第三层中,会用 IP 协议去定义信息传输单元,简称为数据包,它长这个样子。
在这里插入图片描述
实际上,最终在网络上传输的是第二层的帧,因为发送消息是从上到下穿越,从OSI第七层穿越到第一层,再通过网络发送。每穿越一层,该层的头部就会被封装在单元中,所以第四层的单元包含第七层的头部,第三层的单元包含第四层的头部,第二层的单元包含第三层的头部,层层嵌套,所以实际的以太网帧长这个样子:
在这里插入图片描述
可以利用软件查看网络中传输的帧,查看每一层数据包的头部信息下面每一行对应一个数据包:
在这里插入图片描述

1.12 路由器

路由器具有多个网络接口,可以连接到多个网络,它的作用是把接收到的数据包分发到不同的网络中。

类似于第二层中的交换机有一个CMA表,这个表将交换机中的每一个 RJ45 接口与一个 MAC 地址相关联,交换机依据这个表里的对应关系和数据帧里面的目标地址,将数据包发送到正确的地址上。

路由器也有一个这样的表叫路由表,表里会列出要连接的目标地址和网关的IP地址,路由器依据这个表来分发数据包目标地址是一个网络地址而不是某台机器的IP 地址,如果要将互联网上每台机器的IP地址记录在一个路由表中也不太可能。网关就好像两个网络之间的关卡,其实也就是另外一个路由器的IP地址,必须要将数据包发送到这个路由器,才能将数据包转发到指定的目标网络

在 Windows 中CMD里面使用 route print 可以查看路由表:
在这里插入图片描述
第一列可以看到要加入的目标地址,第二列是该地址的子网掩码,第三列就是对应网关的IP地址,上面显示在链路上,表示网关的 IP 地址和接口那列的 IP 地址一样。

其中第一行的 0.0.0.0 表示默认路由,如果我要加入的网络不属于路由表中的任何网络,则就会使用默认网关地址加入其它网络。

第六行显示了我本机所在的网络192.168.1.142/24,这个地址以我本机的IP地址 192.168.1.142 作为网关。

1.12 ARP协议

ARP协议位于OSI模型第三层。

1.12.1 ARP概述

如果要在TCP/IP协议栈中选择一个"最不安全的协议",那么我会毫不犹豫把票投给ARP协议。我们经常听到的这些术语,包括"网络扫描"、“内网渗透”、“中间人拦截”、“局域网流控”、“流量欺骗”,基本都跟ARP脱不了干系。大量的安全工具,例如大名鼎鼎的Cain、功能完备的Ettercap、操作傻瓜式的P2P终结者,底层都要基于ARP实现。

听上去这么"逆天"的协议,其实技术原理又简单的难以置信,例如ARP整个完整交互过程仅需要两个包,一问一答即可搞定!但是ARP协议也有它令初学者迷惑的地方,例如由它本身延伸出来的"代理ARP"、“免费ARP”、“翻转ARP”、“逆向ARP”,而这些不同种类的ARP,又应用于不同的场景。好吧,在深入到技术原理之前,作为初学者,我们先记住下面三句话:

  1. ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标IP对应的MAC地址。
  2. 在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。
  3. 一般情况下,上层应用程序更多关心IP地址而不关心MAC地址,所以需要通过ARP协议来获知目的主机的MAC地址,完成数据封装。

接下来,我们通过图解的方式来深入了解ARP协议是如何工作的。

1.12.2 ARP原理之请求应答

同一个局域网里面,当PC1需要跟PC2进行通信时,此时PC1是如何处理的?

在这里插入图片描述
根据OSI数据封装顺序,发送方会自顶向下(从应用层到物理层)封装数据,然后发送出去,这里以PC1 ping PC2的过程举例==>
在这里插入图片描述

PC1封装数据并且对外发送数据时,上图中出现了"failed",即数据封装失败了,为什么?

我们给PC1指令-“ping ip2”,这就告知了目的IP,此时PC1便有了通信需要的源目IP地址,但是PC1仍然没有通信需要的目的MAC地址。这就好比我们要寄一个快递,如果在快递单上仅仅写了收件人的姓名(IP),却没有写收件人的地址(MAC),那么这个快递就没法寄出,因为信息不完整。

那么,现在PC1已经有了PC2的IP地址信息,如何获取到PC2的MAC地址呢?此时,ARP协议就派上用场了。我们接着上面这张图,继续==>

在这里插入图片描述
通过上图的过程,我们看到PC1和PC2进行了一次ARP请求和回复过程,通过这个交互工程,PC1便具备了PC2的MAC地址信息。

接下来PC1会怎么做呢?在真正进行通信之前,PC1还会将PC2的MAC信息放入本地的【ARP缓存表】,表里面放置了IP和MAC地址的映射信息,例如 IP2<->MAC2。接下来,PC1再次进行数据封装,正式进入PING通信,如下==>

在这里插入图片描述
小结:经过上面6个步骤的处理,PC1终于把数据包发送出去了,之后便可以进行正常的通信了。看到了吧,ARP的功能和实现过程是如此的简单:它在发送方需要目标MAC地址的时及时出手,通过"一问一答"的方式获取到特定IP对应的MAC地址,然后存储到本地【ARP缓存表】,后续需要的话,就到这里查找。

既然是"缓存"表,意味着它有时效性,并且如果电脑或者通信设备重启的话,这张表就会清空;也就是说,如果下次需要通信,又需要进行ARP请求。在我们的windows/macos系统下,可以通过命令行"arp -a"查看具体信息=>
在这里插入图片描述

1.12.3 ARP原理之广播请求单播回应

上面的图解过程看上去简单又纯粹,好像我们就已经把这个协议的精髓全部get到,但其实,我们只是刚揭开了它的面纱,接下来我们才真正进入正题。例如,上面的图解过程中,整个局域网(LAN)只有PC1和PC2两个主机,所以这个一问一答过程非常的顺畅。

而实际网络中,这个LAN可能有几十上百的主机,那么请问,PC1如何将这个【ARP请求包】顺利的交给PC2,而PC2又如何顺利的把【ARP回应包】返回给PC1? 我们看下面的图:
在这里插入图片描述在这里插入图片描述

为了营造出"几十上百"的效果,这里多添加了2个主机进来,并且增加了有线和无线的环境。那么,在多主机环境下,PC1现在发出的ARP请求包,怎么交到PC2手里?

这时,ARP协议就需要采用以太网的"广播"功能:将请求包以广播的形式发送,交换机或WiFi设备(无线路由器)收到广播包时,会将此数据发给同一局域网的其他所有主机。

那么,什么是广播?对于初学者而言,我们只需要知道,大部分的广播包,它们有一个共同特征:二层封装时目的MAC是全f(ffff.ffff.ffff)或三层封装时目的IP是全1(255.255.255.255)。可以这样更方便的记住:目的地址最大的,就是广播

接下来我们来看下这个ARP广播请求包接下来是如何工作的?

在这里插入图片描述

根据上图我们看到,PC1发送的请求广播包同时被其他主机收到,然后PC3和PC4收到之后(发现不是问自己)则丢弃。而PC2收到之后,根据请求包里面的信息(有自己的IP地址),判断是给自己的,所以不会做丢弃动作,而是返回ARP回应包

ARP请求是通过广播方式来实现的,那么,PC2返回ARP回应包,是否也需要通过广播来实现呢?答案是否定的。大部分网络协议在设计的时候,都需要保持极度克制,不需要的交互就砍掉,能合并的信息就合并,能不用广播就用单播,以此让带宽变得更多让网络变得更快。
在这里插入图片描述

那么,ARP回应包是如何处理的?这里需要特别关注ARP请求包的内容,在上面的图解里面,ARP请求包的完整信息是:我的IP地址是IP1,MAC地址是MAC1,请问谁是PC2,你的IP2对应的MAC地址是多少?

简单来说,ARP请求首先有"自我介绍",然后才是询问。这样的话,PC2在收到请求之后,就可以将PC1的IP和MAC映射信息存储在本地的【ARP缓存表】,既然知道PC1在哪里,就可以返回ARP单播回应包。

这张图我们需要得到两个信息:①被询问者PC2先生成了ARP映射信息,然后才是询问者PC1;②PC3和PC4等其他主机,无法收到这个ARP回应包,因为是单播形式。

小结:ARP协议通过"一问一答"实现交互,但是"问"和"答"都有讲究,"问"是通过广播形式实现,"答"是通过单播形式

1.12.4 ARP数据包解读

为了让大家更好的理解ARP协议以及广播和单播的概念,我们来看一下用Wireshark抓取到的真实网络中的ARP过程,通过数据包的方式来呈现,地址信息如下,部分MAC信息隐去。(建议初学者用GNS3配合Wireshark来抓取协议包进行分析,相比真实网络更加干净,方便分析)

主机1 <—> 主机2

主机1: IP1 10.1.20.64 MAC1:00:08:ca:xx:xx:xx

主机2: IP2 10.1.20.109 MAC2:44:6d:57:xx:xx:xx

【ARP请求包】

在这里插入图片描述

【ARP回应包】
在这里插入图片描述

【ARP协议字段解读】

Hardware type :硬件类型,标识链路层协议

Protocol type: 协议类型,标识网络层协议

Hardware size :硬件地址大小,标识MAC地址长度,这里是6个字节(48bti)

Protocol size: 协议地址大小,标识IP地址长度,这里是4个字节(32bit)

Opcode: 操作代码,标识ARP数据包类型,1表示请求,2表示回应

Sender MAC address :发送者MAC

Sender IP address :发送者IP

Target MAC address :目标MAC,此处全0表示在请求

Target IP address: 目标IP

1.12.5 ARP到底是链路层还是网络层?

这个问题的难度堪比另外一个世界级难题:世界上最好的编程语言是什么?

其实早在20世纪时,W.Richard Stevens在《TCP/IP详解卷一》里面就提到了这个难题。这里给出我个人的协议分层思路,给大家作为参考=>

协议到底所属哪一层,可以从应用/功能来考虑,也可以从层次/包封装来考虑。

以ARP协议为例,它的功能最终是获取到MAC信息,服务于链路层,从这点考虑,ARP是链路层协议;但是从层次来看,ARP基于Ethernet协议,IP协议基于Ethernet协议,它们在Ethernet协议里面有独立的Type类型,前者是0x0806,后者是0x0800,既然ARP和IP协议"平起平坐",那么IP是网络层,ARP难道就不是网络层?

小结:基于功能来考虑,ARP是链路层协议;基于分层/包封装来考虑,ARP是网络层协议。(此方法对于ICMP协议同样管用)

1.13 UDP和TCP协议

OSI 第四层是传输层(Transport layer),用于管理应用程序的连接,保证连接的有效建立,第四层有两个协议,分别是快速但不可靠的UDP协议和可靠的TCP协议。

UDP协议
UDP(user datagram protocol ) 协议是一种无连接的协议,它的目标是快速高效,并不在乎数据有没有被接收方收到,所以它是不可靠的,例如一些互联网广播和电视,重要的是实时发送这些信息,如果丢失一点信息,也并不会停止。

UDP数据报的格式:
在这里插入图片描述
源端口号:发送信息的应用程序的地址。
目标端口号:接收信息的应用程序的地址。
Checksum:表示 “校验和”,与 OSI 第 2 层的以太网帧里的 CRC功能类似,也是用于错误校验,确保发送的数据和接收的数据是相同的。

TCP协议
TCP(transmission control protocol)协议非常可靠,发送的每一个数据包都会去确认对方是否收到,如果接收方没有确认,发送方将会重新发送此数据包。

在正式交谈前,TCP 协议会先建立通信,因此发送的前三个数据包都只是用于建立通信,这些都是空的数据包。

三次握手建立通信:
在这里插入图片描述①客户端 A 发送一个SYN(synchronous)标志,这是一个同步请求,表明客户端 A 想与服务端 B 建立通信。

②接收到请求的服务端 B 将会回复一个 ACK(acknowledgement)标志表示确认,同时还会向客户端 A 发送一个 SYN 标志,询问客户端 A 是否要与自己建立通信,因为 TCP 协议是双全工,连接是双向的,所以需要建立两个连接。

③客户端 A 再次发送 ACK 标志的数据包,接受来自服务端 B 的连接请求。

经过三次握手后,双向通信建立,应用程序之间就可以互传数据包了,在互传的过程中,所有的数据包都会加上 ACK 标志,表示确认收到了先前的数据包。

四次挥手终止通信:
在这里插入图片描述①客户端 A 发送一个FIN( finish )标志到服务端 B,请求关闭 A 到 B 方向的连接。

②服务端 B 收到 FIN 请求后,回复一个 ACK 标志表示确认关闭 A 到 B 的连接。

③服务端 B 请求关闭 B 到 A 方向的连接,发送一个 FIN 标志给客户端 A。

④客户端 A 回复一个 ACK 标志给服务端 B ,从 B 到 A 的连接被关闭。

在建立连接的三次握手中,第二步的 SYN 和 ACK 标志可以一起设置,是因为此时连接还未成功建立,还没有数据传输。

在断开连接的四次挥手中,第二步的 ACK 标志和第三步的 FIN标志不能合并到一起,是因为从 B 到 A 的方向还有数据传输,服务端 B 将在数据传输完毕后,再向客户端 A 发送 FIN 请求关闭连接。

1.14 NAT

我们知道,用私有地址(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)向互联网发送数据包是得不到响应的。

但是全球IP地址的数量又有限(2的32次方),如何使私有网络中的应用程序能和互联网进行通信,同时又不会占用太多 IP 地址,这就需要用到 NAT。

NAT(Network Address Translation)表示网络地址转换,是一种技术,也是一种协议

如果没有使用 NAT 技术,一个局域网中的一台机器在发出数据帧后,该帧在返回的时候包含的目标 IP 地址是一个私有地址,就会被路由器阻止,所以该机器接收不到返回信息。NAT 技术的原理就是用公有地址代替私有的源 IP 地址

NAT 有两种不同类型,动态和静态:

①动态 NAT:多个私有地址和一个公有地址关联,因此仅使用一个公有地址就可以连接多台机器,这样就节约了 IP 地址。

②静态 NAT:一个私有地址关联一个公有地址,这种目前已经很少使用了。

动态 NAT 的工作原理:
在这里插入图片描述比如在上面这个网络图中 10.0.1.1 和 10.0.1.2 都是私有地址,包含在10.0.1.0/24这个网络中,117.148.64.237 是路由器的公有 IP 地址。

机器1(10.0.1.1)请求知乎网(103.41.167.234),发送的以太网帧是以下内容
在这里插入图片描述
路由器对数据包使用 NAT 技术后,发出的以太网帧是以下内容
在这里插入图片描述

可以看到,源 IP 地址已经被更改为本地路由器的 IP 地址,这样数据包到达知乎网站的服务器后,它将向本地路由器的 IP 地址 117.148.64.237 发送响应,但是目前路由器还不知道要将数据包转发给哪台机器。

事实上,无论使用 TCP 协议还是 UDP 协议,发出请求的机器都会选择一个源端口,来标识发出请求的机器,所以机器1(10.0.1.1)发出的以太网帧是以下内容(假设源端口号是12345,目标端口号是80):
在这里插入图片描述
路由器上有一个 NAT 表,会记录源 IP 地址、目标 IP 地址、源端口号、目标端口号之间的关系,路由器发送到互联网中的帧是以下内容
在这里插入图片描述
知乎服务器将响应此请求,发送回来的数据帧是一下内容
在这里插入图片描述
本地路由器收到知乎网站的服务器发送回来的帧,就会在自己的 NAT 表中查找 12345 源端口号对应的信息,就可以将帧发送给 10.0.1.1 这台机器了。

但是如果局域网上的两台机器分别使用相同的源端口向知乎发出请求,那么数据帧在返回的时候,由于源端口号完全一样,所以路由器不知道将帧返回给哪台机器,这就需要用路由器自己来确定源端口号,路由器会在发送帧的时候同时修改源 IP 地址和源端口号,这样就能确保请求不会具有相同的源端口。

所以使用动态 NAT,拥有私有 IP 地址的机器借助路由器的公有 IP 地址访问互联网,仅使用了一个公有 IP 地址,就服务了多台机器,这样就大量节省的 IP地址。

端口转发
动态 NAT 有一个问题是,局域网中的机器可以访问互联网,但是互联网上的机器却无法访问局域网中的机器,因为当连接的第一个帧是从外部到达时,路由器不知道是将这个帧发送给局域网中的哪一台机器,这个时候,就需要用到端口转发技术

端口转发,就是将本地路由器的一个端口,重定向到局域网中指定机器上的指定端口,端口转发有一个端口转发表,它会告诉路由器将到达指定端口的数据包转发到指定机器的指定端口

在这里插入图片描述
上面这个表就表示任何发送到本地路由器公有 IP 地址 80 端口的数据包,都将自动重定向到 10.0.1.1 这台机器的 80 端口,通过端口转发,外界就可以访问局域网中的机器了。

1.15 DHCP协议

DHCP位于OSI模型第七层。

DHCP(Dynamic Host Configuration Protocol )表示动态主机配置协议,它的功能是为机器提供 IP 地址

当机器在尝试与 DHCP 服务器通信的时候,需要一个 IP 地址,但是这个时候机器还没有 IP 地址不能发送数据包,所以只有利用广播地址,获取 DHCP 服务器的 MAC 地址。

用于查找 DHCP 服务器的帧是一个 DHCP DISCOVER 帧,因为它是广播帧,所以将被发送到 MAC 地址 ff:ff:ff:ff:ff:ff。

DHCP 服务器收到 DHCP DISCOVER 帧,它会发回一个提议,这是一个 DHCP OFFER 帧,它将提供一个 IP 地址,子网掩码,以及默认网关的 IP 地址。

DNS 服务器可以在主机名和 IP 地址之间建立关联,例如 http://www.zhihu.com 和 103.41.167.234

客户端以 DHCP REQUEST 帧来响应,这个帧也是以广播形式发送,用于告知接受了哪个提议,其提议已被接受的 DHCP 服务器将确认请求,并发送 DHCP ACK 帧以确认租约的分配

(因为 IP 地址和关联的子网掩码的分配是有期限的,只要租约到期,这个地址就会还给DHCP服务器,以供其他客户机使用。所以过了期限之后,必须重新请求一个 IP 地址,不过重新请求一个 IP 地址时,客户端不需要进行从 DHCP DISCOVER 开始的整个过程,直接从 DHCP REQUEST 就可以了)

在这里插入图片描述

1.16 DNS

DNS协议也位于OSI模型第七层。

DNS是域名解析(Domain Name System),是把网址变成IP地址的服务器。

DNS说白了是把域名翻译成IP地址用的,这里面举个例子,大家就很容易清楚了。

例如我们在浏览器里面输入www.baidu.com的时候,机器要跟百度这个网站进行通信,机器要往外面发送数据包,数据包里面要写百度这台服务器的IP地址,我们不知道IP地址是多少,那么就需要主机问DNS服务器,DNS服务器就自动帮我们把www.baidu.com这个域名翻译成了IP地址61.135.169.105。然后写到了数据包的目的IP地址里面就可以进行通信。

就跟我们写信一样,你得写个收信人的地址邮局才能给你发送吧,你给国外写信,你写中文地址邮局不认识,需要这个一个人帮你翻译成英语。这就是DNS的作用,所以你的在本地连接里面写DNS才可以正常浏览网页,如果不设置DNS,是无法正常访问网页的。

1.17 Http协议

HTTP是超文本传输协议的缩写,它是定义从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议,目前使用最广泛的是HTTP/1.1版本。

在浏览器中输入一个 URL 中间经历的过程
在这里插入图片描述1.当浏览器发起请求的时候,并不会先做查询,而是查看 DNS Cache 和本地硬盘里 host 文件有没有相应网址的映射,如果有,则调用,如果都没有,就会发起一个 DNS 查询,浏览器通过 IP 地址与 Web 服务器通信

2.获取到ip地址后,浏览器就可以调用 socket 函数,发起TCP请求,通过三次握手建立连接

3.客户端通过 TCP 套接字向 Web 服务器发送 HTTP 请求,一个请求报文由请求行、请求头、空行和请求数据 4 部分组成
在这里插入图片描述 HTTP请求一开始并没有先打到 web 框架上,而是先打到反向代理 Nginx(Nginx 是一个高性能的静态服务器, 很多访问量比较高的网站都会使用 Nginx 来负载均衡,可以把请求通过 Nginx 转换到动态服务器上,增大吞吐量)通过 uwsgi 服务器(兼容web应用)将请求转发到 web 应用。这部分内容可以参考:https://blog.csdn.net/cdknight_happy/article/details/112981031

4.Web 服务器接受请求并返回 HTTP 响应,服务器将资源复本写到 TCP 套接字,由客户端读取。
一个HTTP响应由状态行(包含版本号、状态代码、描述)、响应头部、空行和响应数据 4 部分组成。
在这里插入图片描述
5.若没有其他数据传输,则通过 TCP 四次挥手释放连接

6.客户端读取响应数据 HTML,根据 HTML 的语法对其进行格式化,并在浏览器窗口中显示。

常用的HTTP方法及状态码,可以参考:https://blog.csdn.net/cdknight_happy/article/details/112843410的3.1节。

1.18 SSH协议

ssh是 secure shell 的缩写,直译过来就是安全的壳,它可以建立一个安全的通信管道,保证数据在传输时不被泄露和篡改。

对称加密

对称加密就是指加密和解密使用的是同一个密钥,因此加密方和解密方都须要知道这个密钥,所以客户机和服务器必须事先传递这个密钥。(如果是以明文方式传递秘钥,秘钥被截获之后就可以破解任何传递的加密信息)

非对称加密

非对称加密中用公钥来进行加密,用私钥来进行解密,公钥可以在网络上明文传输,私钥则不能。

SSH 结合使用两种加密方法:

首先,使用非对称加密,安全地传输对称加密的密钥。之后,就一直使用对称加密的密钥来加密和解密。

因为非对称加密的开销非常大,所以不能一直使用非对称加密,只是在通信之初用非对称加密的方式交换对称加密的密钥,之后就可以用对称加密的方式来通信了。

SSH 创建安全通信管道的的过程:

假设公钥是 public_key,私钥是 private_key,用于对称加密的秘钥是 superkey

服务端S将用于加密的公钥 public_key 以明文方式发给客户端C,客户端C收到后就用公钥来加密对称加密的秘钥 superkey,然后再将加密后的秘钥传给服务端S,(虽然黑客可以截获这个加密后的秘钥,但是没有私钥无法解密。)服务端S收到这个秘钥后再用自己的私钥来解密,就得到了对称加密的秘钥。

服务端和客户端都没有以明文的方式传递过 superkey 但是都得到了这个superkey,现在它们就可以以对称加密的方式通信了,通过 SSH 协议, 两台机器之间传递的信息会被加密,这样就保证了传输信息的安全性。

1.19 HTTPS 协议

因为HTTP 协议传输是不安全的,所以才有了后面的HTTPS 协议。

HTTP 协议传输的数据是明文的,容易被窃听截取。HTTP 在传输的过程中不会验证通信方的身份,存在冒充风险HTTP 在传输的过程中,双方并不会校验报文的完整性,传输不可靠

HTTPS 是 HTTP Secure 的缩写,可以理解为安全的HTTP协议,它使用了TLS协议进行了认证和加密,除了协议名称和默认端口号外(HTTP 协议的默认端口号是 80,HTTPS 协议的默认端口号是 443)不同,HTTPS 协议在语法及语义上和 HTTP 一样。

TLS 协议位于 TCP 和 HTTP 协议之间,因此,所有 HTTP 数据都经过加密和认证,尤其是 HTTP 报头,HTTP 请求和 HTTP 响应的主体。

TLS ( transport layer security )表示传输安全,是网络连接最常用的加密协议,也是 SSL协议的后继者,目前最广泛使用的是 1.2 版本。

TLS 协议的主要作用:

使用对称加密来确保数据的保密性使用MAC码(消息认证码)来确保数据的完整性使用非对称加密来确保会话密钥的交换使用证书颁发机构签署的证书来验证服务器身份

TLS通信由两部分构成

连接建立:使用非对称加密技术和证书签名来交换秘钥( session key )
数据交换:使用对称加密技术和 MAC 码

2 二层网络 vs 三层网络

2.1 VLAN

VLAN中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络,也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。

什么是虚拟局域网?好好的,为什么要划分vlan?

这里举个例:通俗的了解
一所高中,新学期高一招了800个学生,这800个学生,如果放在一个班里,那肯定是管理不过来,面对800个人,老师看了也头疼,这边在授课,那边完全听不到,老师布置什么任务,也会有一些传达不到,老师要是想找某个学生的信息,要从800份信息中去找,极其麻烦,浪费时间;

而实际中,也是一样,电脑A要想要与电脑B通信,于是电脑A就需要发送ARP请求,而网络中电脑众多,最终ARP请求会被转发到同一网络中的所有电脑,才能找到电脑B,如此一来,为了找到电脑B,消耗了网络整体的带宽,收到广播信息的计算机还要消耗一部分CPU时间来对它进行处理。造成了网络带宽和CPU运算能力的大量无谓消耗。

那么怎么办呢?
学校就针对这800个学生,分成了10个班,每个班80人,分别命名为高一(1)班,高一(2)班、、、、高一(10)班,每个人都会获得一个班级编号。
1101表示一班01号学生。
1102表示一班02号学生。
1201表示2班01号学生。
同一个班的学生编号尾数不同,其它的都相同。

那么这样老师再管理起来就轻松多了,可以把一班这80人管理的妥妥的,隔壁2班与3班乱成一锅粥也不管一班的事,我就要这一班80人好好上课就行。

这就是vlan,每个班就相当于一个vlan,而每个班名称,就相当于vlan的名称,而每个学生的编号就是ip地址;同班同学(同一个vlan的ip),因为同一个教室,朝夕相处,且可以相互通信,不同班的同学,若不做其它工作,很难往来通信。

所以同一个vlan间,可以相互通信;不同vlan,若不做配置,不能相互通信通过划分VLAN可以让在同一台交换机不同端口的客户机不能互相访问,有效的隔离了网络

那么不同vlan如何通通信呢?就需要单臂路由与三层交换机。

2.2 二层网络和三层网络

在企业的网络结构选择中,有二层网络和三层网络结构两种选择。

在这里的二层、三层是按照逻辑拓扑结构进行的分类,并不是说OSI七层模型中的数据链路层和网络层,而是指核心层,汇聚层和接入层,这三层都部署的就是三层网络结构,二层网络结构没有汇聚层

核心层(网络的高速交换)、汇聚层(提供基于策略的连接)、接入层(将工作站接入网络):

  • 核心层:在核心层应该采用高带宽的交换机,核心层的设备采用双机冗余热备份是非常必要的,也可以使用负载均衡功能来改善网络性能。对于网络的控制功能最好尽量少在骨干层上实施。
  • 汇聚层:是网络接入层和核心层的中介,汇聚层具有实施策略、安全、工作组接入、虚拟局域网之间的路由、源地址或目的地址过滤等多种功能。在汇聚层中,应该采用支持三层交换技术和VLAN的交换机,以达到网络隔离和分段的目的
  • 接入层:拉入层目的是允许终端用户连接到网络,主要解决相邻用户之间的互访需求,并且为这些访问提供足够的带宽,接入层还应当适当负责一些用户管理功能(如地址认证、用户认证、计费管理等),以及用户信息收集工作(如用户的IP地址、MAC地址、访问日志等)。

二层抓包(没有ip报文):
在这里插入图片描述
三层抓包(有ip报文):
在这里插入图片描述

2.2.1 二层网络

只有核心层和接入层的二层网络结构模式运行简便,交换机根据MAC地址表进行数据包的转发,有则转发,无则泛洪,即将数据包广播发送到所有端口,如果目的终端收到给出回应,那么交换机就可以将该MAC地址添加到地址表中,这是交换机对MAC地址进行建立的过程,但这样频繁的对未知的MAC目标的数据包进行广播,在大规模的网络架构中形成的网络风暴是非常庞大的,这也很大程度上限制了二层网络规模的扩大,因此二层网络的组网能力非常有限,所以一般只是用来搭建小局域网。

具体实现过程中采用了ARP协议。

2.2.2 三层网络

与二层网络结构不同的是,三层网络结构可以组建大型的网络。

核心层是整个网络的支撑脊梁和数据传输通道,重要性不言而喻,因此在整个三层网络结构中,核心层的设备要求是最高的,必须配备高性能的数据冗余转接设备和防止负载过剩的均衡负载的设备,以降低各核心层交换机所需承载的数据量。(网络的高速交换主干)

汇聚层是连接网络的核心层和各个接入的应用层,在两层之间承担“媒介传输”的作用。汇聚层应该具备以下功能:实施安全功能(划分VLAN和配置ACL)、工作组整体接入功能、虚拟网络过滤功能。因此,汇聚层设备应采用三层交换机。(提供基于策略的连接)

接入层的面向对象主要是终端客户,为终端客户提供接入功能。(将工作站接入网络)

二层网络仅仅通过MAC寻址即可实现通讯,但仅仅是同一个冲突域内;三层网络则需要通过IP路由实现跨网段的通讯,可以跨多个冲突域

三层交换机在一定程度上可以替代路由器,但是应该清醒的认识到三层交换机出现最重要的目的是加快大型局域网内部的数据交换,所具备的路由功能也多是围绕这一目的而展开的,所以他的路由功能没有同一档次的专业路由器强,在安全、协议支持等方面还有许多欠缺,并不能完全取代路由器工作。

在实际应用过程中,典型的做法是:处于同一个局域网中的各个子网的互联以及局域网中VLAN间的路由,用三层交换机来代替路由器,而只有局域网与公网互联之间要实现跨地域的网络访问时,才通过专业路由器。

2.3 路由转发规则

二层网络
源主机在发起通信之前,将Self IP与目的主机的IP进行比较,如果两者位于同一网段(用子网掩码计算后具有相同的网络号),那么源主机直接向目的主机发送ARP请求,在接收到目的主机的ARP应答后获取对方的MAC地址,然后用对方的MAC地址作为目的MAC进行报文发送,位于同一VLAN(网段)的主机互访时属于这种情况,这是互联的交换机做二层交换转发。

三层网络
当源主机判断目的主机与自己位于不同网段时,它会通过网关来提交报文,即发送ARP请求来获取网关IP地址对应的MAC,在得到网关的ARP应答后,用网关MAC作为报文目的MAC进行报文发送……也就是路由器的某个端口。注意,报文的源IP是源主机IP,目的IP依然是目的主机IP。

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

路由器转发数据包也是这样,它始终是不会改IP地址的,只会改源/目标MAC。至此在三层网络中将数据发送出去。

广播处理
万一路由遇到目的MAC是广播地址怎么办?IP的广播有三种:

255.255.255.255叫本地广播,也叫直播,direct broadcast,不跨路由器。

172.16.33.255叫子网广播,广播给172.16.33.0这个子网,可以跨路由器。

172.16.255.255叫全子网广播,广播给172.16.0.0这个主网,可以跨路由器。

路由器是三层设备,可以隔离广播,但并不是所有广播都隔离。事实上只有本地广播路由器才不转发,对于子网广播和全子网广播,路由器是转发的。为什么呢?我们来看255.255.255.255的广播,在MAC的封装中,对应的目的MAC是广播,而子网广播和全子网广播,对应的目的MAC是单播,所以路由器会转发。所以路由器隔离的广播是目的MAC为全1的广播,对于目的MAC是单播的上层广播,路由器是不能隔离的。

IP数据包经由路由转发的时候 源/目的IP,源/目的MAC是否发生改变,如何改变?

A—–(B1-B2)—–(C1-C2)——E

如上拓扑图为例,B1和B2是路由器B上的两个接口,C1和C2是路由器C上的两个接口,A和E是PC,由主机A向主机E发送数据包,那么在主机A形成的数据包的目的IP就是E的IP,源IP就是主机A的IP地址,目标MAC地址就是B1的MAC地址,源MAC地址就是A的MAC地址。

由A发给路由器B,B经过重封装后,源IP和目标IP是不变的,源MAC地址变成B2的MAC地址,目标MAC地址变成C1的MAC地址,封装完成发送给路由器C,路由器C接收到数据包后和B做的操作是一样的,源IP和目标IP的不变的,源MAC地址变成C2的MAC地址,目标MAC地址变成主机E的MAC地址,然后发送给主机E,这样E就收到了这个数据包,当恢复数据包的时候就是把收到的数据包的源IP地址(主机A的IP地址)和源MAC地址(接口C2的MAC地址)作为他的目标IP和目标MAC地址。

3 两台计算机通信时的IP地址、子网掩码和网关的设置

根据IP地址和子网掩码理论,如果两台计算机各自的IP地址和其子网掩码按位相与之后,得到的网络地址是一样的,就认为两者在同一个网络中,就有可能可以通信。之所以“有可能”是因为还需要考虑其他情况。

https://www.zhihu.com/question/366466952/answer/975497431提出的问题:
在这里插入图片描述
如果是二层网络,先计算网络地址,对于192.168.26.129 255.255.255.0的机器而言,其网络地址为:192.168.26.0/24;对于192.168.26.3 255.255.255.224的机器而言,其网络地址为192.168.26.0/27。计算结果上看,两者的网络地址一样,都属于192.168.26.3这个网络,应该可以通信。但是要注意,对于192.168.26.129 255.255.255.0的机器,其子网掩码限定了可与其通信的主机为192.168.26.0 - 192.168.0.255,192.168.26.3位于这个范围内,可以通信;对于192.168.26.3 255.255.255.224机器,其子网掩码限定了可与其通信的主机为192.168.26.0 - 192.168.0.31,192.168.26.129不位于这个范围内,不可以通信。因此,在二层网络中这两者是无法通信的。

如果是三层网络

  • 两者同一个网关,网关在192.168.26.0/27上,两台电脑是能够互访的。路由器在其中起到了一个调整的作用。他会把.3发给自己的到.129的包扔回去交换机,交换机则会根据mac表发给.129。反之亦然。
  • 两者同一个网关,网关不在192.168.26.0/27上,两台电脑不能够互访。.3的网关地址是没法配置上的。
  • 两者有不同的网关,是能够互访的。

根本原因是数据包能否被电脑发出去。一旦发出去了,到了网关那里,电脑的子网掩码是否正确是不影响路由的,网关只会根据自己所配置的网络段划分情况去进行数据包路由。

参考

网络协议|OSI模型第一层物理层
网络协议|OSI模型第二层数据链路层
两层网络、三层网络的理解
二层网络结构和三层网络结构的对比
图解ARP协议(一)
单播、多播(组播)和广播的差别
广播和组播
网络协议|OSI模型第三层网络层中的IP地址和子网掩码
一文讲懂什么是三层交换机、网关、DNS、子网掩码、MAC地址
网络协议|OSI模型第三层网络层中的路由
网络协议|OSI模型第四层传输层中的UDP和TCP协议
网络协议|OSI模型第四层传输层中的NAT和端口转发
网络协议|OSI模型第七层应用层中的DHCP与DNS协议
网络协议|OSI模型第七层应用层中的HTTP协议
网络协议|OSI模型第七层应用层中的SSH协议与HTTPS协议
路由器转发规则
两个主机,是否子网掩码不同,一定属于不同的网段网段?

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cdknight_happy/article/details/113681475

智能推荐

tf.reduce_sum()方法深度解析-程序员宅基地

文章浏览阅读2k次,点赞6次,收藏5次。tf.reduce_sum()函数深度解析从矩阵,数组,数据存储的角度 解析axis参数的意义_tf.reduce_sum

adb获取app包名的方法_adb获取包名-程序员宅基地

文章浏览阅读9.8k次,点赞4次,收藏29次。adb获取app包名的方法_adb获取包名

虾皮、lazada店铺运营攻略,如何搭建高效、稳定的自养号测评系统-程序员宅基地

文章浏览阅读913次,点赞16次,收藏10次。总之,要做好虾皮店铺,不仅需要明确的定位和优质的产品,还需要精心的运营和持续的改进。通过不断优化店铺形象、制定有效的营销策略、提供优质的客户服务以及加强供应链管理等手段,您将能够在激烈的竞争中脱颖而出,实现店铺的长足发展。1.稳定的网络环境是基石,它需要经过技术手段的洗礼,将电脑或手机的底层硬件参数伪装成国外数据,以躲避平台通过IP进行的深度检测。这种真实性高的评价能够帮助商家获得更多的信任和认可,从而提升产品的排名和流量的分配。您可以关注行业动态,学习先进的经营理念和技术,以提高店铺的运营水平。

统计检验问题:Friedman Test,Nemenyi test检验和Bonferroni-Dunn test检验_统计测试 cd diagrams-程序员宅基地

文章浏览阅读5k次,点赞11次,收藏43次。统计检验_统计测试 cd diagrams

三、购物车案例_17(笔记)_购物车案例请求数据地址-程序员宅基地

文章浏览阅读332次。购物车_购物车案例请求数据地址

在unity中DOTween 使用方法_tween number-程序员宅基地

文章浏览阅读603次。DOTween 使用方法_tween number

随便推点

【合集】常见中间件漏洞_hrs中间件-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏37次。1. IIS1. PUT漏洞用户配置不当,exp:https://github.com/hackping/HTTPMLScan.git2. 短文件名猜解IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。exp:https://github.com/WebBreacher/tilde_enum3.远程代码执行(CVE-2017-7269))**exp**:https://github.com/zcgonv_hrs中间件

db2基本概念-程序员宅基地

文章浏览阅读368次。DB2支持以下两种类型的表空间: 1、 系统管理存储器表空间(SMS-SYSTEM MANAGED STORAGE) 2、 数据库管理存储器表空间(DMS-DATABASE MANAGED STORAGE) SMS、DMS用户表空间的特性对照 特性 ..._db2

模拟window桌面实现-程序员宅基地

文章浏览阅读84次。正在开发中的游戏有个全屏功能--可以在window桌面背景上运行,就像一些视频播放器在桌面背景上播放一样的,花了个上午整了个Demo放出来留个纪念。实现功能:显示图标,双击图标执行相应的程序,右击图标弹出该图标对应得菜单,点击非图标区则弹出桌面菜单。需要完整工程可以点此下载:DesktopWindow.rar。程序效果图如下:在这个程序里,定义了一个XShellItem..._模拟实现windows桌面效果

https://www.byhy.net/tut/webdev/django/01/-程序员宅基地

文章浏览阅读944次。https://www.byhy.net/tut/webdev/django/01/_byhy.net

vue玩转移动端H5微信支付和支付宝支付_移动端支付宝微信支付vue项目怎么写-程序员宅基地

文章浏览阅读5.8k次,点赞13次,收藏57次。业务场景介绍:H5移动端支持微信支付 [ 微信支付分为微信内支付(JSAPI支付官方API)和微信外支付(H5支付官方API)] && 支付宝支付 [手机网站支付转 APP 支付 官方API ]订单生成逻辑:前端请求后端提交订单,后端去和微信或者支付宝对接生成订单(后续支付都是这个逻辑进行的对接)一、移动端微信支付,vue中如何玩?在移动端微信支付分为微信内支付和微信外支付。1.在订单组件中选择支付方式之后在支付页面先去判断是否是在微信内://判断是否微信 is__移动端支付宝微信支付vue项目怎么写

深度学习AI编译器-TVM简介_tvm编译器-程序员宅基地

文章浏览阅读2k次,点赞5次,收藏9次。深度学习编译器主要为解决不同框架下训练的模型部署到指定的某些设备上时所遇到的一系列复杂的问题,即将各种深度学习训练框架的模型部署到各种硬件所面临的问题;_tvm编译器

推荐文章

热门文章

相关标签