技术为主,感悟为辅

0%

网络协议学习总结(一)

网络协议是很抽象又很重要的内容,不结合具体的实例很难去理解他。之前学过很多次,都是一知半解,过不了多久就忘记了,只隐约记得 OSI 七层协议而已。这几天使用了新的工具,对网络协议的要求很高,故又学了一遍,做些笔记,希望不要再忘记。

从网络范围由小到大进行讨论

一个屋中的两个电脑

(此部分内容为假象,没有实际实验过,后期实验)
两台电脑进行通讯,用一根网线链接两个口,两个口的后面就是两张网卡,每个网卡都有一个唯一的地址叫 MAC地址,它是在网络设备间最常用的地址,当确定了 MAC地址 就可以像目标发送消息了,就像在小屋子内,互相写信,要写上发信人是谁,收信人是谁,就不会造成发错对象,或是理解错发信人这种怪事。MAC地址 可以理解为邻近设备互相沟通的依据。

信息的发送是一个一个包来实现的,每天个包的体积不会很大,有时被称为帧 Frame,这样就不会造成拥堵。在每个包的最开头就是 MAC地址

可以很明显得看到,数据包最前面的部分就是两个 MAC地址,一个是我本机的地址,一个是目标机器的地址。在我们配置电脑的网络的时候,需要手动配置四样东西:IP 地址,网关,子网掩码,DNS。这其中并没有 MAC地址,那我们的电脑是如何知道对方主机的 MAC地址 的呢,这个方法说白了就是吼,叫做 ARP 协议。

“谁是 192.168.77.14啊,知道的说吱一声,我是 192.168.99.121”

图中的包的就是一个 ARP 包,它的作用就是问 MAC地址的 因为是广播,没有具体目标,所以目标 MAC地址 就写成了 ff ff ff ff ff ff,无关人等看到这条消息就忽略它,匹配上IP的机器,就把自己的 MAC地址 回复给发问的机器,这样源机器就知道了想要通话的机器的 MAC地址 了,接下来就可以发真正想发的内容了。

在两台机器直连的情况下,首先配置好各个的 IP 地址,在 A 机器向 B 机器说话的过程中,因为没有对方的 MAC地址 所以先吼一下,也就是 ARP,因为只有一根网线,B机器就收到了这个消息,在 B 机器的 IP 没有配置错的情况下,确认了想沟通的对象是自己,于是返回自己的 MAC地址,从此这两台电脑就可以联机游戏了。

三台电脑

三台电脑的情况下怎么办,线只有两头,只靠网线没有办法联三台电脑。这个时候我们有两种办法,第一种是方法是使用: 集线器。这是个纯物理设备,价格最便宜,网上已经找不到了。它的上面可以连出三根或更多网线,然后单纯地把它们联在一起,就像有三个头的网线

集线器示意图

可以看出这种办法是有效的,但是很浪费,去网 C 的信号完全是无意义并且浪费的,当设备一多,就会造成七嘴八舌的情况,网络就会变得拥堵,所以淘宝上已经找不到这个设备了。

优化他的办法也很简单,让集线器知道,连接到它的设备都是谁, 每条线路对应的 MAC地址 都是什么就可以了,当有信号进来的时候,看看这个信号的目标 MAC地址 ,然后只让它对应的那条线走就可以了,这个升级后的设备叫交换机。

交换机示意图

那么当 ARP 信号经过的时候怎么办,简单,交换机向所有其它口广播消息,当回复信号再次经过它的时候,通过读这个信号中的信息,它就掌握了,这个口对应的 MAC地址,完成了学习

想让隔壁省的电脑也连进来怎么办

同学在隔壁省,想一起玩游戏,从隔壁省拉根网线到我的电脑上是不现实的。这个时候就要用到互联网,我和他都交个网费,都是联通的吧,一年600块。然后运营商就会给我们两家一人一根可以联网的网线,我们这里假设这两条网的 IP 地址都是固定的。我家 IP 是 118.118.118.118,小明家 IP 是 119.119.119.119,并且不考虑家用路由器。

这个时候仅靠 MAC 地址 不行了,就像在山东吼一声: “谁的身份证是 119.119.119.119”,这个人如果在自己家里可能还得到回应,可这个人在隔壁省,路途太遥远了,总不能让两个省的设备都接收你的 ARP 请求,那网络该乱成什么样子。

这个时候 IP 就要发挥作用了,首先讲讲网关。网关的作用可以理解为一家人,一家人之间,我们互相吼一吼,直接问对方 MAC 地址 是没什么问题的。出了家门,就不能乱吼了,否则整个小区的人都会出来揍人,还未必找得到人,如同大海捞针。当我们用电脑发送一个信息的时候,首先要确认的就是接收者是不是我们家人,是的化就吼,不是的话就交给邮局,剩下的事就不管了。如何确定一家人呢,要综合看 IP 地址和子网掩码。

IP 地址

IP 地址有四段,形如 192.168.1.1 , 其中每个段的范围是 0 ~ 254。在 IP 地址中找出自己家人,剩下的就是外网的人了。有的家族小,分配的成员少一点就够了,有的家族大,分配的成员要多一点,那如何分配,就要看子网掩码了。

子网掩码

它的二进制形式是这样的

1
2
3
A: 11111111 00000000 00000000 00000000
B: 11111111 11111111 00000000 00000000
C: 11111111 11111111 11111111 00000000

和 IP 地址一样,也是四段的,它的特点是前面一堆全是 1,后面一堆全是 0。常见的 IP 地址和子网掩码的组合如下。

1
2
3
4
5
  IP: 192.168.1  .1
掩码:255.255.255.0
// 换成二进制
IP: 11000000 10101000 00000001 00000001
掩码: 11111111 11111111 11111111 00000000

IP 和 掩码上下对应着位置来看,对于两个 IP 地址,如果掩码中 1 对应的位置都是相同的,那么它们就在同一个网段。换成10进制

1
192.168.1.0  到 192.168.1.254 都是一家人

其中有一个成员我们会把它定义成网关,也就是家里的大门,把数据给他就相当于给了邮局
通常它的一家人中的第一个

1
192.168.1.1 我是网关,看门人

回到最开始和小明联机的情景中来,当联通的网线接进来的时候,我们是直接把它连在电脑上的,我们的电脑的 IP 就是联通给分配的 IP,子网掩码是 255.255.255.255, 网关就是它自己,信息进入小区的路由器后,小区的路由器会根据目的 IP 选择下一级路由,进入下一跳,直到小明的小区的路由器,那个路由器一看数据是给小明的,就直接传给小明家的电脑了,至些完成了信息传送。信息在路由器中传递的时候,头部的两个 MAC 地址 会依次被替换成当前路由和下一跳路由的 IP 地址。

现在我们将情况变得复杂一点,能常情况下,家里都不会入户网线直连电脑的,都要整个
家用路由器(家用路由器和严格意义上的路由器有很大区别),这样电脑和手机都可以上网了。这个时候拨号操作就不是由电脑来实现的了,而是由家用路由器实现。我们电脑的 IP 地址也不是公网 IP 地址了,而是家用路由器给分配的一个内网地址。通常是 192.168.1.x, 至于它们如何通信,除了利用第三方服务器,我还没想到什么办法。