图解网络(科普版)

一、集线器

你是一台电脑A希望与另一台电脑 B 建立通信,于是各开了一个网口,用一根网线连接了起来

有一天,一个新伙伴 C 加入了,但聪明的你们很快发现,可以每个人开两个网口 ,用一共三根网线,彼此相连

随着越来越多的人加入,你发现身上开的网口实在太多了,而且网线密密麻麻,混乱不堪

于是你们发明了一个中间设备,你们将网线都插到这个设备上,由这个设备做转发,就可以彼此之间通信了,本质上和原来一样,只不过网口的数量和网线的数量减少了,不再那么混乱。

你给它取名叫集线器 ,它仅仅是无脑将电信号转发到所有出口(广播) ,不做任何处理,你觉得它是没有智商的,因此把人家定性在了物理层

由于转发到了所有出口,那 BCDE 四台机器怎么知道数据包是不是发给自己的呢?

首先,你要给所有的连接到集线器的设备,都起个名字。原来你们叫 ABCD,但现在需要一个更专业的,全局唯一 的名字作为标识,你把这个更高端的名字称为 MAC 地址

你的 MAC 地址是 aa-aa-aa-aa-aa-aa,你的伙伴 b 的 MAC 地址是 bb-bb-bb-bb-bb-bb,以此类推,不重复就好。

这样,A 在发送数据包给 B 时,只要在头部拼接一个这样结构的数据,就可以了。

B 在收到数据包后,根据头部的目标 MAC 地址信息,判断这个数据包的确是发给自己的,于是便收下

其他的 CDE 收到数据包后,根据头部的目标 MAC 地址信息,判断这个数据包并不是发给自己的,于是便丢弃

二、交换机

虽然集线器使整个布局干净不少,但原来我只要发给电脑 B 的消息,现在却要发给连接到集线器中的所有电脑,这样既不安全,又不节省网络资源。

如果把这个集线器弄得更智能一些,只发给目标 MAC 地址指向的那台电脑,就好了。

虽然只比集线器多了这一点点区别,但看起来似乎有智能了,你把这东西叫做交换机 。也正因为这一点点智能,你把它放在了另一个层级,数据链路层

交换机内部维护一张 MAC 地址表 ,记录着每一个 MAC 地址的设备,连接在其哪一个端口上。假如你仍然要发给 B 一个数据包,到达交换机时,交换机内部通过自己维护的 MAC 地址表,发现目标机器 B 的 MAC 地址 bb-bb-bb-bb-bb-bb 映射到了端口 1 上,于是把数据从 1 号端口发给了 B,完事

你给这个通过这样传输方式而组成的小范围的网络,叫做以太网。随着机器数量越多,交换机的端口也不够了,但聪明的你发现,只要将多个交换机连接起来,这个问题就轻而易举搞定

但是你要注意,上面那根红色的线,最终在 MAC 地址表中可不是一条记录呀,而是要把 EFGH 这四台机器与该端口(端口6)的映射全部记录在表中。

交换机已经无法记录如此庞大的映射关系了。

那我可不可以让那根红色的网线,接入一个新的设备 ,这个设备就跟电脑一样有自己独立的 MAC 地址,而且同时还能帮我把数据包做一次转发呢?

三、路由器

这个设备就是路由器, 它的功能就是,作为一台独立的拥有 MAC 地址的设备,并且可以帮我把数据包做一次转发**,** 你把它定在了网络层。

MAC地址就如同身份证上的身份证号码,具有唯一性。所以你又发明了IP 地址 。现在每一台电脑,同时有自己的 MAC 地址,又有自己的 IP 地址,只不过 IP 地址是软件层面上的,可以随时修改,MAC 地址一般是无法修改的。

1.A 给 C 发数据包,怎么知道是否要通过路由器转发呢?

答案:子网

如果源 IP 与目的 IP 处于一个子网,直接将包通过交换机发出去。

如果源 IP 与目的 IP 不处于一个子网,就交给路由器去处理。

  • 192.168.0.1 和 192.168.0.2 处于同一个子网

  • 192.168.0.1 和 192.168.1.1 处于不同子网

这两个是我们人为规定的,即我们想表示,对于 192.168.0.1 来说:

192.168.0.xxx 开头的,就算是在一个子网,否则就是在不同的子网。

2.A 如何知道,哪个设备是路由器?

答案:在 A 上要设置默认网关

上一步 A 通过是否与 C 在同一个子网内,判断出自己应该把包发给路由器,那路由器的 IP 是多少呢?

其实说发给路由器不准确,应该说 A 会把包发给默认网关

对 A 来说,A 只能直接把包发给同处于一个子网下的某个 IP 上,所以发给路由器还是发给某个电脑,对 A 来说也不关心,只要这个设备有个 IP 地址就行。

所以默认网关,就是 A 在自己电脑里配置的一个 IP 地址,以便在发给不同子网的机器时,发给这个 IP 地址。

3.路由器如何知道C在哪里?

答案:路由表

现在 A 要给 C 发数据包,已经可以成功发到路由器这里了,最后一个问题就是,路由器怎么知道,收到的这个数据包,该从自己的哪个端口出去,才能直接(或间接)地最终到达目的地 C 呢。

路由器收到的数据包有目的 IP 也就是 C 的 IP 地址,需要转化成从自己的哪个端口出去,很容易想到,应该有个表,就像 MAC 地址表一样。

这个表就叫路由表

4.发送数据包的数据链路层需要知道 MAC 地址,可是我只知道 IP 地址该怎么办呢?

答案:arp

假如你(A)此时不知道你同伴 B 的 MAC 地址,你只知道它的 IP 地址,你该怎么把数据包准确传给 B 呢?

答案很简单,在网络层,我需要把 IP 地址对应的 MAC 地址找到 ,也就是通过某种方式,找到 192.168.0.2 对应的 MAC 地址 BBBB

这种方式就是 arp 协议 ,同时电脑 A 和 B 里面也会有一张 arp 缓存表 ,表中记录着 IP 与 MAC 地址的对应关系。

图解

A 给 F 发送一个数据包

原文视频:【你管这破玩意叫计算机?】 https://www.bilibili.com/video/BV19HcneGEBk/?share_source=copy_web\&vd_source=426e82144b8b4c2306bda741cd13a4f1

相关推荐
饥饿的半导体4 小时前
网络协议工程 - eNSP及相关软件安装 - [eNSP, VirtualBox, WinPcap, Wireshark, Win7]
网络·网络协议·wireshark
大锦终4 小时前
【Linux】udp网络程序
linux·运维·服务器·网络
white-persist5 小时前
JWT 漏洞全解析:从原理到实战
前端·网络·python·安全·web安全·网络安全·系统安全
数据与人工智能律师5 小时前
解码Web3:DeFi、GameFi、SocialFi的法律风险警示与合规路径
大数据·网络·人工智能·云计算·区块链
xingxing_F5 小时前
Network Radar for Mac 网络扫描管理软件
网络·macos
wanhengidc5 小时前
巨椰云手机引领未来
运维·服务器·网络·游戏·智能手机
九河云6 小时前
TOS + 数字孪生:集装箱码头的智能进化密码
大数据·服务器·网络·数据库·数字化转型
MonkeyKing_sunyuhua6 小时前
python线程间怎么通信
android·网络·python
沐浴露z6 小时前
一篇文章讲清 UPD协议 与 TCP协议
网络·网络协议·tcp/ip·计算机网络