本文从大佬闪客SUN的博客阅读后整理而来,主要是为了自己加深理解,原文更加直观和易懂
物理层:
-
初始状态:几台电脑两两直连通讯,很简单
-
复杂状态:加入电脑过多,两两直连导致接口电脑接口不够,出现了hub来解决
hub:集中器(类似于村里的广场,大家都到这里来交流)。
原理:所有电脑都连一个hub,要给某台电脑发消息时,消息先发给hub,然后由hub(类似于通过村里的大喇叭)广播给其他电脑。
引申:每个人都会接收很多广播消息,而且不知道哪些是属于自己的。所以给每个发送的消息都带上了发送人、接收人唯一标识(MAC地址)。类似于邮件的发件人、收件人。以后再收到广播消息时,只看收件人是自己的消息,其他的消息自动丢弃。
-
缺点:
- 消息所有人都能接收到,不安全。
- 大量无用的消息在网络上,浪费网络资源。
数据链路层:
-
为解决物理层的问题,将hub升级为交换机:转发消息时,只会给接收人MAC地址发(精准投递)
-
为了精准投递,需要一张MAC地址表来记录每台电脑是和哪个端口对应,格式为:MAC地址——电脑连接的端口号
原理:A给B发送一条消息,交换机根据MAC地址表,将消息只发送给B连接交换机的端口即可,不需要全员广播。
-
MAC地址表如何建立:
初始化:空表,表头为:MAC地址——端口号
生成数据:
- 交换机转发消息,发现收件人的MAC地址不在表中,则进行全体端口广播;
- 正确的接收者收到后进行响应(签收确认),交换机记录响应电脑的MAC地址和端口,将数据插入都表中;
-
以太网:由这样传输方式而组成的小范围的网络
以太网和因特网的区别:以太网是局域网,因特网是广域网
-
缺点:
-
加入的电脑越来越多,一台交换机的端口已经不能连上所有电脑
解决方式:
- 设置多台交换机,组成多个单独以太网
- 将多个单独以太网连接,组成更大的以太网
-
随着千万级电脑的加入,MAC地址表数量指数级提升,效率下降,一张表不可能穷尽所有的地址映射;
-
网络层(IP协议):
-
为解决数据链路层交换机的问题,将所有交换机都连到路由器上,由路由器接收、分发交换机之间的消息;
-
路由器不仅有自己的MAC地址,而且每一个端口都有独立的MAC地址;
-
路由器有路由表,格式为:目的IP——子网掩码——端口
-
路由器根据目的IP进行子网的换算,然后从映射的端口转发消息;
-
TCP/IP协议:
TCP协议类似于快递打包规范,将数据按照特定的格式打包、解包,保证解包后数据能还原,且没有损坏。
IP协议类似于物流规范,将打好的数据包,通过网络(IP地址、路由器、交换机)送达给指定接收者。
总结:
电脑视角:
- 首先我要知道我的 IP 以及对方的 IP
- 通过子网掩码判断我们是否在同一个子网
- 在同一个子网就通过 arp 获取对方 mac 地址直接扔出去
- 不在同一个子网就通过 arp 获取默认网关的 mac 地址直接扔出去
交换机视角:
- 我收到的数据包必须有目标 MAC 地址
- 通过 MAC 地址表查映射关系
- 查到了就按照映射关系从我的指定端口发出去
- 查不到就所有端口都发出去
路由器视角:
- 我收到的数据包必须有目标 IP 地址
- 通过路由表查映射关系
- 查到了就按照映射关系从我的指定端口发出去(不在任何一个子网范围,走其路由器的默认网关也是查到了)
- 查不到则返回一个路由不可达的数据包
如果你嗅觉足够敏锐,你应该可以感受到下面这句话:
网络层(IP协议)本身没有传输包的功能,包的实际传输是委托给数据链路层(以太网中的交换机)来实现的。
涉及到的三张表分别是
- 交换机中有 MAC 地址表用于映射 MAC 地址和它的端口
- 路由器中有路由表用于映射 IP 地址(段)和它的端口
- 电脑和路由器中都有 arp 缓存表用于缓存 IP 和 MAC 地址的映射关系