标签:linux 网络
从几张图来看网络的发展
由于A,B,C,D四个主机,共用一个信道,导致如果A与B进行通信,就会占用I信道,使得其他主机无法通信。为了解决这个问题,出现了网桥。 网桥,顾名思义,就是连接2个网络的一座桥。显然,通过网桥实现分而治之,A与B通信不会影响C与D通信;早期,网桥上只有2个接口,后来发展为多个接口。 具有多个接口的网桥,即为交换机。这样的话,主机实际上只与交换机上的接口冲突,也就是说,A发信号给B的同时,B无法发送信号。实际上,就是半双工状态;如果给主机2个接口同交换机相连,一个用于发,一个用于收,于是,就实现了全双工。如果A发信号给B,交换机接到后,会进行广播,试想下,如果交换机上的主机很多的话,那么这样的广播将相当浪费资源。 引入路由器,将本地通信隔离开。使用多个交换机,并由路由器进行连接。路由器就是用于连接不同网络的。路由器上的接口R1,R2就是网关,比如R1这个网关同A,B,C,D在同一网络,R2这个网关同E,F在同一个网络。 |
2.通信过程分析
对于图4进行分析。 如果是本地网络通信,比如A和B进行通信的话。 假设A的逻辑地址为1.1,B的逻辑地址为1.2,A要发信号给B,但是A并不知道B的物理地址,也即是MAC-B。于是,A发起一个广播信号寻找B,B收到信号后,告诉A自己的MAC地址。于是A知道了B的物理地址。可以发现,其实广播的过程,就是实现了逻辑地址到物理地址的转换。对于本地通信,路由器会进行隔离,E,F并不会收到广播信号。 如果是跨网络通信,比如A与E进行通信的话。 假设A的逻辑地址为1.1,E的逻辑地址为2.1,A要发信号给E。首先,直观上,我们可以知道A,E并不处于同一个网络,即不是本地网络通信。 第一,那么计算机是如何知道并识别它们不是一个网络的呢? 第二,跨网络,路由器如何进行路由转发? 第三,消息如果最后送达E,那么E上的哪个应用程序进行处理? 其实是这样的: 第一,逻辑地址,应该分为2段,分别标示网络段和主机段。【逻辑地址,说白了,就是IP】 第二,子网掩码用于取得逻辑地址的网络段。 【将IP与子网掩码按位相与即可】 打个比方: A的逻辑地址为 0000 0001 . 0000 0001 和子网掩码 相与 1111 1111 . 0000 0000 【注意1与任何相与,是本身;0与任何相与是0】 通过计算就是可以得到网络段部分了。 第三,路由器中,不论是动态学习也好,还是手动维护也好,里面都有一张路由表: 网络段 转发接口 x.y.z.w R1 A.B.C.D R2 ...... 类似的,交换机中,也应该存在一张MAC表: 主机 MAC地址 A MAC-A B MAC-B ...... 第三,总而言之,可以这样说,IP实现了主机到主机的通信,MAC实现了本地网络通信,端口则实现了同一主机上的不同进程的通信。 |
本文出自 “我想超越自我” 博客,请务必保留此出处http://zhangfengzhe.blog.51cto.com/8855103/1438163
标签:linux 网络
原文地址:http://zhangfengzhe.blog.51cto.com/8855103/1438163