在操作系统中,进程之间的通信是用ipc(内存基本通信)以及内存共享shm来实现本地的通信,那么如果跨主机间通信或者说是不同之间的主机用rpc(远程过程调用)以及socket套接字,用一个主机在socket中写数据,另一个主机在socket之间读数据,以实现进程通信的最终目的。
在网络功能出现之前,基本都是用电话线来通信,发送数据基本都是靠着那根线,要是先坏了可能就无法发送数据,所以美国的军方就有那么一种设想,如果未来世纪大战时,我的数据的发送不要靠着一条线,或者如果说这个线路断了,那么数据自动判断走另一条线路,最后输出到目的地。
计算机之间的通信数据是流式数据,所谓流式数据是指,在我的本地计算机中的文件抽成一条一条的丝通过介质的传输输送到对方的目标主机上,目标主机自动将这些流式数据拼凑起来再由计算机内部转化成我们人类看得语言。
我们现在使用的主要还是以以太网为主,是施乐公司的Park实验室发明了,并无偿给了全人类。
两台计算机彼此之间连接起来,这种连接是靠借助于某种介质(分为有线和无线),无论是用哪一个到另一端都要转换成电磁信号,彼此协商多长时间为一个信号,这种商定称之为协议。
主机A发送给主机B,主机A在比之前的网络发送信号时,把信号广播出去,C、D看到不是他们的信号就不理了,但是B看见了会返回数据发送给A,主机A发送的信息首部叫报头,真正的信息在报文的后面,B数据返回给A之后,获得了B的地址A就可以直接通信,再也不用广播寻找B,不过要是找C主机的话,就得重新发一次广播了。
我们有多种的线路拓扑图,有总线型、星型、环形等
以上可以用总线型来实现网络之间的通信,但是有个问题,就是都是在同一链路上,如果A要想给B主机发数据,C和D想通信的话肯定会造成冲突,为什么?因为都在一个线路上,而造成线路冲突的地方我们也叫它为冲突域,所以我们就得搞一个线路仲裁机制,要实现线路仲裁,就先标识主机,标识主机的机制叫MAC,我们称为硬件MAC地址,这种地址是唯一性的,并且不可更改,但是问题依然没有解决,就是A和B发数据被别人用了怎么办?
CSMA/CD(载波监听,多路访问/冲突检测),主要A要发信号时先探测一下这个线路是否有忙,如果不忙的话立即向外发送信号,且边发边听,过程中有冲突的话,则立即停止,等待一段时间后再次探测,如果A、C探测没有都发出去冲突了,都会等待一段时间延迟随机再次发送,过一段时间,A再次探测,如果其它主机没有占用的话,就边发边监听,因为发报文还是有冲突,有冲突的话,就会往后退,过一会再次探测,使用这种机制的通常为以太网。
还有一种线路仲裁,就是以环形为主。
这种线路仲裁就是形成(环形)环状结构,在线路中会有一个令牌环,如果没有主机发送数据的话,这个令牌环就会在这些主机上游走,那个主机想要发数据就会把那个令牌环拿过来,用完之后释放出来让令牌环继续在线路上游走,注意:只有持有令牌环的主机才能外网发送信号。
另一种是星型,它使用的是在一个中心设备上有很多的接口,每个接口连接一台主机,早期用的HUB接入的时候非常简单,因为里面还是一根线,和总线型差不多。
但如果接入的设备越来越多,说明冲突也会越来越多,搞得谁发就冲突,谁也干不成,还有就是线路过长就会失去作用,因为传输的信号总归来说是有限的,当完成到已经让接收方无法识别的时候,这个信号意味着就失去作用了,如果这样的话,可以使用中继器,把传输信号放大,向目标进行传输,存放传输的主机过多,可以用CSMA/CD,但是巨多的话,则冲突也会巨多,我们要找一个隔离设备,比如A和C在同一范围内,B和D在另一范围内,A向C主机发送信号时,这个设备不会转到主机B,同样也是如此,但如果A和B通信时,则就把信号转发给另一个范围到主机B中,这个设备就叫做网桥。
在网桥内有一张表,里面记录了主机和接口,那如何获得的呢?网桥会广播到各个主机来获取MAC地址,具有自动学习的一个能力,当A发送到C主机时,网桥不知道C在哪儿,但知道A在那个接口上,C接收看到,回应这个报文的时候,C的源、目标地址也有了,这时候网桥也记录了C的源地址。
如果这个网桥上有很多接口,而每个接口只能接一台主机,这个网桥内部是一个交叉网络,找个空闲的线路,所以A和B能通信,C和D也能通信,而且工作在全双工的模式下,整个网络可以有效的利用起来,而这个设备就是交换机,表里面的数据也是定时清理的,如果还有冲突,就切成更小的范围,但这种平面地址也是有限的,平面地址叫物理地址,当A要想从交换机以外的设备通信的话,就将要靠逻辑上的地址进行通信,这个逻辑就叫IP地址,当一个主机交换机通信能够通过中间的那个设备,所以中间那个设备是标记网络不同的设备,中间设备看的是逻辑地址是什么,用IP地址来标记网络,用1.0可以为一个范围,2.0为一个范围,转发不同的网络通过这个设备来转发,这个接口叫做网关,而在不同网络之间可以转发数据的设备叫路由器,整个就是把交换网络的报文接下来转到另一个交换网络(中间设计到MAC的转换)只要不在同一网络需要转发出去到另一个网络中,而这种转发就需要借助于路由器,每一个PC上都有一个默认网关,而这个网关就是路由器的IP地址,对于路由器的另一端接口也是PC网关的转发非本地网络通信,如果本地通信则不需要网关,相同的网用网卡上和IP通信,IP可以转为MAC地址。所以报文在前端中有源IP、目标IP、源mac、目标mac。
原创文章,作者:刘 祥宇,如若转载,请注明出处:http://www.178linux.com/60553