从网络实现实现层面网络可以划分为以太网、令牌环、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地址
| 计算机 | IP地址 |
|---|---|
| PC1 | 192.168.10.11 |
| PC2 | 192.168.10.12 |
| PC2 | 192.168.10.13 |
集线器和每个终端都有一个物理链路,当PC1发送数据到PC2的时候首先到达集线器,而集线器则把数据从自己的每个端口发送出去。所以即便这次通讯和PC3没有任何关系但是Hub1到PC3之间的链路还是被占用了,如果此时PC3也有数据包要发送那么就会产生冲突(还记得以太网的原理吗?共享介质中会有“碰撞”),而这种冲突对于PC3来说是非常“无辜”的(PC1和PC2通讯和PC3根本没有任何关系)。
交换机
有些交换机的样子和集线器长的很像,但是二者有本质的区别。交换机转发数据的时候有一定的策略,它是依据mac地址表执行的转发。
SW1<->PC3
-
PC1没有找到MAC地址,则发送一条广播包;
-
广播包达到交换机,交换机把PC1的Mac地址和对应端口放入到MAC地址表;
| MAC地址 | 对应端口 |
|---|---|
| 00:50:79:66:68:01(PC1) | E0/1 |
-
交换机判断是广播包,则发起一次泛洪(从所有和PC1相同VLAN的端口发送出去);
-
广播数据包分别送到PC2和PC3。PC3发现和自己没关系直接丢弃;PC2发现是发送给自己的数据包则接收数据包,进一步判断是ARP数据包则返回一个ARP回复。PC2的ARP回复是一个单播数据包,目标地址是PC1的MAC地址,源地址是PC2的MAC地址。
-
PC2的ARP回复数据包达到交换机,交换机把PC2的MAC地址放入到MAC地址表;
| MAC地址 | 对应端口 |
|---|---|
| 00:50:79:66:68:01(PC1) | E0/1 |
| 00:50:79:66:68:02(PC2) | E0/2 |
-
交换机发现是单播包,目标地址是“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地址表
虚拟局域网
交换机把以太网的冲突域切分成多个冲突域,提高了线路的利用率,但是所有人还是在同一个广播域,这种网络结构是早期的网络结构,它只有一个广播域,当网络中任何一个终端发送广播数据包其他节点都可以收到,因此而得名平面型网络。这种网络结构会产生如下问题: 1. 安全问题,大家都在同一个广播域任何一个人中了病毒都会影响所有人;更要命的是如果有人非法接入到网络中可以轻而易举的监听到网络中所有的数据包;2. 带宽利用问题,网络中任何人都可能消耗大量带宽,其他人可能会因此而受到影响——甚至无法正常使用网络; 3. 广播风暴,试想一个上百台终端接入到网络中,各种广播数据包(ARP、DHCP等)会充斥在整个网络中;把一个大的LAN(广播域)拆分成多个小的LAN不但安全、便于管理而且可以均衡资源利用、提高线路利用率。那么如何拆分呢?划分方法还是体现在交换机上,我们为每个交换机端口设置一个数字标识,相同数字标识的端口属于同一个广播域。比如下图中交换机E0/1、E0/2、E0/4、E0/7有相同的标识100;E0/3、E0/6相同的标识300(下图是交换机的示意图)
show vlan查看本台交换机的所有VLAN(或者叫广播域、BD、在OpenStack之类的系统中叫网络)
此时,通过PC1 ping PC2是正常,PC1 ping PC3则失败。
那么如何实现不同的VLAN之间通讯呢?这就需要另一个网络设备——路由器。这是一个非常复杂的课题,可以说它是构建互联网的基础,所以我们需要花费单独的章节讲解。
欢迎关注公众账号了解更多信息“写程序的康德——思考、批判、理性”
iOS读者戳我