如何在宿舍中自己组网玩联机游戏(MAC、ip、CRC)——组队开黑联机走起
作者:互联网
机器想要在网络环境中和其他机器开展沟通,就必须拥有自己的ip地址。那么怎样才能将两台电脑连接起来呢?
你会说,买个路由器不就行了。(路由器通过路由链路将不同ip地址的机器连接在一起。所以无线网是通过路由器将手机与电脑的网线链路在一起,这样手机就可以进入电脑所在的网络)。
但当没有路由器时该怎么办呢?下面就来介绍如何通过物理层和链路层搭建一个局域网。
一、第一层:物理层
使用路由器构建局域网是直接从第三层即ip所在层(网络层)实现的。
那么物理层究竟可以折腾什么呢?
在物理层,我们通过电脑连电脑的网线将两台电脑连接在一起。这种方式就是一根网线,有两个头。一头插在一台电脑的网卡上,另一头插在另一台电脑的网卡上。但是在当时,普通的网线这样是通不了的,所以水晶头要做交叉线,用的就是所谓的 1-3、2-6 交叉接法。
水晶头的1,2脚:收信号;水晶头的3,6脚:发信号; 将一端的1和3号线换一下位置,2和6号线换一下位置,这样的线两端各连上一台计算机,就可以实现通信,当然,两台计算机的 IP 要配在一个网络中才行; 这样组成的局域网叫 LAN;
当然电脑连电脑,除了网线要交叉,还需要配置这两台电脑的 IP 地址、子网掩码和默认网关。要想两台电脑能够通信,这三项必须配置成为一个网络,可以一个是 192.168.0.1/24,另一个是 192.168.0.2/24,否则是不通的。
此时这两台电脑已经构成一个最小的局域网了,这两台电脑之间的网络包包含MAC层,网络包不可以是“空中楼阁”,必须包含下层。
当需要在这个最小的局域网中接入第三台电脑时该怎么办呢?
有一个叫做 Hub 的东西,也就是集线器。这种设备有多个口,可以将宿舍里的多台电脑连接起来。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。
集线器hub工作在物理层,且是广播模式
二、数据链路层(MAC层)
2.1 hub的缺点
1. 这个网络包是发送给谁的?谁应该接受?
2. 同时很多台机器发送网络包会不会产生混乱?如何确定先后顺序?
3. 如果包发送时出错该怎么办?
2.2 解决问题一
解决发给谁,谁接受的问题,这里用到一个物理地址叫作链路层地址即MAC地址。解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的 MAC 地址和源的 MAC 地址。
接下来是类型,大部分的类型是 IP 数据包,然后 IP 里面包含 TCP、UDP,以及 HTTP 等,这都是里层封装的事情。有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。
对于以太网,第二层的最后面是 CRC,也就是循环冗余检测。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误,主要解决第三个问题。
CRC(循环冗余检测)使用的算法是XOR异或算法。 这个CRC(循环冗余检测)解决的是:在网络上传输数据出错的问题。 现在终于知道为什么其他层都只是加个头部。而数据链路层不仅得加头部还得加尾部。 加头部加的是源MAC地址和目标MAC地址,是为了解决这个网络包发给谁的问题。 加尾部加的是CRC(循环冗余检测),是为了解决这个网络包在网络上传输数据出错的问题。
ARP协议:在一个局域网里面,当知道了 IP 地址,不知道 MAC 怎么办呢?靠“吼”。(所谓吼就是广播的意思)
为了避免机器每次都使用ARP协议发送ARP请求,在每台机器的本地会进行ARP缓存。--<(只要涉及到缓存,那就是空间换时间的设计思想)。 1、一般机器都是先查本地ARP缓存。 2、本地ARP缓存查不到,再去发送ARP请求在局域网中去找目标IP地址对应的MAC地址。
2.3 解决问题二
MAC 的全称是 Medium Access Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这解决的是第二个问题。这个问题中的规则,学名叫多路访问。(MAC层和MAC地址是两码事)
1.方法一:
分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作信道划分;(有点像多线程的思想)
2. 方法二:
今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作轮流协议;
3. 方法三:
不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作随机接入协议。著名的以太网,用的就是这个方式。
2.4 解决问题三(循环冗余检测算法:二进制流作为多项式系数进行多项式乘除法运算在合并时进行模2运算)
CRC 算法的基本思想是将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。例如:
6、23、4 可以看做一个2进制数: 0000011000010111 00000010
假如被除数选9,二进制表示为:1001
则除法运算可以表示为:
可以看到,最后的余数为1。如果我们将这个余数作为校验和的话,传输的数据则是:6、23、4、1。
CRC 算法和这个过程有点类似,不过采用的不是上面例子中的通常的这种除法。在CRC算法中,将二进制数据流作为多项式的系数,然后进行的是多项式的乘除法。还是举个例子吧。
比如说我们有两个二进制数,分别为:1101 和1011。
1101 与如下的多项式相联系:1x3+1x2+0x1+1x0=x3+x2+x0
1011与如下的多项式相联系:1x3+0x2+1x1+1x0=x3+x1+x0
两个多项式的乘法:(x3+x2+x0)(x3+x1+x0)=x6+x5+x4+x3+x3+x3+x2+x1+x0
得到结果后,合并同类项时采用模2运算。也就是说乘除法采用正常的多项式乘除法,而加减法都采用模2运算。所谓模2运算就是结果除以2后取余数。比如3 mod 2 = 1。因此,上面最终得到的多项式为:x6+x5+x4+x3+x2+x1+x0,对应的二进制数:111111
加减法采用模2运算后其实就成了一种运算了,就是我们通常所说的异或运算:
0+0=0 | 0-0=0 |
0+1=1 | 0-1=1 |
1+1=0 | 1-0=1 |
1+0=1 | 1-1=0 |
常用多项式如下:
三、局域网
通过hub连接在机器数目少时可以接受,但机器数目一旦增多就会出现问题。因为 Hub 是广播的,不管某个接口是否需要,所有的 Bit 都会被发送出去,然后让主机来判断是不是需要。这种方式路上的车少就没问题,车一多,产生冲突的概率就提高了。而且把不需要的包转发过去,纯属浪费。
此时我们就需要使用到交换机:
交换机怎么知道每个口的电脑的 MAC 地址呢?
这需要交换机会学习。一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪个口,所以没办法,它只能将包转发给除了来的那个口之外的其他所有的口。但是,这个时候,交换机会干一件非常聪明的事情,就是交换机会记住,MAC1 是来自一个明确的口。以后有包的目的地址是 MAC1 的,直接发送到这个口就可以了。(交换机第一次不知道目标是谁,会进行广播,一旦发现这个目标,就会记录下目标的地址,下一次发送会针对性的发送。即交换机的学习过程)
标签:联机,多项式,电脑,地址,CRC,MAC,x3 来源: https://blog.csdn.net/weixin_45749480/article/details/120103420