Skip to content

七层/四层协议

约 3683 个字 18 张图片 预计阅读时间 12 分钟

OSI 和 TCP/IP 网络分层模型详解(基础)

image.png image.png

image.png

一个基本流程

一文让你搞懂:路由器,集线器,交换机,网桥,光猫有啥区别?-电子工程专辑

image.png

1、应用层

提供原始数据和通信诉求

2、传输层

传输层大部分使用TCP协议。即关注的是源和目的端口 — 使用时上层提供好。 image.png

3、网络层

网络层大部分使用IP协议,即关注的源和目的IP。

如何知道目的IP是多少?— 也是需要上层提供好。

image.png

4、数据链路层

数据链路层的报文,成为一帧数据,网络传输的最小单元?;关注源和目的mac地址; image.png

ip地址只是为了上层软件更简单的标注一台目标设备,真正用于网络通信的需要mac地址标注真实的设备网卡地址;

核心的问题是,如何知道目标mac地址?

通过ARP协议,用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址 的一种协议。ARP 协议在 IPv4 中极其重要。

一文详解 ARP 协议 - 程序员cxuan - 博客园

5、物理层

从数据链路层到物理层,数据会被转为01比特流。网线两端的水晶头需要采用交叉互联法。 水晶头里有8根线,注意上图里的颜色,是有顺序的。第1、2根线起着收信号的作用,而第3、6脚发信号的作用。将一端的1号和3号线、2号和6号线互换一下位置,就能够在物理层实现一端发送的信号,另一端能收到。

image.png

6、分层总结

分层
应用层 消息
传输层 报文段(segment)/数据报(datagram) (注:TCP叫TCP报文段,UDP叫UDP数据报,也有人叫UDP段)
网络层 分组、数据包(packet) 分组是在网络中传输的二进制格式的单元,为了提供通信性能和可靠性,每个用户发送的数据会被分成多个更小的部分。在每个部分的前面加上一些必要的控制信息组成的首部,有时也会加上尾部,就构成了一个分组。它的起始和目的地是网络层。
数据链路层 帧(frame)
物理层 P-PDU(bit)

image.png

其实,segment,datagram,packet,frame是存在于同条记录中的,是基于所在协议层不同而取了不同的名字。 —

image.png

网络设备

一文让你搞懂:路由器,集线器,交换机,网桥,光猫有啥区别?-电子工程专辑

集线器(物理广播)

集线器工作处于物理层。

从A网口进入集线器的消息,此时还是电信号。这里经过一个PHY模块。 经过PHY的处理后,以电信号的形式输入到中继电路,被无脑广播,再次经过PHY模块后变成BCD网口的格式输出。

  • 这里面的电信号,是会受噪声干扰,导致信号形变出错的。但就算是错了,也还是会原封不动的广播出去,这就是上面提到无脑的精髓所在。
  • 那信号如果出错了怎么办?只能让接收方收到消息后进行校验。还记得上文里提到的数据链路层的MAC报头里最末尾有个FCS吗?FCS里存放的是发送方通过循环冗余校验CRC计算得到的值。接收方用收到的数据算一次CRC,与FCS里的值进行对比。如果一致,那证明数据没问题。如果出错,则直接丢弃。— 当然,丢弃包并不会影响数据的传输, 因为丢弃的包不会触发确认响应。因此协议栈的 TCP 模块会检测到丢包, 并对该包进行重传。
  • 如果消息没出错,但是因为无脑广播,C也能收到A发给B的数据包。此时 C 会在接受到数据包后一层层的"剥开"。正常情况下,在数据链路层时,识别到目的 MAC 地址跟 C 的不一致时,也会把数据丢弃。 image.png image.png

交换机(二层交换机)

集线器有无脑广播问题,交换机可以解决这个问题。

从网络分层上来说,二层交换机属于数据链路层,比集线器所在的物理层还要高一层。所有发到交换机的数据,都会先进入交换机的缓存区。接着消息再被转发到对应机器上。注意这里用的是转发,而不是集线器的广播,交换机是怎么做到转发的呢?

交换机内部维护了一张MAC地址表,记录了端口号和MAC地址的对应关系。这个表的数据是交换机不断学习的结果。

当A发消息到交换机时,交换机发现消息是从1号端口进来的,则会在MAC地址表上,记录A的MAC地址对应1号端口。如果A没有很长时间没发消息到这个1号端口,那这条记录就会过期并被删除。那么,当时间足够长,ABC 都发过消息给交换机后,地址表就会有完整的关系信息。

  • A准备发送消息给B,此时A会把B的MAC地址,放入要发送的数据里。数据顺着网线发出。
  • 交换机从端口收到数据,会把数据里的源和目的MAC地址提出来,跟MAC地址表进行对比。
  • 发现**B的MAC地址正好在2号端口**,那么就把数据转发给2号端口。
  • 此时B电脑从网线收到来自交换机2号端口的数据。 image.png

正常流程很清楚了,看两个**特殊情况**: 1、交换机查询地址表时,发现目的 MAC 地址的目标端口和这个包的源端口,是同一个端口,怎么办? — 会直接丢弃这个包。 2、MAC地址表里找不到对应的MAC地址,怎么办?

这可能是因为具有该地址的设备,还没有向交换机发送过包,或者这个设备一段时间没有工作,导致地址被从地址表中删除了。这种情况下,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上,都能收到这个包。此时,交换机就会跟集线器一样进行**广播**。发送了包之后目标设备会作出响应,只要返回了响应包,交换机就可以将它的地址写入地址表,下次也就不需要把包 发到所有端口了。 image.png

其实对比可以发现,交换机和集线器内部结构很像。

重点需要提到的是MAC模块。消息以**电信号**的形式从网口进入,到了PHY会被转成**通用格式**的电信号。而MAC模块的作用是把这个电信号转为**数字信号**,这样就能提取出MAC包头,并通过MAC数据帧末尾的**FCS校验**这个包有没有问题,如果没问题,则把数据放到**内存缓冲区**里,否则直接丢弃。

另外,这个MAC模块,虽然这么叫。但其实**交换机MAC模块不具有 MAC 地址**。因此交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。

放入到内存缓冲区后,还会把MAC地址和端口号记录到MAC地址表中。同时检查**目的MAC地址**在不在MAC地址表中,在的话则会**转发**到对应端口。否则**广播**。

交换机与网桥的区别?

网桥,本质上可以理解为**两个网线口的交换机**,正好可以把两台电脑给连起来,也叫**桥接**。而交换机,则是**多网线口的网桥**,可以把多台电脑给连(桥接)起来。

其他功能方面,大差不差,不必太过纠结。

路由器(三层交换机)

交换机的端口数量毕竟有限,并且不可能一台交换机纪录全世界所有设备的mac与端口映射关系。

什么是网络交换机?| 交换机与路由器对比 | Cloudflare image.png

路由器中有路由表,管理的是网段与端口的映射关系,网段是基于子网掩码算出的一个LAN局域网,局域网内部通常再用交换机管理; image.png

假设A要发消息到D。也就是192.168.0.105/24要发消息到192.168.1.11/24。那么A会把消息经过交换机发到路由器。路由器通过192.168.0.105/24获得其网络号是 192.168.0.0 ,而目的地的网络号是192.168.1.0,二者网络号不同,处于不同局域网。查**路由表**,发现192.168.1.0,在e2端口,那么就会把消息从e2端口发出,到达交换机,交换机发现MAC地址是它局域网下的D机器,就把消息打过去。当然,如果路由表里找不到,那就打到默认**网关**吧,也就是从e1口发出,发到IP192.0.2.1这个路由器的路由表不知道该去哪,说不定其他路由器知道image.png

路由器内部,分为控制平面和数据平面,说白了就是对应软件部分和硬件部分。硬件部分跟交换机很像。数据从A网口进入,此时数据还是网线上格式的电信号,会被PHY模块转为通用信号格式,再被MAC模块转为数字信号,通过FCS进行错误校验,同时校验MAC地址是否是自己,通过校验则进入内存缓冲区,否则丢弃。再进入软件部分,由路由选择处理器,通过一定规则(软件逻辑),查询路由表判断转发目标和对应转发口,再经由硬件部分的交换结构转发出去。如果路由表中无法找到匹配记录,路由器会丢弃这个包,并通过ICMP消息告知发送方。

路由器 vs 交换机?

1、MAC模块的区别 路由器和交换机不同点在于,它的每个网口下,都有一个MAC地址和IP地址。正因为路由器具有 MAC 地址,因此它能够成为数据链路层的的发送方和接收方。

怎么理解这句话?前面提到交换机,是不具备MAC地址的,而MAC报头是需要填上目的MAC地址的。因此交换机从来都不是数据的目的地,它只简单转发数据帧到目的地。但路由器,是有MAC地址的,因此MAC报头就可以写上,下一站目的地就是xx路由。到了路由器后,路由器可以再次组装下一站的目的MAC地址是再下一个路由,通过这一点,让数据在路由和路由之间传输。而同时因为交换机不具有MAC地址,因此也不会校验收到的数据帧的MAC地址是不是自己的,全部收下做转发。而路由器则会校验数据帧的MAC报头里的目的MAC地址是不是自己,是的话才会收入内存缓冲区,否则丢弃。

2、找不到转发目的地时的处理方式有区别 如果在路由表中无法找到匹配的记录,路由器会丢弃这个包,并通过 ICMP消息告知发送方。而交换机在MAC地址表里找不到转发端口时会选择广播。

这里的处理方式两者是不同的,原因在于网络规模的大小。交换机连接的网络最多也就是几千台设备的规模,这个规模并不大。如果只有几千台设备,遇到不知道应该转发到哪里的包,交换机可以将包发送到所有的端口上,虽然这个方法很简单粗暴,但不会引发什么问题。但路由器工作的网络环境就是互联网,全世界所有的设备都连接在互联网上,规模非常大,并且这个规模还在持续扩大中。如果此时它的操作跟交换机一样,将不知道应该转发到哪里的包发送到整个网络上,那就会产生大量的网络包,造成网络拥塞。因此,路由器遇到不知道该转发到哪里的包, 就会直接丢弃。

光猫(光电信号转换)

不管是交换机还是路由器,前面都是提到网口输入的是电信号。但现在流行的是光纤传输,传输的是光信号。

而光猫(modem),是一种调制解调器,其实就是用于光电信号转换的设备。

接收数据时,可以将光纤里的光信号转化为电信号,发给路由器,路由器内部再转成数字信号,并在此基础上做各种处理。

相反,也会把路由器传来的电信号转为光信号,发到光纤,并进入互联网。 image.png

总结

  • 两台电脑可以通过一根网线直接连接,进行通信。
  • 机器一多,可以把网线都接到**集线器**(物理层)上,但是集线器会不管三七二十一进行**广播**。
  • 不想广播,可以用(二层)交换机(数据链路层),又叫多端口网桥,它比较聪明,会自我学习生产MAC地址表,知道消息发到哪,那就**不需要广播**啦
  • 互联网电脑这么多,交换机MAC地址表总不能全放下吧。改用**路由器**(网络层),也叫三层交换机,通过网段的方式定位要把消息转发到哪,就不需要像交换机那样苦哈哈一条条记录MAC地址啦。
  • 路由器和光猫之间是好搭档,**光猫**负责把光纤里的光信号转换成电信号给路由器。
  • 现在一般情况下,家里已经不用集线器和交换机了,大部分路由器也支持交换机的功能。所以可以看到,家里的台式机电脑一般就连到一个路由器,再连个光猫就够能快乐上网了。