0%

《计算机网络》计算机网络原理

网络体系结构的数据通信原理

TCP/IP 4层体系结构中,将物理层和数据链路层合并为物理层,会话层、表示层、应用层合并为应用层

各层数据封装

物理层

物理层的主要任务是定义与传输介质、连接器及其接口相关的

  1. 机械特性
  2. 电气特性
  3. 功能特性
  4. 规程(也就是我们通常所说的“协议”),比如串行接口标准等等

数据:

  1. 模拟数据,连续的线数据。如我们打电话时的通话语音,声音使线圈震动,通过电磁感应,声音转换成电压持续变化的电能,形成模拟数据
  2. 数字数据,离散的点数据。如我们存放在计算机中的所的文件、图片、图像和软件等

模拟数据转换为数字数据就是通过采样实现线变成无数的点,从而存储到计算机

信号有电信号、光信号、电磁波信号等等,用来承载数据

例如双绞线(网线)就是利用电信号传输数字数据,电话线利用电信号传输模拟数据

直流电

使用直流电是爱迪生推崇的用电方式,直流电的频率是0,电压恒定,电流不会改变方向

交流电

特斯拉推崇使用交流电,交流电的电压会正负变化,电流方向按照一定的频率改变

交流电比直流电更能电死人,更危险,但是交流电可以很方便的通过变压器(通过电磁感应实现,直流电不会产生磁通量变化量,无法实现电磁转换)改变电压以及电流的大小,从而让交流电的适用场景更多

比如在长距离电力输送中,在输送功率相同的情况下,会通过变压器提高电压,那么送电电流会减小,则消耗在线路上的能量(焦耳定律数学表达式:Q=I²Rt)也会随之降低,减少大量电能损耗以及对传输设备的损伤

交流电的频率就是指电压正负变化的频率或者电流转换方向的频率

在一定条件下,比如发动机,电流频率越高发动机的转速越高,产生的功率(用电器在1秒内所消耗的电能,功率=W/t,电功W为:W=UIt,功率=UI)越高

变频空调就是利用变频器,通过变换交流电的频率,来控制空调压缩机的输出功率,达到省点的目的

调制与解调

调制最通俗的解释就是用一种“能量大”的信号承载(可简单地理解为“背上”)另一种“能量小”的信号进行传播、传输

承载另一种信号的信号我们称为载波或者载波信号,而被承载信号才是我们真正要传播或者传输的信号

就像不会游泳的人坐在船上,由船渡我们过河一样,此时我们人就可以比做被承载信号,而船就可以比做载波信号

通常我们要发送的数字信号的频率是比较低的,如果按照本身的频率来传输,信号的衰减比较严重,不利于远距离传输

打个比方,如果我们要送一样物品(相当于这里所说的“调制信号”)到达某个比较远的地方,仅靠我们人力可能很困难,甚至根本无法达到目的(因为我们的速度很低,体力有限),但是如果我们使用像汽车、火车等这类交通工具来运输,就很轻松了,这时的交通工具就相当于我们这里所说的“载波”

使用载波传输,我们可以将数据的信号加载到载波的信号上,接收方按照载波的频率来接收数据信号。由于有用的数据源信号波的波幅与无用的载波信号波的波幅是不同的,通过进行波幅过滤就可以将数据源信号提取出,这就是解调

信道多路复用技术

计算机网络中的数据是在物理链路的各个信道中传输的(通常在一条物理链路上会有多条信道的)

默认情况下,一条信道只传输一路信号,这就有可能造成信道带宽资源的浪费,如在某路信号传输所需的带宽严重低于信道带宽时

就像一条大马路上的某条车道,因为该车道在划分时就考虑了大货车通过时对车道宽度的要求,所以车道比较宽,而且这条车道只允许一辆车通过

而事实上在这条马路上通过的绝大多数是小汽车,很少有大货车在这条车道中通过

如果仍按交通规则,一条车道只允许一路汽车通过的话,显然就会造成这条大车道利用率的下降

为了解决这个问题,交警可以在这条大车道上再划分成两条小车道,在没有大货车通过时允许两部小汽车在这两条小车道上同时通过,这就是频分复用

或者允许多辆车同时在车道中行驶通过,这就是时分复用

  • 频分复用(FDM,Frequency Division Multiplexing)就是将用于传输信道的总带宽划分成若干个子频带(或称子信道),每一个子信道传输1路信号。频分复用要求总频率宽度大于各个子信道频率之和,同时为了保证各子信道中所传输的信号互不干扰,应在各子信道之间设立隔离带,这样就保证了各路信号互不干扰(条件之一)。频分复用技术的特点是所有子信道传输的信号以并行的方式工作,每一路信号传输时可不考虑传输时延

  • 时分复用(TDM,Time Division Multiplexing)就是将提供给整个信道传输信息的时间划分成若干时间片(简称时隙),并将这些时隙分配给每一个信号源使用,每一路信号在自己的时隙内独占信道进行数据传输。时分复用技术的特点是时隙事先规划分配好且固定不变,所以有时也叫同步时分复用。其优点是时隙分配固定,便于调节控制,适于数字信息的传输;缺点是当某信号源没有数据传输时,它所对应的信道会出现空闲,而其他繁忙的信道无法占用这个空闲的信道,因此会降低线路的利用率。

常见设备

集线器、双绞线等等

数据链路层

要在一条通信线路上传送数据,除了必须建立一条物理线路(物理层的功能)之外,还必须有一些规程或协议来控制这些数据的传输,以保证被传输数据的正确性

实现这些规程或协议的硬件和软件加上物理线路就构成了本章要介绍的“数据链路层”(Data Link Layer,DLL)

物理层中也有许多规程或协议,但它们是用来构建物理传输线路、建立物理意义的网络通信,不是用来控制数据传输的

设计数据链路层的主要目的就是在原始的、有差错的物理传输线路的基础上,采取差错检测、差错控制与流量控制等方法,将有差错的物理线路改进成逻辑上无差错的数据链路,以便向它的上一层—网络层提供高质量的服务

就像我们修好了路,还得制定一些交通法规,使路上行驶的车辆必须按照一定的规则行驶,否则可能会经常出现交通事故

这些“交通法规”也为了使这些车辆到达某个车站(这里所说的“车站”就相当于计算机网络体系结构中的“网络层”)时能有序进、出站,最终使这条数据通信之“路”发挥它本来的作用。

数据链路层和它下面的物理层其实本质作用都是一样的,就是用来构建进行网络通信、访问的通道,只不过物理层构建的是一条物理通道,而数据链路层构建的是真正用于数据传输的逻辑通道

正因如此,在目前Internet中广泛使用的TCP/IP协议体系结构中,物理层和数据链路层是集中划分在网络访问层这一层之中的

物理链路是基础线路,相当于一条公路的路基,而逻辑链路是在物理链路之上的高级线路,可以理解为在公路上铺设了柏油或者水泥的车道

数据链路层就是对物理层的一个抽象层

由于物理层传输介质的多样性,通信规程也各不相同,性能不稳定,而数据链路层中构建的逻辑链路不考虑不同物理链路上传输介质及其通信规程上的区别(也就是我们通常所说的数据链路层可以屏蔽物理层中传输介质的不同),只是从逻辑意义上构建一条性能稳定、不受传输介质类型影响的逻辑数据传输通道

就像修建公路时,所用的材质也可能不一样,有的用普通的泥巴,有的用沙石,还有的用大石材

如果仅靠一些基础材料修建公路,可能修好的公路通车性能很差,有的甚至根本不能通车,只能步行

但如果我们在这些公路上再统一铺一层钢筋混凝土,那么这些由不同材料修建的公路就可能满足基本相同的通车性能的要求了

数据链路层的主要功能就是四个方面:

  1. 数据链路管理
  2. 封装成帧以及透明传输
  3. 差错控制
  4. 流量控制

差错控制

差错产生的原因主要是由于线路本身电气特性所产生的随机噪声(热噪声),信号振幅,频率和相位的衰减或畸变,电信号在传输介质上的反射回音效应,相邻线路的串扰,外界的电磁干扰和设备故障等因素造成的

总的控制方法

  1. 前向纠错。实时性好,单工通信采用。
  2. 自动重发请求(ARQ)。强调检错能力,不要求有纠错能力,双向通道采用。
  3. 混合纠错。上述两种方式的综合,但传输设备相对复杂。

流量控制

发送发给接受方发送数据,如果发送方每1秒发送100包,接收方只能1秒处理50包,会出现什么现象呢?

接收方会在缓存中大量缓存接受的包,直到缓存区满了

满了之后会怎么样?接着就会出现最不能容忍的情况,缓冲区溢出,也就是丢包的现象

所以接收方一定要在缓冲区快满的时候通知发送方让他降低发送速度,这就是链路层的流量控制

流量控制用于确保实体发送的数据不会覆盖接受实体已接收的数据

停-等流量控制

发送实体发送一个帧,接受实体接收处理完之后必须发回一个对于这个帧的确认表示自己同意接收下一个帧;

发送方收到这个确认之后,才能发送下一个帧。所谓停等,接收方能够简单的通过停止发送确认的方式来阻止数据流的发送

滑动窗流量控制

我们很自然的想到,既然任何时刻都只有一个发送效率很低,那么我们一次发送n个,然后等待一个确认,不就会让效率高了吗?

这个就是滑动窗口协议的思想,类似于HTTP2.0的多路复用,双向多车道

滑动窗口协议:利用窗口控制连续发送的数据量。注意:必须为每一个帧分配一个序号,接收端需要按照序号接收,进行校验是否出错。

CSMA(载波侦听多路访问)

在总线型局域网中,所有或者多个用户计算机连接在一条总线上,不同用户计算机间的通信肯定会存在介质争用现象(仅指在没采用信道复用情况下)

介质争用在不同的拓扑结构中有对应的解决办法,例如令牌环网络中使用令牌解决冲突

而CSMA(载波侦听多路访问)是一种能比较有效解决总线型网络中介质争用的技术

CSMA技术又称LBT(Listen Before Talk,先听后说),也就是先侦听要访问的介质,当发现介质忙时先避让一段时间,不发送数据,仅当侦听到介质空闲时才进行数据发送。

在这里涉及一个问题,就是在站点侦听到当前信道中有数据在传输时,要避让多长时间才再次侦听,这就是CSMA技术的退避算法

由于信道传播延时的存在,当通信双方的站点都没有侦听到载波信号,在发送数据时仍可能会发生冲突,因为他们可能会在检测到介质空闲时同时发送数据,致使冲突发生

所以出现了 CSMA 的改进版本 CSMA/CD

CSMA/CD(载波侦听多路访问/冲突检测)

CSMA/CD是标准以太网、快速以太网和千兆以太网中统一采用的介质争用处理协议(但在万兆以太网中,由于采用的是全双工通信,所以不再采用这一协议)。

CSMA/CD的最大亮点就是它在侦听到有冲突发生时(同时有多路数据发送时,信号强度肯定不一样),可以立即中止数据帧的发送,快速地终止被破坏的帧可以节省时间和带宽;

并且发送一个阻塞信号,以强化冲突,使其他站点更容易检测到有冲突的发生,不再同时发送数据了,可避免更多的帧发生冲突

冲突检测原理

  • 一开始(t = 0时),站点A在介质空闲时发送一个帧

  • 一段时间后,在站点A传输的数据帧还没到达站点B前,站点B也可能检测到介质为空闲的,于是也开始进行数据传输

  • 从A站点发送数据开始,过一段时间后(相当于站点A到达站点B的传播延时tp),站点B检测到了来自站点A的数据,检测到了发生了冲突,立即中止原来的数据传输,发送一个32位的阻塞信号帧。但是站点A此时仍还不知道站点B也在发送数据,仍不知道有冲突发生

  • 再过了相当于一个往返传播时间(也就是自站点A发送数据开始,过了两个传播延时2tp)后,从站点B发来的阻塞信号帧也到达了站点A,A也知道发生冲突了,停止数据发送。此时站点B会停止阻塞信号帧的发送,而站点A又会发送一个阻塞信号帧。最后,A和B都停止了数据发送,介质回归空闲状态

冲突避让原理

CSMA/CD除了可以检测到冲突的发生外,还可以在冲突发生时进行随机延迟,以尽量避免再次发生冲突。

这时会涉及一个避让延迟问题,也就是当检测到冲突时,到底要延迟多长时间再重传。

这就是CSMA/CD的截断二进制指数退避算法(truncated binary exponential backoff)。

在这种退避算法中,每次检测到冲突时避让(也就是名称中的“截断”含义,即停止发送数据)的时间是以时隙数为单位的随机时间,但不同次冲突时所能延迟的最大时隙数是不一样的,而且是呈指数关系递增的,所以才称之为二进制指数退避算法。

主要网络设备

网卡、网桥和二层交换机

网卡

也叫网络适配器

网卡是安装在计算机上,用来连接计算机网络的,是计算机网络中最基础的网络设备。目前在计算机局域网中,网卡类型总的来说主要可分为有线以太网卡、WLAN无线网卡两大类

有线网卡

我们通常所说的有线网卡通常就是指以太网卡,还有其他网络类型的网卡,如令牌环网卡、令牌总线网卡和FDDI网卡

WLAN无线网卡

网桥

网桥(Bridge)是早期的两端口二层网络设备,用来连接不同网段的计算机网络设备(如图5-34所示),同时它又可隔离冲突域,因为它的两个端口不是共享一条背板总线(分别有一条独立的交换信道),比当时的集线器(Hub)性能更好(集线器上各端口都是共享同一条背板总线的)

后来,网桥被具有更多端口、同时也可隔离冲突域的交换机(Switch)所取代。

无论是网桥,还是二层交换机,虽然每个端口可以连接一个网段,但是它们所连接的主机都在同一网络,或者同一子网中

如连接的主机位于不同办公室或者不同办公楼中,则可采用同一网络地址的两个或多个小LAN,以组成一个可以统一管理的大LAN。

但要注意的是,因为网桥只有两个端口,所以所连接的两个物理网段的主机通常就是由当时的集线器进行集中连接的(网桥端口通常不是直接连接主机的)。

软件中通常所说的桥接(如VMware中的桥接工作模式)也就是网桥的作用,它连接的也是同一网络或子网中的两个网段。

网桥涵盖了集线器的功能,但集线器只是物理层设备,不会也没有能力处理数据帧,不会识别MAC地址,所以只能以广播的方式转发数据,无法隔离冲突域,而网桥可以

  1. 当网桥收到集线器的广播帧后,网桥会把帧中的源MAC地址和目的MAC地址与网桥缓存中保存的MAC地址表进行比较。
  2. 最初,网桥的缓存中是没有任何MAC地址的,所以一开始它也不知道哪台主机在哪个物理网段上,收到的所有帧都直接以泛洪方式(也是复制原数据帧)转发到另一个端口上,同时会把数据帧中的源MAC地址所对应的物理网段记录下来(其实就是与对应的网桥端口对应起来)。
  3. 在数据帧被某个PC机接收后,也会把对应目的MAC地址所对应的物理网段记录在缓存中的MAC表中。这样,经过多次这样的记录,就可以在MAC地址表中把整个网络中各主机MAC地址与对应的物理网段全部记录下来。因为网桥的端口通常是连接集线器的,所以一个网桥端口会与多个主机MAC地址进行映射。
  4. 当网桥收到的数据帧中源MAC地址和目的MAC地址都在网桥MAC地址表中可以找到时,网桥会比较这两个MAC地址是否属于同一个物理网段。如果是同一物理网段,则网桥不会把该帧转发到下一个端口,直接丢弃,起到冲突域隔离作用。相反,如果两个MAC地址不在同一物理网段,则网桥会把从一个物理网段发来的帧转发到连接另一个物理网段上,然后再通过所连接的集线器进行复制方式的广播。

二层交换机

交换机是工作在OSI开放体系结构中的第二层,所以又称二层交换机

网桥是集线器的升级产品,在中继的功能下添加了冲突域隔离的功能

而二层交换机是网桥升级产品,网桥只有两个端口,而二层交换机有很多端口

网络层

如果我们把物理层和数据链路层比作市内交通,那么本章所要介绍的网络层就可以比作连接不同城市交通的中转车站、机场或码头。

就像中转车站、机场或码头可以把来自其他城市的旅客送到下一站或本市目的地一样,网络层可以把来自其他网络中的数据传送到下一个途经的网络或本网络中的目的节点。

当源端和目的端位于不同网络的时候,直接通信是不可行的,此时就需要由网络层解决。

网络通信只有两种情况:

  1. 如果通信双方在同一局域网内,可直接通过数据链路层进行相互通信,但因为主机其实也有网络层的路由功能,所以两台主机间进行网络通信时通常也是通过三层来进行的(如通过IP地址寻址);
  2. 如果通信双方在不同网络内,则要通过三层进行。

不同网络中的统一标识就是三层地址(如 IP地址),它不能识别二层的MAC地址,三层IP包封装成帧后,其中封装的源和目的IP地址作为帧的数据部分,不会改变。

这些信息就是用来进行三层寻址的,但这些信息在帧传输过程中是不会改变的。就像你要寄一件东西给一个你并不知道确切地址或联系方式的人,但你却知道对方的一个亲戚或朋友的地址或联系方式。

这时你就可以把东西寄给他的亲戚或朋友(这个亲戚或朋友的地址就相当于三层地址),然后再由亲戚或朋友转寄给他(真正收件人的地址就相当于二层地址)就可以了

各个局域网中中转数据的所有路由器组成的网络,其实也可以认为是个局域网,只不过这个局域网中的主机(路由器)除了转发什么都不做

由来

网络层是计算机网络发展的产物,但并不是有了计算机网络就有了它。

在早期的计算机网络中,基本上是以独立的局域网形式存在,而我们知道,在局域网内部完全可以通过由物理层和数据链路层共同构建的通信链路来实现各计算机用户之间的通信访问,所以也就无需其他层次,包括网络层。况且当时计算机网络的应用比较有限,各局域网之间也不存在相互通信的必要性,所以这些局域网也就无须相互连接。

但随着计算机网络的普及和发展,人们越来越发现,非常有必要把这些一个个孤立的局域网连接起来,组成一个更大的计算机网络,这样计算机网络的作用更能显现,可使更多人共享服务器和硬件资源。

这就涉及计算机网络间的互连问题了。

那为什么要这样一个网络层呢?

其实道理很简单,就是因为不同网络有不同的网络层协议和地址规范,一个网络中的用户若不能识别其他网络的通信协议和地址规范,就不能把数据从一个网络传送到另一个网络中。

就像不同城市有不同的交通法规,属于不同的交警系统管理,不允许外地车辆随便出入一样,不同网络也有不同的设计规范,属于不同的组织来管理,必须通过授权,并由专门的协议来负责网络间的通信。

分组交换技术

国内主机A给美国的主机B发消息,如果搭一根专线,那么他们就可以直接通信,根本无需网络层

但是这样的话成本太高了,世界上主机那么多,如果都搭专线,整个地球都会被缠住

所以出现了分组交换技术,将需要发送的数据分组发送,每个分组带有目标IP信息

IP协议是用于将多个分组交换网络连接起来的最典型通信协议

作用

屏蔽网络差异,提供透明传输

因为不同网络有不同的规范要求,就像不同城市有不同的交通规范一样。

网络层就是为了解决这种不同差异,寻找一个不同网络间能共同遵守的网络通信规范,以便不同网络间能相互识别,并接受对方的访问请求。

这样传输层就可以在不同网络间进行透明(也就是不管不同网络间的差异,就像通信双方是直接互连一样)数据传输了。

为网络间通信提供路由选择

路由选择又称路径选择,是根据一定的原则和路由选择算法在多个结点的通信子网中选择一条到达目的节点的最佳路径的过程。

确定路由选择的策略称为路由算法。

在无连接的数据报服务中,网络结点要为每个数据包做出路由选择,就像你到达另个一个城市时并不清楚该市的交通路线,所以只能在中转车站查看对应的交通线路来查找一个到达你要去的目的地的最佳线路;

而在面向连接的虚电路服务中,在建立连接时就已确定了路由路径,就像你坐专车直达目的地一样,根本无须选择旅行的路线。

传输层

TCP

UDP

应用层

例如HTTP协议,规定了如何实现网页访问

一次http请求的数据帧

wget baidu.com举例(使用TCP/IP四层协议解释,而不是七层)

假设:

  • 发出主机所在局域网的网关就是一台边缘路由器
  • 发出主机上有且仅有一张网卡
  • 发出主机 -> 边缘路由器 -> 核心路由器 -> baidu.com 主机的简单网络

发出主机构造数据帧

由软件构造出帧数据,使用系统调用,让操作系统交给网卡发送,网卡收到数据直接从网卡端口发出去

字段 内容
源MAC地址 发出主机的网卡的MAC地址
目标MAC地址 边缘路由器的MAC地址
源IP 发出主机的网卡的IP地址
目标IP baidu.com 的主机IP
源端口 wget监听的临时端口
目标端口 80

因为目标MAC地址是边缘路由器的MAC地址,所以不管网卡和边缘路由器之间是否有物理层设备比如交换机,数据都可以正常发送给边缘路由器

边缘路由器A接收到数据

路由器接收到数据后,读出网络层数据(路由器是网络层设备,可以处理物理层以及网络层的数据),根据目标IP地址以及路由器自身的路由表

选择下一跳路由器B也就是选择了下一跳路由器连接到本路由器的端口

本路由器会

  1. 分配一个逻辑端口并监听,并将这个逻辑端口与发出主机关联起来
  2. 源MAC地址改成自己的MAC地址
  3. 目标MAC地址改为下一跳的路由器的MAC地址
  4. 源IP改为自己的IP
  5. 源端口改为上面分配的逻辑端口
字段 内容
源MAC地址 发出主机边缘路由器A的MAC地址
目标MAC地址 下一跳的路由器B的MAC地址
源IP 发出主机边缘路由器的IP地址
目标IP baidu.com 的主机IP
源端口 发出主机边缘路由器分配监听的临时端口
目标端口 80

下一跳核心路由器B转发数据

这个路由器已经不是位于广域网边缘的路由器了,而是核心路由器,他只会进行数据转发

选择了下下一跳路由器也就是baidu.com 所在的主机后只会改掉源MAC地址和目标MAC地址

字段 内容
源MAC地址 路由器B的MAC地址
目标MAC地址 baidu.com 所在的主机的MAC地址
源IP 发出主机边缘路由器的IP地址
目标IP baidu.com 的主机IP
源端口 发出主机边缘路由器分配监听的临时端口
目标端口 80

直到转发给了 baidu.com 所在的主机

直到数据转发到了 baidu.com 所在的主机,主机发现这个数据包的目标IP地址就是自己的IP地址

就不再转发数据,将数据直接交给了操作系统,操作系统根据传输层数据中的目标端口,将数据发送给这个端口对应的socket缓冲区

wget进程就会接收到这些数据,然后处理数据,构造回复的数据帧

字段 内容
源MAC地址 baidu.com 所在的主机的MAC地址
目标MAC地址 路由器B的MAC地址
源IP baidu.com 的主机IP
目标IP 发出主机边缘路由器的IP地址
源端口 80
目标端口 发出主机边缘路由器分配监听的临时端口

将数据帧发送出去

核心路由器B接收到数据

字段 内容
源MAC地址 核心路由器B的MAC地址
目标MAC地址 边缘路由器A的MAC地址
源IP baidu.com 的主机IP
目标IP 发出主机边缘路由器的IP地址
源端口 80
目标端口 发出主机边缘路由器分配监听的临时端口

直到边缘路由器A发现目标IP是自己的IP

边缘路由器A接收到数据后,读出传输层数据中的逻辑端口,根据这个端口以及关联表找到对应的局域网中的哪台主机以及相应的物理端口

将数据从这个物理端口发出去

字段 内容
源MAC地址 边缘路由器A的MAC地址
目标MAC地址 发出主机的MAC地址
源IP baidu.com 的主机IP
目标IP 发出主机的IP地址
源端口 80
目标端口 发出主机分配监听的临时端口

发出主机接收到数据

发出主机接收到数据后处理数据




微信关注我,及时接收最新技术文章