arp的知识 https://zh.wikipedia.org/wiki/%E5%9C%B0%E5%9D%80%E8%A7%A3%E6%9E%90%E5%8D%8F%E8%AE%AE
第一层 物理层
举例
两台电脑通过水晶头的网线相连,如何联网?
1.通过一定的方式连线。
2.配置两台电脑的IP 地址、子网掩码和默认网关。必须保证在同一网段下,要想两台电脑能够通信,这三项必须配置成为一个网络,可以一个是 192.168.0.1/24,另一个是 192.168.0.2/24,否则是不通的。
即使只有两台电脑,之间的网络包也一定是完整的,因此一定会与MAC层。
如果有三台电脑呢?
先不考虑交换机,直接考虑集线器Hub。这种设备有多个口,可以将 宿舍里的多台电脑连接起来。但是和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自 己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。
第二层 数据链路层
Hub 采取的是广播的模式,如果每一台电脑发出的包,宿舍的每个电脑都能收到,那就麻烦了。这就需要解决几个问题:
1.这个包是谁在发?谁应该接收?
2.大家都在发,是否会混乱,有没有谁先发,谁后发的规则?
3.如果发送过程错误了会如何?
这几个问题是在第二层也就是MAC层需要解决的问题。Media Access Control媒体访问控制,控制什么?其实就是控制媒体中谁先发,谁后发的问题,防止发生混乱。
多路访问问题就是解决第二个问题
方式一:分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作信道划分;
方式二:今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作轮流协议;
方式三:不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作随机接入协 议。著名的以太网,用的就是这个方式。
接下来要解决第一个问题:发给谁,谁接收?
这里用到了一个链路地址,就是常说的MAC地址。
解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的 MAC 地址 和源的 MAC 地址。
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网 卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。于是将请求提交给 nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最 后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求 的机器。
对于以太网,第二层的最后面是CRC,也就是循环冗余检测。通过 XOR 异或的算法,来计算整个包是否 在发送的过程中出现了错误,主要解决第三个问题。
这里还有一个没有解决的问题,当源机器知道目标机器的时候,可以将目标地址放入包里面,如果不知道呢?一个广播的网络里面接入了 N 台机器,我怎么知道每个 MAC 地址是谁呢?这就是ARP 协议,也 就是已知 IP 地址,求 MAC 地址的协议。
简单来讲,就是发送一个广播包来询问这个IP是谁的,如下
为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会 变,所以 ARP 的 MAC 地址缓存过一段时间就会过期。
当用户电脑越来越多,显然集线器的方式不合理,因为 Hub 是广播 的,不管某个接口是否需要,所有的 Bit 都会被发送出去,然后让主机来判断是不是需要。
这里就需要三层设备交换机了,因为它有一个自学机制。
如何自学?
一台 MAC1 电脑将一个包发送给另一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不 知道 MAC2 的电脑在哪个口,所以没办法,它只能将包转发给出了来的那个口之外的其他所有的口。但
是,这个时候,交换机会干一件非常聪明的事情,就是交换机会记住,MAC1 是来自一个明确的口。以 后有包的目的地址是 MAC1 的,直接发送到这个口就可以了。
当交换机作为一个关卡一样,过了一段时间之后,就有了整个网络的一个结构了,这个时候,基本上不 用广播了,全部可以准确转发。当然,每个机器的 IP 地址会变,所在的口也会变,因而交换机上的学习 的结果,我们称为转发表,是有一个过期时间的。
小结
第一,MAC 层是用来解决多路访问的堵车问题的;
第二,ARP 是通过吼的方式来寻找目标 MAC 地址的,吼完之后记住一段时间,这个叫作缓存;
第三,交换机是有 MAC 地址学习能力的,学完了它就知道谁在哪儿了,不用广播了。
参考刘超老师《趣谈网络协议》
来源:https://www.cnblogs.com/CherryTab/p/12184883.html