计算机网络 - 基础

1 计算机网络

计算机网络主要是由一些通用的、可编程的硬件互连而成的,而这些硬件并非专门用来实现某一特定目的(例如,传送数据或视频信号)。这些可编程的硬件能够用来传送多种不同类型的数据,并能支持广泛的和日益增长的应用。

可编程的硬件,不限于计算机,而是包括了智能手机、具有网络功能的传感器以及智能家电等智能硬件,这些硬件一定包含有中央处理单元(CPU)。

各类应用,计算机网络并非只用来传送数据,而是能够基于数据传送进而实现各种各样的应用,包括今后可能出现的各种应用。

网络通信比喻为寄快递:
应用层:要寄什么东西
传输层:怎么分批、编号、重传
网络层:跨城市时走哪条路线
数据链路层:这一段路上,具体交给哪辆车、送到哪个下一站
物理层:电信号、光信号、无线电波到底怎么传

2 基础概念

节点(node)、链路(link)
设备,比如交换机、主机、打印机,有线地连在一块,构成一个网络,也可以是无线连接
image
两个网络可以通过路由器互连起来,比如拿根线将两个网络里的交换机连起来。
image
多个网路通过路由器互连起来,就构成了互联网(互连网),也可以称为“网络的网络”
image
因特网(Internet)是最大的互连网
image

若干节点和链路互连形成网络
若干网络通过路由器互连形成互连网(互联网)
因特网是当今世界上最大的互联网

2.1 ISP

image

2.2 分组交换

image

image

3 重要名词

3.1 实体

实体是指任何可发送或接收信息的硬件或软件进程。对等实体是指通信双方相同层次中的实体。
如下图中的A和F、B和G、C和H、D和I、E和J。
举例子,比如下图中,两台主机上的网卡互为对等实体,浏览器和nginx互为对等实体
image

3.2 协议

协议是控制两个对等实体在水平方向进行逻辑通信的规则的集合。
image

协议三要素,语法,语义,服务

  1. 语法,定义所交换信息的格式
    image

  2. 语义,定义通信双方所要完成的操作。
    如下图所示,主机发送get请求的http报文,封装好后发给服武器,服务器解析所封装的,得出是get请求的http报文,然后再封装响应发送给主机,主机解析之
    image

  3. 同步,定义通信双方的时序关系。比如要主机先发送请求,服务器才能响应

3.3 服务

在协议的控制下,两个对等实体在水平方向的逻辑通信使得本层能够向上一层提供服务。要实现本层协议,还需要使用下面一层所提供的服务。

协议是“水平”的,而服务是“垂直”的。实体看得见下层提供的服务,但并不知道实现该服务的具体协议。下层的协议对上层的实体是“透明”的。
image

在同一系统中相邻两层的实体交换信息的逻辑接口称为服务访问点SAP,它被用于区分不同的服务类型。
帧的“类型”字段、IP数据报的“协议”字段,TCP报文段或UDP用户数据报的“端口号”字段都是SAP。
image

上层要使用下层所提供的服务,必须通过与下层交换一些命令,这些命令称为服务原语。
image

3.3.1 PDU

通信双方交互的数据包也有专门的术语
对等层次之间传送的数据包称为该层的协议数据单元(ProtocolDataUnit,PDU),如下图所示
image

3.3.2 SDU

同一系统内层与层之间交换的数据包称为服务数据单元(ServiceDataUnit,SDU)
image

4 分层

image
image
image

应用层,解决通过应用进程的交互来实现特定网络应用的问题
运输层,解决进程之间基于网络的通信问题
网络层,解决数据包在多个网络之间传输和路由的问题
数据链路层,解决数据包在一个网络或一段链路上传输的问题
物理层,解决使用何种信号来表示比特0和1的问题

4.1 应用进程间基于网络的通信

应用层,HTTP请求报文,请求Web服务器执行相应操作
运输层,TCP报文段,区分应用进程,实现可靠传输
网络层,IP数据报,IP寻址和路由
链路层,以太网帧,MAC寻址和帧校验
网络层,将上面的四层报文转为比特流,比如转换成电信号,然后还要加前导码

到了路由器,路由器的网络层,根据IP数据包首部中的目的IP地址查表转发该IP数据报,要修改其中的ip报文
image

浏览器向主机通信的过程,为上述的逆过程
image

5 物理层

image

物理层的功能

在各种传输媒体上传输比特0和1,进而给上面的数据链路层提供透明传输比特流的服务。
image

image
image

image

6 数据链路层

数据链路层解决的是,在同一条链路、同一个局域网络里,怎样把一帧数据可靠或至少可检测地送到“下一跳”。

6.1 数据链路层在网络体系结构中所处的地位

如图所示,主机 H1 给主机 H2 发送数据,中间要经过三个路由器和电话网、局域网以及广域网等多种网络。从五层协议原理体系结构的角度来看,主机应具有体系结构中的各个层次,而路由器只需具有体系结构中的下面三层,各设备通过物理层下面的传输媒体进行互联。
当主机 H1 向 H2 发送数据时,数据的流动如图所示。主机 H1 将待发送的数据逐层封装后,通过物理层将构成数据包的个比特转换为电信号发送到传输媒体。数据包进入路由器后,由下往上逐层解封到网络层。路由器根据数据包的目的网络地址和自身转发表确定数据包的转发端口,从网络层向下逐层封装数据包,并通过物理层将数据包发送到传输媒体。

image

在大多数情况下,我们可以 只关心数据链路层而不考虑网络体系结构的其他各层。换句话说,我们可以想象数据包只在数据链路层从左向右沿水平方向传送。从数据链路层来看,主机 H1 到 H2 的通信可以看成是在三段不同的链路上的通信组成的。
注意,数据链路1、数据链路2、数据链路3可能是不同的数据链路层协议。
image

6.2 链路、数据链路和帧

1.链路(Link)是指从一个节点到相邻节点的一段物理线路(有线或无线),而中间没有任何其他的交换节点。
节点(Node),链路两端的设备叫节点,节点可以是电脑、手机、交换机、路由器、无线 AP、服务器。

2.数据链路(DataLink)是基于链路的。当在一条链路上传送数据时,除需要链路本身,还需要一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。

计算机中的网络适配器(俗称网卡)和其相应的软件驱动程序就实现了这些协议。一般的网络适配器都包含了物理层和数据链路层这两层的功能。
image

3.帧(Frame)是数据链路层对等实体之间在水平方向进行逻辑通信的协议数据单元PDU。
image

6.3 封装成帧

封装成帧是指数据链路层给上层交付下来的协议数据单元PDU添加一个首部和一个尾部,使之成为帧。帧的首部和尾部中包含有一些重要的控制信息
image

6.3.1 帧格式

1.mac帧
image
2.PPP帧
image

6.3.2 MTU

为了提高数据链路层传输帧的效率,应当使帧的数据载荷的长度尽可能地大于首部和尾部的长度。考虑到对缓存空间的需求以及差错控制等诸多因素,每一种数据链路层协议都规定了帧的数据载荷的长度上限,即最大传送单元(MaximumTransferUnit,MTU)。例如,以太网的MTU为1500个字节。
image

6.4 帧定界和透明透明

帧定界就是从一连串的比特流中识别出,哪一串是一个帧。

PPP帧有标志可以帧定界。
MAC帧没有,依靠物理层和链路层共同的机制。例如前导码,数据同步,帧间间隔(发送96比特所耗费的时间)

透明传输是指数据链路层对上层交付下来的协议数据单元PDU没有任何限制,就好像数据链路层不存在一样。主要是针对PPP帧。
面向字节的物理链路使用字节填充的方法实现透明传输
image
image
面向比特的物理链路使用比特填充的方法实现透明传输。
举例,假设用01111110作为标志,如果发现数据载荷里有标志,那么在连续的11111后面加个0
image
image

6.5 差错校验

帧里的fcs的作用就是用来校验差错,使用crc算法。

6.6 PPP协议

6.7 网络适配器

网络适配器(Adapter)一般简称为“网卡”,计算机上网用到的设备,有物理层和数据链路层功能。
网卡的另外一个重要功能就是要进行并行传输和串行传输的转换,由于网络的传输速率和计算机内部总线上的传输速率并不相同,因此在网卡的核心芯片中都会包含用于缓存数据的存储器。

为了使网卡正常工作,还必须要在计算机的操作系统中为网卡安装相应的设备驱动程序。驱动程序负责驱动网卡发送和接收帧。

6.8 MAC地址

网卡上的唯一标识,当多个主机连接在同一个广播信道上,要想实现两个主机之间的通信,则每个主机都必须有一个唯一的标识,即一个数据链路层地址,即MACMedium Access Control地址。

在每个主机发送的帧的首部中,都携带有发送主机(源主机)和接收主机(目的主机)的数据链路层地址。

示例
在广播信道上,B给C发数据,帧上有源MAC地址(主机A的)和目标MAC地址(主机C的),A、C、D都会收到,但是只有C会接收
image

注意

  • 一般情况下,普通用户计算机中往往会包含两块网卡:
    • 一块是用于接入有线局域网的以太网卡另一块是用于接入无线局域网的Wi-Fi网卡
    • 每块网卡都有一个全球唯一的MAC地址。
  • 交换机和路由器往往具有更多的网络接口,所以会拥有更多的MAC地址。
  • 综上所述,严格来说,MAC地址是对网络上各接口的唯一标识,而不是对网络上各设备的唯一标识。

地址格式

image
image

广播

image
image

注意

网卡从网络上每收到一个无误码的帧,就检查帧首部中的目的MAC地址,按以下情况处理:
(1)如果目的MAC地址是广播地址(FF-FF-FF-FF-FF-FF),则接受该帧。
(2)如果目的MAC地址与网卡上固化的全球单播MAC地址相同,则接受该帧。
(3)如果目的MAC地址是网卡支持的多播地址,则接受该帧。
(4)除上述(1)、(2)和(3)情况外,丢弃该帧。

网卡还可被设置为一种特殊的工作方式:混杂方式(PromiscuousMode)。工作在混杂方式的网卡,只要收到共享媒体上传来的帧就会收下,而不管帧的目的MAC地址是什么。

对于网络维护和管理人员,这种方式可以监视和分析局域网上的流量,以便找出提高网络性能的具体措施。
嗅探器(Sniffer)就是一种工作在混杂方式的网卡,再配合相应的工具软件(WireShark),就可以作为一种非常有用的网络工具来学习和分析网络。

混杂方式就像一把“双刃剑”,黑客常利用这种方式非法获取网络用户的口令。

7 可靠传输

使用差错检测技术(例如循环余校验CRC),接收方的数据链路层就可检测出帧在传输过程中是产生了误码(比特差错)。误码后怎么办?这就引出以下概念。
数据链路层向其上层提供的服务类型有,不可靠传输服务:仅仅丢弃有误码的帧,其他什么也不做;可靠传输服务:通过某种机制实现发送方发送什么,接收方最终就能收到什么。

一般情况下,有线链路的误码率比较低。为了减小开销,并不要求数据链路层向其上层提供可靠传输服务。即使出现了误码,可靠传输的问题由其上层处理。无线链路易受干扰,误码率比较高,因此要求数据链路层必须向其上层提供可靠传输服务。

7.1 传输差错

误码(比特差错)

分组丢失

假设主机H1给H3发送一个分组,当该分组到达传输路径上的路由器R2时,由于R2的输入队列快满了而根据自身的分组丢弃策略,决定主动丢弃该分组。
image
image

分组失序

如图所示,主机H1给H3按序发送了三个分组,由于每个分组可走不同的路径,各路径的距离以及不同路径中,各路由器的性能和繁忙程度都可能不同,因此各分组到达接收方的顺序与发送方发送他们的顺序可能不同。
image
image
image

分组重复

假设主机H1给H3发送一个分组,当该分组到达传输路径上的路由器R5时,由于R5比较繁忙,分组在输入队列中排队等待了较长的时间,这导致了主机H1对该分组的超时重发,超时重发的分组到达主机H3之后,在路由器R5中排队等待了较长时间的原分组也到达了主机H3,这就导致主机H3收到了两个相同的分组
image
image
image
image
image

注意

可靠传输服务并不局限于数据链路层,其他各层均可选择实现可靠传输。
可靠传输的实现比较复杂,开销比较大,是否使用可靠传输取决于应用需求。

7.2 停止等待协议

初步认识
如下图所示。收发双方基于Internet进行通信,纵坐标为时间,发送方发送第一个分组,接收方收到并检测有没有错,若没错,则接受该分组,给发送方发送确认分组(简记为ACK),发送方收到第一个分组的确认分组后,才能发送下一个分组;假设这个分组在传输过程中,出现了误码,接收方收到后检测出了误码,则丢弃该分组,并给发送方发送否认分组(简记为NAK),发送方收到否认分组后,就知道了自己之前所发送的数据分组出现了误码而被接收方丢弃,于是立刻重传该数据分组,接收方收到后对其进行差错检测,若没有检测出误码,则接受该数据分组,并给发送方发送确认分组,因此发送方每发送来一个数据分组后,并不能立刻将该数据分组从发送缓存中删除,因为之后有可能需要重传该数据分组,只有在收到针对该数据分组的确认分组后,才能将其从发送缓存中删除。
image

7.2.1 RTO

通信过程中,发送方的分组因某缘故丢失了。接收方收不到数据分组,就不会发送相应的ACK或NAK。发送方就会一直处于等待接收方ACK或NAK 的状态。
为解决上述问题,发送方可在每发送完一个数据分组时就启动一个超时计时器(Timeout Timer)。若到了超时计时器所设置的超时重传时间(RetransmissionTime-Out,RTO),但发送方仍未收到接收方的ACK或NAK,就重传之前已发送过的数据分组。
image

RTO示意图
image

7.2.2 分组序号

若ACK丢失,接收方收不到,就重传,接收方又收到同一个分组,导致分组重复。为了避免分组重复这种传输错误,必须给每个分组带上序号。
image

对于停止-等待协议,由于每发送一个数据分组就停止等待,只要保证每发送一个新的数据分组,其序号与上次发送的数据分组的序号不同就可以了,因此用一个比特来编号就够了,序号有0和1这两个。若接收方收到连续的序号为0、0或者1、1的分组,就知道重复了,因为正确的情况必须是序号0、1、0、1,然后接收方要丢弃重复收到的分组,再发ACK
image

接下来又有新的问题。
image

因此必须对ack也要带上序号。
image

  • 使用超时重传机制后,就可以不使用否认机制了,这样可使协议实现起来更加简单。但是,如果点对点链路的误码率较高,使用否认机制可以使发送方在超时计时器超时前就尽快重传。
  • 为了让接收方能够判断所收到的数据分组是否是重复的,需要给数据分组编号。由于停止-等待协议的特性,只需1个比特编序号即可,即序号0和序号1。
  • 为了让发送方能够判断所收到的确认分组是否是重复的,需要给确认分组编号,所用比特数量与数据分组所用比特数量一样。
  • 数据链路层一般不会出现确认分组迟到的情况,因此在数据链路层实现停止-等待协议可以不用给确认分组编号。
  • 给超时计时器设置的超时重传时间RTO应当仔细选择,一般将RTO设置为略大于收发双方的平均往返时间RTT。
    • 在数据链路层,点对点的往返时间RTT比较固定,RTO就比较好设定
    • 在运输层,由于端到端往返时间非常不确定,设置合适的超时重传时间RTO有时并不容易。
  • 停止-等待协议属于自动请求重传(AutomaticRepeatreQuest,ARQ)协议。即重传的请求是发送方自动进行的,而不是接收方请求发送方重传某个误码的数据分组。

7.2 滑动窗口协议

发送方将分组按序编号,接收方要按序接收。
举例,下图,0、1、2、3...
image
发送方需要维护一个发送窗口Wt(现假设为5),一次发5个分组,接收方需要维护一个接收窗口Wr,Wr只能为1,只能按序接收,收一个往后推一个窗口。
image

7.2.1 示例

示例一,正常情况
发送方发了序号0、1、2、3、4的分组
image
image
接收方收到全部,将接收窗口往前推到5,接着发Ack0、Ack1、Ack2、Ack3、Ack4,接收方收到Ack0、Ack1、Ack2、Ack3、Ack4,将发送窗口推到5
image
image

示例二,异常情况
发送方发了分组0、1、2、3、4,接收方收到了全部,但是分组2误码了,丢弃之,接收窗口滑到
2,也丢弃分组3、4,接着发ack 0、ack 1给发送方,然后会发送最近确认分组ack,最近就是最新收到的那个分组,即再发一个ack 1。
image
发送方收到ack 0、ack 1,将发送窗口推到2,然后发分组5、6,接收方现在只要分组2,丢弃分组5、6,然后发送最近确认分组ack 1
image
接收方又收到ack 1,就知道了分组2丢失了。接着有两类处理方案:一,又收到ack 1后立刻重发分组2、3、4、5、6;二,等到分组2的确认超时,触发超时重传,重发分组2、3、4、5、6
image

7.2.2 累积确认

接收方可以采用累积确认方式,接收方不必对收到的每一个数据分组都发送一个确认分组,而是可以在收到几个序号连续的数据分组后,对按序到达的最后一个数据分组发送确认分组。
接收方何时发送累积确认分组,由具体实现决定。
确认分组ACKn表明序号为n及之前的所有数据分组都已正确接收。

如,接收方收到分组0、1、2、3、4,分组无误码,只发ack 4

7.3 选择重传

接收窗口可以变大,只重传丢失/丢弃的。
image

发送方发分组0、1、2、3,接收方只收到分组1、2、3,接着发ack 1、ack 2、ack 3,接收方标记收到分组1、2、3,一会后分组0超时重传
image

接收方收到分组0,且无误码,推动接收窗口,发送ack 0,发送方收到ack 0 ,推动发送窗口。
image

8 局域网

集线器、网桥、交换机

posted @ 2026-09-12 11:23  dvdhellohaha  阅读(17)  评论(0)    收藏  举报