基础网络概念(二)CSMA/CD、MAC、MTU、集线器与交换机、全双工与半双工

来源:互联网 发布:thinkphp开发cms教程 编辑:程序博客网 时间:2024/06/16 11:04

声明:本文为笔者复习计算机网络相关知识时的摘录,文章中的图片及语句均出自《鸟哥的Linux私房菜》,这里仅作为整理自用。

喜欢鸟哥文章的朋友可以到鸟哥的主页查看:http://linux.vbird.org/


以太网络的传输协议:CSMA/CD


集线器是一种网络共享媒体,什么是网络共享媒体啊?想象一下上述的环境就像一个十字路口,而集线器就是那个路口! 这个路口一次只允许一辆车通过,如果两辆车同时使用这个路口,那么就会发生碰撞的车祸事件啊!那就是所谓的共享媒体。 也就是说,网络共享媒体在单一时间点内, 仅能被一部主机所使用。
理解了共享媒体的意义后,再来,我们就得要讨论,那么以太网络的网卡之间是如何传输的呢?我们以上图中的 A 要发给 D 网卡为例好了,简单的说, CSMA/CD 搭配上述的环境,它的传输情况需要有以下的流程:
1.    监听媒体使用情况 (Carrier Sense):A 主机要发送网络封包前,需要先对网络媒体进行监听,确认没有人在使用后, 才能够发送出讯框;
2.    多点传输 (Multiple Access)A 主机所送出的数据会被集线器复制一份,然后传送给所有连接到此集线器的主机! 也就是说, A 所送出的数据, B, C, D 三部计算机都能够接收的到!但由于目标是 D 主机,因此 B 与 C 会将此讯
框数据丢弃,而 D 则会抓下来处理;
3.    碰撞侦测 (Collision Detection):该讯框数据附有检测能力,若其他主机例如 B 计算机也刚好在同时间发送讯框数据时,  那么 A 与 B 送出的数据碰撞在一块 (出车祸) ,此时这些讯框就是损毁,那么 A 与 B 就会各自随机等待一
个时间, 然后重新透过第一步再传送一次该讯框数据。
了解这个程序很重要吗?我们就来谈谈:
    网络忙碌时,集线器灯号闪个不停,但我的主机明明没有使用网络:透过上述的流程我们会知道,不管哪一部主机发送出讯框,所有的计算机都会接收到!因为集线器会复制一份该数据给所有计算机。 因此,虽然只有一部主机在对外联机,但是在集线器上面的所有计算机灯号就都会闪个不停! 
    我的计算机明明没有被入侵,为何我的数据会被隔壁的计算机窃取:透过上述的流程,我们只要在 B 计算机上面安装一套监听软件,这套软件将原本要丢弃的讯框数据捉下来分析,并且加以重组,  就能够知道原本 A 所送出的讯息了。这也是为什么我们都建议重要数据在因特网上面得要『加密』后再传输!
    既然共享媒体只有一个主机可以使用,为何大家可以同时上网:这个问题就有趣了,既然共享媒体一次只能被一个主机所使用,那么万一我传输100MB 的档案,集线器就得被我使用 80 秒 (以 10Mbps 传输时),在这期间其他人都不可以使用吗?不是的,由于标准的讯框数据在网络卡与其他以太网络媒体一次只能传输 1500bytes,因此我的 100MB 档案就得要拆成多个小数据报,然后一个一个的传送,每个数据报传送前都要经过 CSMA/CD 的机制。  所以,这个集线器的使用权是大家抢着用的即使只有一部主机在使用网络媒体时,那么这部主机在发送每个封包间, 也都是需要等待一段时间的 (96 bit time)!
    讯框要多大比较好?能不能修改讯框?:
如上所述,那么讯框的大小能不能改变呢?因为如果讯框的容量能够增大,那么小数据报的数量就会减少, 那每个讯框传送间的等待就可以减少了!是这样没错,但是以太网络标准讯框确实定义在 1500 bytes, 但近来的超高速以太网络
媒体有支持 Jumbo frame (巨型讯框,注 10) 的话,那么就能够将讯框大小改为9000bytes 哩!但不是很建议大家随便修改啦!


MAC 的封装格式
CSMA/CD 传送出去的讯框数据实际上是帧(frame)。
简单的说,你可以把 MAC 想成是一个在网络线上面传递的包裹,而这个包裹是整个网络硬件上面传送数据的最小
单位了。 也就是说,网络线可想成是一条『一次仅可通过一个人』的独木桥, 而 MAC 就是在这个独木桥上面动的人啦!接下来,来看一看 MAC 这个讯框的内容吧!


上图中的目的地址与来源地址指的就是网卡卡号 (hardware address, 硬件地址),我们前面提到,每一张网卡都有一个独一无二的卡号, 那个卡号的目的就在这个讯框的表头数据使用到啦!硬件地址最小由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF (16 进位法), 这 6 bytes 当中,前 3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。

在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号喔!特别注意,在这个 MAC 的传送中,他仅在局域网络内生效,如果跨过不同的网域 (这个后面 IP 的部分时会介绍),那么来源与目的的硬件地址就会跟着改变了。  这是因为变成不同网络卡之间的交流了嘛!所以卡号当然不同了!如下所示:


例如上面的图标,我的数据要由计算机 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 相接嘛!所以,数据的流通会变成:
1.    先由 MAC-1 传送到 MAC-2 ,此时来源是 MAC-1 而目的地是 MAC-2;
2.    B 计算机接收后,察看该讯框,发现目标其实是 C 计算机,而为了与 C 计算机沟通, 所以他会将讯框内的来源 MAC 改为 MAC-3 ,而目的改为 MAC-4 ,如此就可以直接传送到 C 计算机了。也就是说,只要透过 B (就是路由器) 才将封包送到另一个网域 (IP 部分会讲) 去的时候, 那么讯框内的硬件地址就会被改变,然后才能够在同一个网域里面直接进行讯框(frame)的流通啊!
Tips:
由于网络卡卡号是跟着网络卡走的,并不会因为重灌操作系统而改变, 所以防火墙软件大多也能够针对网络卡来进行抵挡的工作喔!不过抵挡网卡仅能在局域网络内进行而已,因为 MAC 不能跨router 嘛!!
  为什么资料量最小要 46 最大为 1500 bytes 呢?
讯框内的数据内容最大可达 1500bytes 这我们现在知道了,那为何要规范最小数据为 46bytes 呢?这是由于 CSMA/CD 机制所算出来的! 在这个机制上面可算出若要侦测碰撞,则讯框总数据量最小得要有 64bytes ,那再扣除目的地址、来源地址、检查码 (前导码不算) 后,  就可得到数据量最小得要有 46bytes 了!也就是说,如果妳要传输的数据小于 46byes ,那我们的系统会主动的填上一些填充码, 以补齐至少 46bytes 的容量才行!

MTU 最大传输单位
在待会儿会介绍到的 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 嘛!

 集线器、交换器与相关机制
共不共享很重要,集线器还是交换器? (注 11)
刚刚我们上面提到了,当一个很忙碌的网络在运作时,集线器 (hub) 这个网络共享媒体就可能会发生碰撞的情况,  这是因为 CSMA/CD 的缘故。那有没有办法避免这种莫名其妙的封包碰撞情况呢?有的,那就使用非共享媒体的交换器即可啊!
交换器 (switch) 等级非常多,我们这里仅探讨支持 OSI 第二层的交换器。换器与集线器最大的差异,在于交换器内有一个特别的内存, 这个内存可以记录每个 switch port 与其连接的 PC 的 MAC 地址,所以,当来自 switch 两端的 PC 要互传数据时,每个讯框将直接透过交换器的内存数据而传送到目标主机上! 所以 switch 不是共享媒体,且switch 的每个埠口 (port) 都具有独立的带宽喔!
举例来说,10/100 的 Hub 上链接 5 部主机,那么整个 10/100Mbps 是分给这五部主机的, 所以这五部主机总共只能使用 10/100Mbps 而已。那如果是switch 呢?由于『每个 port 都具有 10/100Mbps 的带宽』,  所以就看你当时
的传输行为是如何啰!举例来说,如果是底下的状况时,每个联机都是 10/100 Mbps 的。


图 2.2-5、交换器每个埠口的带宽使用示意图
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 的为佳!
什么是全双工/半双工(full-duplex, half-duplex)
前面谈到网络线时,我们知道八蕊的网络线实际上仅有两对被使用,一对是用在传送,另一对则是在接收。 如果两端的PC 同时支持全双工时,那表示Input/Output 均可达到 10/100Mbps, 亦即数据的传送与接收同时均可达到10/100bps 的意思,总带宽则可达到 20/200Mbps 啰 (其实是有点语病的,因为Input 可达 10/100Mbps, output 可达 10/100Mbps , 而不是 Input 可直接达到 20/200Mbps 喔! )如果你的网络环境想要达到全双工时,  使用共享媒体的Hub 是不可能的,因为网络线脚位的关系,无法使用共享媒体来达到全双工的如果你的 switch 也支持全双工模式,那么在 switch 两端的 PC 才能达到全双工喔!
    自动协调速度机制 (auto-negotiation):
我们都知道现在的以太网络卡是可以向下支持的,亦即是 Gigabit 网络卡可以与早期的 10/100Mbps 网络卡链接而不会发生问题。但是,此时的网络速度是怎样判定呢? 早期的 switch/hub 必须要手动切换速度才行,新的 hub/switch 
因为有支持 auto-negotiation 又称为 N-Way 的功能,他可自动的协调出最高的传输速度来沟通喔!如果有 Gigabit 与 10/100Mbps 在 switch 上面, 则N-Way 会先使用最高的速度 (gigabit) 测试是否能够全部支持,如果不行话,就降速到下一个等级亦即 100 Mbps 的速度来运作的!
    自动分辨网络线跳线或并行线 (Auto MDI/MDIX):
那么我们是否需要自行分辨并行线与跳线呢?不需要啦!因为 switch 若含有auto MDI/MDIX 的功能时, 会自动分辨网络线的脚位来调整联机的,所以你就不需要管你的网络线是跳线还是并行线啰!方便吧! ^_^
    讯号衰减造成的问题
由于电子讯号是会衰减的,所以当网络线过长导致电子讯号衰减的情况严重时,就会导致联机质量的不良了。因此,链接各个节点的网络线长度是有限制的喔!不过,一般来说,现今的以太网络 CAT5 等级的网络线大概都可以支持到 100 公尺的长度, 所以应该无庸担心才是吶!
但是,造成讯号衰减的情况并非仅有网络线长度而已!如果你的网络线折得太严重(例如在门边常常被门板压,导致变形) ,或者是自行压制网络线接头,但是接头部分的八蕊蕊线缠绕度不足导致电磁干扰严重, 或者是网络线放在户外风
吹日晒导致脆化的情况等等,都会导致电子讯号传递的不良而造    成联机质量恶劣。
原创粉丝点击