在这里随手记录一些计网知识,以便日后形成体系
源起
两台计算机需要完成通信,最简单的方式是什么?
就是通过高低电平来发送类似于0/1的信号。但这样的话,实现点对点通信就需要每两台设备都需要建立链路。显然太多了!!!
那么,能不能简化一下呢?比如通过转发的机制来减少链路。貌似是可行的。
而对于转发来说,还需要对每一台设备进行标识,表明身份才能准确的发送信息。
于是便产生了两个重要的思想:转发和标识。
物理层(集线器HUB)
基于转发的思想,发展出一种专注于转发信号的设备——集线器(HUB)。他的原理非常简单,就是作为中间人,将一个设备发送来的数据通过广播的方式扩散出去。
他的转发方式非常朴素暴力,一个设备发来的数据会被它广播道所有设备中。
如此便产生了问题:如果两个设备只想进行点对点的通信怎么办呢?它的解决方式是增加标识。给数据包打上标识,比如设备1要发给设备4,集线器进行广播后,虽然设备2,3,4,5都收到了,但是只有对应标识的设备会接收这个数据,其他设备会直接将其丢弃。
还有一个问题:由于集线器采用的是简单的双绞线,如果有多个设备要发送信息,就会造成信号的杂糅,导致其他设备接收到的信号是混合而成的。针对这个问题,提出了一个协议:CSMA/CD,这一协议实现了载波监听,查看链路上有没有正在发送的数据,如果没有再进行发送,避免冲突。
这便是最早的网络设计模式,但他依旧存在着两个不可避免地问题:其一是带宽利用率低,使用中心辐射型拓扑结构,广播流量可能会在网络中不断复制和传播,浪费带宽。其二是链路利用率低,一条链路上只能有一个设备发送信息。
受限于以上缺点,集线器只适用于小规模网络。
数据链路层(交换机)
交换机与集线器很类似,但又很不一样。
最明显的区别就在于标识。集线器实际上没有对设备进行标识,而是让设备自行判断,而交换机形成了设备物理地址和端口的映射。每一台设备拥有物理地址(MAC地址,48比特),相当于他的身份证,一出厂就被写死,基本可以看作是固定的。而交换机中存储了一张表(不是路由表!!)用于记录mac地址和端口的关系。
同时交换机还实现了全双工,也就是可以同时进行发送和接收。
交换机是如何产生这张关键的表的呢?
一开始,表是空白的,当设备A接入后,交换机就自动写入设备A的mac和对应端口。当设备A需要发送数据给设备B,交换机依旧采用广播的方式,得到设备B的回应后,就再写入B的信息,以此类推...当这张表建立后,就能实现更高效率的点对点通信了!
然而,这张表的大小是有限的(家庭交换机一般是几千),因此,交换机一般适用于局域网级别的网络。
网络层(路由器)
路由器实现了两个网络的连接,相当于合成一个大网。
引入了IP地址,IP地址有别于mac地址,它能够标识网络和设备。192.168.0.15和192.168.0.102就同属于一个网络,而IP地址后面的掩码(比如192.168.0.0/24)则表示固定网段(IP地址共32位,24表示固定前24位)。
两个不同网段的设备想要通信,都需要经过路由器。
需要注意的是,IP地址即使是在网络内也不能直接通信,而是需要通过ARP协议查到MAC地址,在MAC层面进行通信。通信过程中,IP的源地址,目标地址不变,MAC的源地址,目标地址随着发送和接收方产生变化。
一个数据包通常长这样(含数据头和数据):