趣谈网络协议05物理层到MAC层
第一层(物理层)
两台电脑相连,以前使用交叉网线插在两台电脑的网卡上,用的所谓的1-3、2-6交叉接法。
水晶头的第1、2和第3、6脚,它们分别起着收、发信号的作用。将一端的1号和3号线、2号线和6号线互换一下位置,就能够在物理层实现一端发送的信号,别一端能收到。
配置两台电脑的IP地址、子网掩码和默认网关。配置成一个网络,可以一个是192.168.0.1/24, 另一个是192.168.0.2/24。
这时候两台电脑已经构成了一个最小的局域网,也即LAN。可以玩联机局域网游戏啦!
如何把三台电脑连在一起?
有一个叫做 Hub 的东西,也就是集线器。
这种设备有多个口,可以将宿舍里的多台电脑连接起来。但是,和交换机不同,集线器没有大脑,它完全在物理层工作。它会将自己收到的每一个字节,都复制到其他端口上去。这是第一层物理层联通的方案。
第二层(数据链路层)
Hub 采取的是广播的模式。
多台电脑都收到了包。
需要解决几个问题:
1.这个包是发给谁的?谁应该接收?
2.大家都在发,会不会产生混乱?有没有谁先发、谁后发的规则?
3.如果发送的时候出现了错误,怎么办?
这几个问题,都是第二层,数据链路层,也即 MAC 层要解决的问题。
MAC 的全称是 Medium Access Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这解决的是第二个问题。这个问题中的规则,学名叫多路访问。
如何解决问题2
方式一:分多个车道。每个车一个车道,你走你的,我走我的。这在计算机网络里叫作信道划分;
方式二:今天单号出行,明天双号出行,轮着来。这在计算机网络里叫作轮流协议;
方式三:不管三七二十一,有事儿先出门,发现特堵,就回去。错过高峰再出。我们叫作随机接入协议。著名的以太网,用的就是这个方式。
解决问题1:发给谁,谁接收
这里用到一个物理地址,叫作链路层地址。但是因为第二层主要解决媒体接入控制的问题,所以它常被称为MAC 地址。
就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的 MAC 地址和源的 MAC 地址。
目标mac(6bytes) | 源mac(6bytes) | 类型(2bytes) | 数据(46-1500 bytes) | CRC(4 bytes) |
---|---|---|---|---|
类型0800:IP数据报 | ||||
类型0806:ARP请求、应答 |
接下来是类型,大部分的类型是 IP 数据包,然后 IP 里面包含 TCP、UDP,以及 HTTP 等,这都是里层封装的事情。
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,然后打开 IP 包,发现 IP 地址也是自己的,再打开 TCP 包,发现端口是自己,也就是 80,而 nginx 就是监听 80。
于是将请求提交给 nginx,nginx 返回一个网页。然后将网页需要发回请求的机器。然后层层封装,最后到 MAC 层。因为来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。
解决问题3:
对于以太网,第二层的最后面是 CRC,也就是循环冗余检测。通过 XOR 异或的算法,来计算整个包是否在发送的过程中出现了错误。
知道IP, 不知道MAC地址,ARP协议
知道IP地址,求MAC地址的协议叫做ARP协议。
在一个局域网里面,当知道了 IP 地址,不知道 MAC 怎么办呢?
广而告之,发送一个广播包,谁是这个 IP 谁来回答。
目标mac(6bytes) | 源mac(6bytes) | 类型(2bytes) | ARP报文 | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
硬件类型(Ethemet) | 协议类型(IP) | 硬件地址长度(6) | 协议地址长度(6) | 操作代码(1 request 2 reply) | 发送者mac | 发送者IP | 目标MAC | 目标IP |
为了避免每次都用 ARP 请求,机器本地也会进行 ARP 缓存。当然机器会不断地上线下线,IP 也可能会变,所以 ARP 的 MAC 地址缓存过一段时间就会过期。
交换机
hub是广播的,所有包都发送到整个网络的主机上,主机判断是不是需要,把不需要的包转发过去纯属浪费。
交换机是一个二层设备。
因为电脑不经常换IP和MAC地址,交换机会记住这台电脑的MAC地址。交换机会把MAC头拿下来,检查一下目标地址,如果不是这台电脑,这个口就不用转发了。
交接机如何记住各个电脑的mac地址?
一开始,交换机谁的也不知道,有发送时,发广播。你发送的,我记住你的MAC地址了。以后发给你,我就直接给你了。
当然,每个机器的IP地址会变,所在的口也会变,因而交换机上的学习的结果,我们称为转发表,是有一个过期时间的。