程序员学网络之集线器和交换机

从网络实现 实现层面 网络可以划分为以太网、令牌环、FDDI、ATM,它们都规定了各自的物理介质、网络适配器(网卡)、数据传输协议。从网络 覆盖范围 可以划分为局域网、城域网、广域网。但是 这只是意味着网络的覆盖范围变大了而不是说网络的实现发生了变化。以现在的网络为例,无论是局域网、广域网、还是整个互联网基本上都是以太网 。

网卡

网络适配器即网卡,它是一个插在计算机主板上的(或者集成在主板上)硬件设备。在以太网中每个网卡都有一个全球唯一的48位标识就是我们常说的“MAC地址”(一般用每16进制每字节一组表示,比如:0a:00:27:00:00:06)。 当计算机通讯的时候网卡负责实现带冲突检测的载波监听多路访问技术(CSMA/CD) ,网卡属于OSI参考模型中的物理层和数据链路层。网络层以上的部分则由操作系统中的协议栈实现,所以 TCP/IP协议栈其实只包含了网络层(IP)和传输层(TCP、UDP) 。

程序员学网络之集线器和交换机

集线器

如果仅仅是两台计算机通讯那么通过网络传输介质(比如双绞线)把二者的网卡连接起来,在操作系统中配置网络层信息(配置IP地址)就可以了。如果三台或者多台计算机通讯则必须借助一些额外的设备,其中集线器就是其中一种。 集线器也叫Hub,它本质上是多端口的网卡,为了理解它的工作原理通过GNS3搭建一个网络拓扑:

程序员学网络之集线器和交换机

上面的拓扑中有三个终端,我们要做的实验是当PC1和PC2通讯的时候,在Hub1->PC3这条链路上是否能收到数据包。先配置PC1、PC2、PC3的IP地址

程序员学网络之集线器和交换机

程序员学网络之集线器和交换机

然后开启Hub1到PC3之间的抓包,通过PC1 ping PC2。

程序员学网络之集线器和交换机

ping一共产生了两种数据包:ARP数据包是广播包(目标地址是ff:ff:ff:ff:ff:ff:ff)只有广播域内的终端可以收到;ICMP则是单播(有明确目标地址)包只有处于冲突域中才可能收到数据包。集线器互联起来的机器都属于同一个广播域也属于同一个冲突域,所以无论是什么样的数据包,网络中的每个节点都会收到(即便数据包和自己无关)。

集线器和每个终端都有一个物理链路,当PC1发送数据到PC2的时候首先到达集线器,而集线器则把数据 从自己的每个端口发送出去 。所以 即便这次通讯和PC3没有任何关系但是Hub1到PC3之间的链路还是被占用了 ,如果此时PC3也有数据包要发送那么就会产生冲突(还记得以太网的原理吗?共享介质中会有“碰撞”),而这种冲突对于PC3来说是非常“无辜”的(PC1和PC2通讯和PC3根本没有任何关系)。

交换机

有些交换机的样子和集线器长的很像,但是二者有本质的区别。 交换机转发数据的时候有一定的策略,它是依据mac地址表执行的转发 。

程序员学网络之集线器和交换机

打开Swtich和PC3之间开启抓包,在Swtich和PC2之间开启抓包,然后从PC1 ping PC2(Wireshark会抓到交换机上的STP数据包,这是交换机产生的数据包,可以忽略)。


  1. SW1<->PC3  
  2. SW1<->PC2 

交换机非常“智能”,它“知道”PC1和PC2通讯不涉及到PC3所以只有广播包转发到PC3,而后续的单播数据包是直接发送到PC2所处的端口的。 区别于集线器,分割了冲突域,把一个大冲突域分割成了3个小冲突域(分别是Swtich和PC1、Swtich和PC2、Swtich和PC3),每个冲突域通讯的时候都不会影响另一个冲突域的终端(Swtich和PC1之间的数据包在PC2、PC3上都接收不到);而广播域没有变化三个终端还是属于同一个广播域。 通过描述PC1和PC2的通讯过程来揭示交换机的工作原理:

  • PC1根据PC2的IP地址查询去本地的ARP表中查询对应的MAC地址;
  • PC1没有找到MAC地址,则发送一条广播包;
  • 广播包达到交换机,交换机把PC1的Mac地址和对应端口放入到MAC地址表;

程序员学网络之集线器和交换机

交换机判断是广播包,则发起一次泛洪(从所有和PC1相同VLAN的端口发送出去);

  • 广播数据包分别送到PC2和PC3。PC3发现和自己没关系直接丢弃;PC2发现是发送给自己的数据包则接收数据包,进一步判断是ARP数据包则返回一个ARP回复。PC2的ARP回复是一个单播数据包,目标地址是PC1的MAC地址,源地址是PC2的MAC地址。
  • PC2的ARP回复数据包达到交换机,交换机把PC2的MAC地址放入到MAC地址表;

程序员学网络之集线器和交换机

  • 交换机发现是单播包,目标地址是“00:50:79:66:68:01”,查询得到对应端口是E0/1。则从E0/1把数据包发送出去;
  • PC1收到PC2的ARP回复数据包,把PC2的MAC地址写入到**本地的ARP表**;
  • PC1发送ICMP数据包,根据IP地址查询MAC地址;找到PC2的MAC地址是“00:50:79:66:68:02”。发送单播包,目标地址是“00:50:79:66:68:02”;
  • 单播数据包达到交换机,交换机判断“00:50:79:66:68:02”在端口E0/2,则从E0/2端口发送出去;
  • PC2收到ICMP数据包,产生一条ICMP的回复数据包发送出去;
  • ICMP回复数据包达到交换机,交换机判断目标地址是“00:50:79:66:68:01”(PC1)则从E0/1发送出去;
  • PC1收到ICMP的回复数据包,显示一条 “84 bytes from 192.168.10.12 icmp_seq=1 ttl=64 time=0.649 ms”提示;

通过分析我们看出交换机中最重要的内容就是MAC地址表,它是交换机转发数据包的依据。有了这张表交换机就可以知道数据包应该从哪个端口出去,而不是像Hub一样从所有端口发送出去。 通过分析不难看出和Hub比较交换机中最重要的内容就是 MAC地址表,它是交换机转发数据包的依据 。有了这张表交换机就可以知道数据包应该从哪个端口出去,而不是像Hub一样从所有端口发送出去。 通过在交换机的CLI界面中输入 show mac address-table 查看本台交换机的MAC地址表

程序员学网络之集线器和交换机

交换机中为了读取速度会把MAC地址表保存在一种专用的存储硬件上叫:CAM (Content Addressable Memory) ,这种存储器区别于常见的内存,它的寻址方式是基于“内容”(内存是基于地址)。所以制作工艺上要复杂很多,价格也要贵很多,一般交换机配置的容量都不是特别大。交换机的这个“弱点”导致了一种“无解”的攻击方法——通过向交换机发送大量的ARP信息塞满CAM,让交换机无法正常工作。

虚拟局域网

交换机把以太网的冲突域切分成多个冲突域,提高了线路的利用率,但是所有人还是在同一个广播域,这种网络结构是早期的网络结构,它只有一个广播域,当网络中任何一个终端发送广播数据包其他节点都可以收到,因此而得名平面型网络。这种网络结构会产生如下问题: 1. 安全问题,大家都在同一个广播域任何一个人中了病毒都会影响所有人;更要命的是如果有人非法接入到网络中可以轻而易举的监听到网络中所有的数据包; 2. 带宽利用问题,网络中任何人都可能消耗大量带宽,其他人可能会因此而受到影响——甚至无法正常使用网络; 3. 广播风暴,试想一个上百台终端接入到网络中,各种广播数据包(ARP、DHCP等)会充斥在整个网络中; 把一个大的LAN(广播域)拆分成多个小的LAN不但安全、便于管理而且可以均衡资源利用、提高线路利用率。那么如何拆分呢?划分方法还是体现在交换机上,我们为每个交换机端口设置一个数字标识,相同数字标识的端口属于同一个广播域。比如下图中交换机E0/1、E0/2、E0/4、E0/7有相同的标识100;E0/3、E0/6相同的标识300(下图是交换机的示意图)

程序员学网络之集线器和交换机

这种技术就叫——虚拟局域网(Virtual Local Area Network,VLAN),一个VLAN就代表一个广播域(Broadcast Domain,BD),每个交换机端口都可以设置一个VLAN ID标识广播域,交换机在相同VLAN ID内执行广播数据包叫 泛洪 。

通过在交换机的CLI界面中输入 show vlan 查看本台交换机的所有VLAN(或者叫广播域、BD、在OpenStack之类的系统中叫网络)

程序员学网络之集线器和交换机

第一列VLAN表示VLAN ID,它是一个数字,name是一个备注名,ports表示当前有哪些端口属于这个VLAN

我们做个试验,把PC1和PC2放到VLAN 100,把PC3放到VLAN 200

程序员学网络之集线器和交换机

此时,通过PC1 ping PC2是正常,PC1 ping PC3则失败。

程序员学网络之集线器和交换机

通过在SW1<->PC3之间抓包我们发现ARP数据包根本没有抵达这条链路上,说明SW1已经识别出它们属于不同的VLAN(广播域)所以不会把数据包转发到这条链路上。

为了证明交换机转发只和MAC地址有关系,我们把PC3的IP地址修改成192.168.10.10

程序员学网络之集线器和交换机

发现PC1<->PC2依旧可以正常通讯,证明交换机只查看数据包的MAC地址而完全无视IP地址。

那么如何实现不同的VLAN之间通讯呢?这就需要另一个网络设备——路由器。这是一个非常复杂的课题,可以说它是构建互联网的基础,所以我们需要花费单独的章节讲解。


本文作者:佚名

来源:51CTO

上一篇:类与对象的案例实战案例解析 | Python从入门到精通:高阶篇之二十五


下一篇:DL:深度学习算法(神经网络模型集合)概览之《THE NEURAL NETWORK ZOO》的中文解释和感悟(九)