协议可以理解为计算机直接一种统一沟通的模版,例如英文讲一句话,先主词、动词再来受词。目前常见的协议有OSI七层和TCP/IP五层,当两个主机在互相沟通时,socket(Linux系统的网络API) 会在核心态(kernel space) 层层编码成比特流,透过网络媒介(网络线、光纤等) 传输信号到目的地主机,目的地主机再对比特流进行解码。本专栏将着重在简单好理解的TCP/IP五层。
物理层
物理层的目的就是让数据报能高效且准确的传输到目的地主机,这里就要说起信道,上一篇提到过信道的利用率,但至于信道更详细的介绍就没有提到,现在就来仔细看看。按照传输媒介可以分为三类:
有线信道:有线信道以导线为传输媒质,信号沿导线进行传输,信号的能量集中在导线附近,因此传输效率高,但是部署不够灵活。这一类信道使用的传输媒质包括用电线传输电信号的架空明线、电话线、双绞线、对称电缆和同轴电缆等等,还有传输经过调制的光脉冲信号的光导纤维。
无线信道:无线信道主要有以辐射无线电波为传输方式的无线电信道和在水下传播声波的水声信道等。无线电信号由发射机的天线辐射到整个自由空间上进行传播。不同频段的无线电波有不同的传播方式。
信道复用
当没有数据进行传输的时候,信道是十分空闲的。但是在网络数据请求量大的时候,比如抢演唱会的门票,信息的传播速度就很卡。那什么是信道的复用,复用就是重复使用的意思。信道的复用可以分为以下几个方面:
时分复用:所谓的时分复用,就是把做整个信道分为不同的时间。当采用时分复用时,所有用户在不同的时间占用同样的频带宽度(分时不分频)。时分复用可能会造成线路资源的浪费
频分复用:频分复用就是把信号分成不同的频率,当采用频分复用技术时,所有用户在同样的时间占用不同的带宽资源。当采用频分复用技术时,所有用户在同样的时间占用不同的带宽资源。
统计时分复用:所谓的统计时分复用系统,我们也可以称为异步的时分复用系统。它有一个类似缓冲的机制,当数据到达一定量的时候,才会转发,这大大提高了信道的利用率。
物理层虽然能帮主机将帧送到另一端,但不保证帧在传输过程中的正确性,下一层 - 数据链路层将会解决这个问题。
数据链路层
其实主机之间传送数据报到目的地靠的是MAC地址而不是IP地址,MAC地址就像「人」,IP地址像「住址」,人(电脑)是会移动的,而住址(IP地址)不会。数据链路层让数据报根据MAC地址「可靠的」发派到目的地主机。其中帧编码和误差纠正控制是主要目的。
下图为数据链路层帧的结构
其中目的地地址和源地址为MAC地址,类型有多种,常见的为0x0800,代表以太网的帧,最后的CRC则是用作误差纠正控制的纠错码
帧编码
当数据报编码传到这一层的时候,要将数据报(帧)编码成比特流。
误差纠正控制
现实的通信链路都不会是理想的。这就是说,比特在传输的过程中可能会产生差错:1可能会变成0,0可能会变成1,这就叫做比特差错。帧在传播的过程中会产生差错,差错的产生是不可避免的。数据链路层的误差纠正控制的目的是做到"无比特差错",即弥补帧丢失、帧重复、帧失序,这里用到的误差纠正控制是CRC循环冗余校验,有兴趣的读者可以自行研究算法。
相关的硬件
适配器(网卡)
适配器无非就是转换的作用,或者作为一个载体,实现能量的转移,数据在外部媒介中的传输方式是串行传输,然而计算机处理内部指令的时候,用的是并行的方式。怎样把串行传输的数据转换成并行传输呢?这就是适配器的主要目的。
交换机
交换机是一种多端口的网桥。数据链路层使用MAC地址转发数据,而交换机内部实际存储以一张表,叫做CAM表。这张表记录了主机的MAC地址以及对应的接口,如下所示:
那CAM表如何做更新呢?如果交换机没有发送方的mac地址,那他会直接记录,如果没有接收方的mac地址(也是常见的情况),则会做广播,看哪台主机接收就记录进去CAM表。
下一篇继续探讨网络层、传输层和应用层。