若是你有几台计算机,那如何把这几台计算机链接起来?你可能会说,用一台路由器就行了。那若是没有路由器呢?nginx
这里由下往上来讲说网络沟通的每一层。算法
使用路由器,是在第三层上。咱们先从第一层物理层开始说。
物理层能干什么?不少人大概知道,通常的网线直接连到两台电脑的网口上,并不能直接通信的。电脑连网口与电脑连电脑的线的接线是不一样的。
普通的网线这样是通不了的,因此水晶头要作交叉线,用的就是所谓的1-三、2-6 交叉接法。缓存
水晶头的第 一、2 和第 三、6 脚,它们分别起着收、发信号的做用。将一端的 1 号和 3 号线、2 号和 6 号线互换一下位置,就可以在物理层实现一端发送的信号,另外一端能收到。
固然电脑连电脑,除了网线要交叉,还须要配置这两台电脑的 IP 地址、子网掩码和默认网关。要想两台电脑可以通讯,这三项必须配置成为一个网络,能够一个是 192.168.0.1/24,另外一个是 192.168.0.2/24,不然是不通的。网络
即便是电脑直接链接的方式,数据的发送也是须要包含 MAC 层的,要完整。IP 层要封装了 MAC 层才能将包放入物理层。 到此为止,两台电脑已经构成了一个最小的局域网,也即LAN。学习
这只是两台电脑,那若是有三台电脑呢?要怎么链接到一块儿?计算机网络
先不讨论交换机。有一个叫做Hub的东西,也就是集线器。这种设备有多个口,能够将宿舍里的多台电脑链接起来。可是,和交换机不一样,集线器没有大脑,它彻底在物理层工做。它会将本身收到的每个字节,都复制到其余端口上去。这是第一层物理层联通的方案。blog
Hub 采起的是广播的模式。这就须要解决几个问题:接口
这几个问题,都是第二层,数据链路层,也即 MAC 层要解决的问题。MAC的全称是Medium Access Control,即媒体访问控制。控制什么呢?其实就是控制在往媒体上发数据的时候,谁先发、谁后发的问题。防止发生混乱。这解决的是第二个问题。这个问题中的规则,学名叫多路访问。有不少算法能够解决这个问题。就像车管所管束马路上跑的车,能想的办法都想过了。路由
好比接下来这三种方式:效率
方式一:分多个车道。每一个车一个车道,你走你的,我走个人。这在计算机网络里叫做信道划分;
方式二:今天单号出行,明天双号出行,轮着来。这在计算机网络里叫做轮流协议;
方式三:无论三七二十一,有事儿先出门,发现特堵,就回去。错太高峰再出。咱们叫做随机接入协议。著名的以太网,用的就是这个方式。
解决了第二个问题,就是解决了媒体接入控制的问题,MAC 的问题也就解决好了。这和 MAC 地址没什么关系。
接下来要解决第一个问题:发给谁,谁接收?这里用到一个物理地址,叫做链路层地址。可是由于第二层主要解决媒体接入控制的问题,因此它常被称为MAC 地址。
解决第一个问题就牵扯到第二层的网络包格式。对于以太网,第二层的最开始,就是目标的 MAC 地址和源的 MAC 地址。
接下来是类型,大部分的类型是 IP 数据包,而后 IP 里面包含 TCP、UDP,以及 HTTP 等,这都是里层封装的事情。
有了这个目标 MAC 地址,数据包在链路上广播,MAC 的网卡才能发现,这个包是给它的。MAC 的网卡把包收进来,而后打开 IP 包,发现 IP 地址也是本身的,再打开 TCP 包,发现端口是本身,也就是 80,而 nginx 就是监听 80。
因而将请求提交给 nginx,nginx 返回一个网页。而后将网页须要发回请求的机器。而后层层封装,最后到 MAC 层。由于来的时候有源 MAC 地址,返回的时候,源 MAC 就变成了目标 MAC,再返给请求的机器。
对于以太网,第二层的最后面是CRC,也就是循环冗余检测。经过 XOR 异或的算法,来计算整个包是否在发送的过程当中出现了错误,主要解决第三个问题。
这里还有一个没有解决的问题,当源机器知道目标机器的时候,能够将目标地址放入包里面,若是不知道呢?一个广播的网络里面接入了 N 台机器,我怎么知道每一个 MAC 地址是谁呢?这就是ARP 协议,也就是已知 IP 地址,求 MAC 地址的协议。
在一个局域网里面,当知道了 IP 地址,不知道 MAC 怎么办呢?靠“吼”。
广而告之,发送一个广播包,谁是这个 IP 谁来回答。具体询问和回答的报文就像下面这样:
为了不每次都用 ARP 请求,机器本地也会进行 ARP 缓存。固然机器会不断地上线下线,IP 也可能会变,因此 ARP 的 MAC 地址缓存过一段时间就会过时。
至此,一个局域网就组建起来了。
这种组网的方法,机器少的话还能够,机器数量一旦增多,问题就出现了。由于 Hub 是广播的,无论某个接口是否须要,全部的数据包都会被发送出去,而后让主机来判断是否是须要。一旦数据量激增,出现差错的几率就会大增。那么若是把目标 MAC 地址与链接端口关联起来,就能提升效率了。
谁能知道目标 MAC 地址是否就是链接某个口的电脑的 MAC 地址呢?这就须要一个能把 MAC 头拿下来,检查一下目标 MAC 地址,而后根据策略转发的设备,按第二节课中讲过的,这个设备显然是个二层设备,这个就是交换机。
一台 MAC1 电脑将一个包发送给另外一台 MAC2 电脑,当这个包到达交换机的时候,一开始交换机也不知道 MAC2 的电脑在哪一个口,因此没办法,它只能将包转发给除了来的那个口以外的其余全部的口。可是,这个时候,交换机会干一件很是聪明的事情,就是交换机会记住,MAC1 是来自一个明确的口。之后有包的目的地址是 MAC1 的,直接发送到这个口就能够了。
当交换机做为一个关卡同样,过了一段时间以后,就有了整个网络的一个结构了,这个时候,基本上不用广播了,所有能够准确转发。固然,每一个机器的 IP 地址会变,所在的口也会变,于是交换机上的学习的结果,咱们称为转发表,是有一个过时时间的。
有了交换机,通常来讲,你接个几十台、上百台机器进行沟通,应该没啥问题。