3、以太网络的传输协议:CSMA/CD
整个以太网络的重心就是以太网络卡啦!所以说,以太网络的传输主要就是网络卡对网络卡之间的数据传递而已。 每张以太网络卡出厂时,就会赋予一个独一无二的卡号,那就是所谓的 MAC (Media Access Control) 啦! 理论上,网卡卡号是不能修改的,不过某些笔记本电脑的网卡卡号是能够修改的呦! 那么以太网络的网卡之间数据是如何传输的呢?那就得要谈一下 IEEE 802.3 的标准 CSMA/CD (Carrier Sense Multiple Access with Collision Detection) 了!我们以下图来作为简介,下图内的中心点为集线器, 各个主机都是联机到集线器,然后透过集线器的功能向所有主机发起联机的。
图 2.2-2、CSMA/CD联机示意图,由 A 发送资料给 D 时,注意箭头方向
集线器是一种网络共享媒体,什么是网络共享媒体啊?想象一下上述的环境就像一个十字路口,而集线器就是那个路口! 这个路口一次只允许一辆车通过,如果两辆车同时使用这个路口,那么就会发生碰撞的车祸事件啊!那就是所谓的共享媒体。 也就是说,网络共享媒体在单一时间点内, 仅能被一部主机所使用。
理解了共享媒体的意义后,再来,我们就得要讨论,那么以太网络的网卡之间是如何传输的呢?我们以上图中的 A 要发给 D 网卡为例好了,简单的说, CSMA/CD 搭配上述的环境,它的传输情况需要有以下的流程:
4、MAC 的封装格式
上面提到的 CSMA/CD 传送出去的讯框数据,其实就是 MAC 啦!MAC 其实就是我们上面一直讲到的讯框 (frame) 啰! 只是这个讯框上面有两个很重要的数据,就是目标与来源的网卡卡号,因此我们又简称网卡卡号为 MAC 而已。 简单的说,你可以把 MAC 想成是一个在网络线上面传递的包裹,而这个包裹是整个网络硬件上面传送数据的最小单位了。 也就是说,网络线可想成是一条『一次仅可通过一个人』的独木桥, 而 MAC 就是在这个独木桥上面动的人啦!接下来,来看一看 MAC 这个讯框的内容吧!
MAC 的封装格式
上面提到的 CSMA/CD 传送出去的讯框数据,其实就是 MAC 啦!MAC 其实就是我们上面一直讲到的讯框 (frame) 啰! 只是这个讯框上面有两个很重要的数据,就是目标与来源的网卡卡号,因此我们又简称网卡卡号为 MAC 而已。 简单的说,你可以把 MAC 想成是一个在网络线上面传递的包裹,而这个包裹是整个网络硬件上面传送数据的最小单位了。 也就是说,网络线可想成是一条『一次仅可通过一个人』的独木桥, 而 MAC 就是在这个独木桥上面动的人啦!接下来,来看一看 MAC 这个讯框的内容吧!
图 2.2-4、同一讯框在不同网域的主机间传送时,讯框的表头变化
例如上面的图标,我的数据要由计算机 A 通过 B 后才送达 C ,而 B 计算机有两块网络卡,其中 MAC-2 与 A 计算机的 MAC-1 互通,至于 MAC-3 则与 C 计算机的 MAC-4 互通。但是 MAC-1 不能与 MAC-3 与 MAC-4 互通,为啥?因为 MAC-1 这块网络卡并没有与 MAC-3 及 MAC-4 使用同样的 switch/hub 相接嘛!所以,数据的流通会变成:
先由 MAC-1 传送到 MAC-2 ,此时来源是 MAC-1 而目的地是 MAC-2;
B 计算机接收后,察看该讯框,发现目标其实是 C 计算机,而为了与 C 计算机沟通, 所以他会将讯框内的来源 MAC 改为 MAC-3 ,而目的改为 MAC-4 ,如此就可以直接传送到 C 计算机了。
也就是说,只要透过 B (就是路由器) 才将封包送到另一个网域 (IP 部分会讲) 去的时候, 那么讯框内的硬件地址就会被改变,然后才能够在同一个网域里面直接进行讯框的流通啊!
由于网络卡卡号是跟着网络卡走的,并不会因为重灌操作系统而改变, 所以防火墙软件大多也能够针对网络卡来进行抵挡的工作喔! 不过抵挡网卡仅能在局域网络内进行而已,因为 MAC 不能跨 router 嘛!!
5、MTU 最大传输单位
通过上面 MAC 封装的定义,现在我们知道标准以太网络讯框所能传送的数据量最大可以到达 1500 bytes , 这个数值就被我们称为 MTU (Maximum Transmission Unit, 最大传输单位)。 你得要注意的是,每种网络接口的 MTU 都不相同,因此有的时候在某些网络文章上面你会看到 1492 bytes 的 MTU 等等。不过,在以太网络上,标准的定义就是 1500 bytes。
在待会儿会介绍到的 IP 封包中,这个 IP 封包最大可以到 65535 bytes,比 MTU 还要大呢!既然礼物 (IP) 都比盒子 (MAC) 大,那怎么可能放的进去啊?所以啰, IP 封包是可以进行拆解的,然后才能放到 MAC 当中啊!等到数据都传到目的地, 再由目的地的主机将他组装回来就是了。所以啰,如果 MTU 能够大一些的话,那么 IP 封包的拆解情况就会降低, 封包与封包传送之间的等待时间 (前一小节提到的 96 bit time) 也会减少,就能够增加网络带宽的使用啰!
为了这个目的,所以 Gigabit 的以太网络媒体才有支持 Jumbo frame 的嘛!这个 Jumbo frame 一般都定义到 9000bytes。 那你会说,既然如此,我们的 MTU 能不能改成 9000bytes 呢?这样一来不就能够减少数据封包的拆解,以增加网络使用率吗? 是这样没错,而且,你也确实可以在 Linux 系统上更改 MTU 的!但是,如果考虑到整个网络,那么我们不建议你修改这个数值。 为什么呢?
我们的封包总是需要在 Internet 上面跑吧?你无法确认所有的网络媒体都是支持那么大的 MTU 对吧! 如果你的 9000 bytes 封包通过一个不支持 Jumbo frame 的网络媒体时,好一点的是该网络媒体 (例如 switch/router 等) 会主动的帮你重组而进行传送,差一点的可能就直接回报这个封包无效而丢弃了~这个时候可就糗大啰~ 所以, MTU 设定为 9000 这种事情,大概仅能在内部网络的环境中作~举例来说,很多的内部丛集系统 (cluster) 就将他们的内部网络环境 MTU 设定为 9000,但是对外的适配卡可还是原本的标准 1500 喔! ^_^
也就是说,不论你的网络媒体支持 MTU 到多大,你必须要考虑到你的封包需要传到目的地时, 所需要经过的所有网络媒体,然后再来决定你的 MTU 设定才行。就因为这样,我们才不建议你修改标准以太网络的 MTU 嘛!
早期某些网络媒体 (例如 IP 分享器) 支持的是 802.2, 802.3 标准所组合成的 MAC 封装,它的 MTU 就是 1492 , 而且这些设备可能不会进行封包重组,因此早期网络上面常常有朋友问说,他们连上某些网站时,总是会联机逾时而断线。 但透过修改客户端的 MTU 成为 1492 之后,上网就没有问题了。原因是什么呢?读完上头的数据,您应该能理解了吧?
交换器 (switch) 等级非常多,我们这里仅探讨支持 OSI 第二层的交换器。交换器与集线器最大的差异,在于交换器内有一个特别的内存, 这个内存可以记录每个 switch port 与其连接的 PC 的 MAC 地址,所以,当来自 switch 两端的 PC 要互传数据时,每个讯框将直接透过交换器的内存数据而传送到目标主机上! 所以 switch 不是共享媒体,且 switch 的每个埠口 (port) 都具有独立的带宽喔!
A 传送到 D 与 B 传送到 C 都独自拥有 10/100Mbps 的带宽,两边并不会互相影响! 不过,如果是 A 与 D 都传给 C 时,由于 C port 就仅有 10/100Mbps ,等于 A 与 D 都需要抢 C 节点的 10/100Mbps 来用的意思。 总之,你就是得要记得的是,switch 已经克服了封包碰撞的问题,因为他有个 switch port 对应 MAC 的相关功能, 所以 switch 并非共享媒体喔!同时需要记得的是,现在的 switch 规格很多, 在选购的时候,千万记得选购可以支持全双工/半双工,以及支持 Jumbo frame 的为佳!