目录

计算机网络-笔记-PPT知识梳理(更新中)

前言

这里用来记录我计算机网络学习以及复习过程中的笔记。
由于本人才疏学浅,故部分陈述的错误难以避免。烦请大家发现错误或者疑问之后在评论区或者邮件告知我,感激不尽。

正题

ppt知识梳理

应用层

HTTP

  • 不同主机进程间通信依靠socket寻址依赖(IP, PORT)

  • 对象的寻址依赖于URL,如{www.hit.edu}(host anme) {/images/pic.png}(path name)

  • 记住,HTTP协议是无状态协议
    HTTP1.0 非持久连接,一个TCP连接传一个对象;HTTP1.1 持久连接。

  • 非持久性连接通信的过程。需要注意的点包括建立连接需要一个RTT,html文件请求到接收到消息前几个字节需要一个RTT,一个html文件包含的对象也一样,另外还有文件/对象发送时间。 故total=2*RTT+文件发送时间。 /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/httpnon.png

  • 持久性:采用流水线机制,理想情况下,建立连接1RTT,html文件1RTT,收到所有引用对象1RTT,再加上所有文件的发送时间。 /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/httppipe.png

  • Cookie建立过程以及原理。
    原理
    • 无cookie的客户端向web服务器发送http请求->服务器为其设置cookie->返回带cookie头部行的http响应信息。
    • cookie文件保存在客户端主机,由浏览器管理
    • cookie文件对应的数据也就是用户数据保存在web服务器端数据库
    • 当client在次发送包含cookie头部行的请求时,web服务器可以根据cookie来获取对应的用户数据,而产生对该用户的记忆。而无需用户每次请求都需要输入相关信息。

Web缓存/代理服务器

  • Web缓存/代理服务器
    原理
    将请求的Web数据缓存在缓存/代理服务器中。当进行Web访问时,先在缓存/代理服务器中寻找如果失效或者没有,则正常进行http请求;否则直接转发缓存对象给客户端
    使用缓存时,用包含if-modified-since来想Web服务器获取缓存状态。如果缓存版本最新,则会接收到HTTP/1.0 304 Not Modified,否则不会,说明不是最新。

Email

  • Email应用
    其构件包括邮件客户端user agent邮寄服务器email server以及SMTP协议
    注意的是,邮件的发送和接收是在email server上发生的,user agent仅仅将邮件送到server或者从server拉取邮件。 mail server用邮箱存储接收道德email,同时有一个消息队列存储等待发送的email。
SMTP

SMTP需要注意的如下:

  • 是一个‘’协议,只能将邮件从mail server发送到server,不能被user agent用来从邮箱中‘拉取’邮件。
  • 用TCP,25端口。
  • email信息格式:
1
2
3
4
5
6
7
header:
to: 
from: 
subjetc: 

body:msg
(写着玩的,大概率不考)
  • **那如何拉取邮件?**有如POP,IMAP或者使用HTTP的163,QQ Mail等。

DNS

关于DNS,需要注意的是:

  • 应用层协议
  • 多层命名,分布式数据库。
  • 功能是将域名解析为IP地址.
  • 几层域名的功能:根->顶级->权威(->本地)。
  • 同理,主机不自行完成解析任务,本地域名服务器完成后将结果转发给主机。
  • DNS缓存

DNS协议包括查询query和恢复reply信息,信息格式相同。

P2P & 文件分发

  • P2P架构
    这部分要掌握的就是P2P架构是端系统之间直接通信,没有传统意义上的服务器。
    另外可能出现的计算题是C/S架构和P2P架构的文件分发时间
    举个栗子,一个服务器向N个节点分发一个文件,文件size为F,服务器上传带宽为$u_s$,节点i上传带宽和下载带宽分别为$u_i$和$d_i$。
    则如果使用C/S架构,那么分发该文件到N节点的时间$$d_{cs}=max{\frac{NF}{u_s},\frac{F}{min(d_i)}}$$
    因为服务器要上传N个文件副本,故有$\frac{NF}{u_s}$的耗时;同时,该过程中还有节点的下载时间,如果最慢下载时间比上传N个副本时间都长,那么就有$\frac{F}{min(d_i)}$。
    如果使用P2P架构,那么该过程中涉及的操作及其时间包括‘服务器必须发送一个副本’,客户机i下载时间,总共需要的文件下载时间。故时间$$d_{P2P}=max{\frac{F}{u_s},\frac{F}{min(d_i)},\frac{NF}{(u_s+\sum{u_i})}}$$
  • 另外,关于P2P,还有很重要的一点就是其“索引”。
    在P2P中,搜索信息指的是查找网络上的文件或资源。为什么?因为P2P没有中央服务器,因此节点需要通过P2P网络上的其它机制来发现和定位数据。
P2P系统的索引
  • P2P系统的索引
    这个‘索引’是名词,它是一个映射表,记录文件/资源和它们所在节点的位置(IP+PORT)之间的关系。这个索引可以是分布式的,分散在网络的多个节点。
    例如,在文件共享系统中,索引会动态跟踪那些节点共享了哪些文件。节点加入网络并想要共享文件时,首先需要告知索引自己的文件列表。当需要找某个文件时,则在索引中搜素具有该文件的节点信息,并从这些节点中下载文件。
    或者在如QQ这样的即时消息系统中,索引的作用是将用户名和账号映射到实际的网络位置。
    具体实现包括:集中式索引洪泛式查询Query flooding、层次式覆盖网络。

  • 文件分发:BitTorrent,以256KB的chunk对数据进行分发,tit-for-tat.

传输层

传输层要掌握什么?

  • 理解传输层服务基本理论和基本机制:
    • 复用/分用;
    • 可靠数据传输机制;
    • 流量控制机制;
    • 拥塞控制机制。
  • 掌握Internet的传输层协议:
    • UDP;
    • TCP;
    • TCP拥塞控制。

概述

传输层为不同主机的进程提供逻辑上端到端的通信。与网络层比较来说,网络层是提供主机之间的逻辑通信机制。而传输层是提供应用进程之间的逻辑通信机制。 我们主要掌握两个Internet传输层协议,分别是可靠按序的TCP和Best-effort(尽力而为)的UDP。

多路复用和多路分用

我觉得这部分要理解‘多路’和‘复用’‘分用’体现在哪里,需要首先知道没有多路复用或者分用的情况。
在计算机网络中,对于一个主机来说,物理上可能只有一条网络连接,比如一个网线或者一个无线连接。如果没有多路复用,那么你的主机可能就只有一条单一的通信线路,即每个应用程序都需要有一个物理的网络连接才能进行通信,这样造成效率低下、成本增加等问题。如果没有多路分用,则各数据到达设备时,没有端口号来识别数据应该传给哪个应用程序。并且造成应用程序冲突。

因此,多路复用就体现在将单一的网络连接通道被化为逻辑上的多路通道进行复用,主要完成的工作是每个应用程序数据发送请求被赋予一个唯一的端口号,传输层使用端口号来区分不同的应用程序。当数据包被发送到网络时,每个包都会包含这个端口号,以此来标记它属于哪个应用程序。

而多路分用呢则是当各数据包到达设备时,传输层查看每个数据包的‘目的端口号’,如何根据端口号将数据发送给绑定该端口的对应应用程序。成功正确的完成数据的接收和转发。

核心知识点就在于如何标识数据包使得发送方和接收方都能成功分析并完成正确的数据传输。具体就是‘端口号’的设置。

UDP & TCP in 多路复用/分用
  • 同时,根据连接存在情况可以分为无连接的分用UDP有连接的TCP
    • 无连接:UDP发送时被Socket用**二元组(目的IP,目的PORT)**来进行标识。主机收到UDP后,根据段中的目的PORT来进行向上层的转交。转交的依据仅参考目的PORT,这意味着来自不同源IP和源端口号的IP数据包会被导向同一个Socket。
    • 有连接:TCP的Socket用**四元组(源IP,源PORT,目的IP,目的PORT)**来标识。

UDP很简单,因此它带来的优点也是头部开少,又因为没有拥塞控制,故应用可更好的控制发送时间和速率。
对UDP,主要注意以下特点:

  • 基于Internet IP协议,有简单的错误校验(checksum)
  • Best effort’尽力交付服务,UDP段可能丢失或错序到达。
  • 无连接,无需握手。
  • 常用于如流媒体应用一样能够容忍丢失,速率敏感的应用。因为UDP无需握手等繁杂步骤,因此发送速率快于TCP。
  • UDP还用于DNS、SNMP等应用层协议。
  • 通过在应用层加可靠机制和错误恢复机制可以实现UDP的可靠数据传输。
  • UDP**校验和(checksum)**的计算方法:将段内容视为多个16-bit整数。对所有整数求和后(进位加在后面)按位取反,得到校验和。接收方对接受的段计算校验和后与校验和字段比较,相等则大概率无错;否则错误,丢弃。

可靠数据传输

可靠数据传输需要达到的目标是数据传输的不错(检错纠错机制)不丢(重传机制)不乱(序号、缓存机制)
关于rdt1.0到rdt3.0的发展过程不做赘述,具体查看PDF文档

然后我总结一下:

  • rdt1.0信任底层信道完全可靠,不会发生错误以及丢弃分组;此时发送方和接收方只需要单纯的进行数据的发送和接收即可。
  • rdt2.0中认为信道可能会使比特数据出错,即翻转某些位;故加入了差错检测、接收方反馈控制信息ACK/NAK以及重传策略。

但rdt2.0中并不能解决ACK/NAK信息出错的情况,同时若ACK/NAK数据出错时简单重传,则会导致重复分组的错误情况(因为接收方并不知道发送方是否正确接收ACK/NAK,故在其看来它只要把ACK/NAK发送出去就标志着数据接收成功了)。

  • 在rdt2.1中,加入了ACK/NAK错误重传机制,并且为了解决重复分组问题,引进了序列号方法,即发送方为每个分组增加序列号,接收方会丢弃重复到达的分组。

  • rdt2.2中,NAK信息被认为是多余的,故删去了NAK消息,通过在ACK中加入被确认分组的序号策略来完成其工作;逻辑为发送方收到重复ACK以后,重传该ACK确认分组序号+1的分组。

在此之前的所有rdt版本中,都默认了信道不会发生分组丢失的情况,那如果会呢? 这时候‘校验和+序列号+ACK+重传’机制能解决问题吗?
显然是不能的,很简单,如果ACK在过程中丢失,那么两方则再也不知道该怎么做了。

  • 因此,在rdt3.0中,为了解决这个问题,引入了“定时器”策略;即为发送方设置一个计时器,如果在规定的合理时间内没有收到期望的ACK,则认为数据包/ACK丢失,重传丢失数据包;同时,如果分组/ACK只是延迟而未丢失,则出现了重复分组情况,但我们已经有序列号机制来解决这个问题了。
rdt3.0

虽然rdt3.0确实能可靠的进行工作,但有一个问题,就是性能很差。
在这里有一个公式需要注意,即: $$发送方利用率U_{sender}=\frac{\frac{L}{R}}{RTT + \frac{L}{R}}$$

发送方的利用率就是一个数据包成功传输所需要的时间里,实际上正在发送数据的时间占比。除去实际发送数据的时间,剩下的时间都是在传输过程中浪费或者消耗的。通过计算这个发送方利用率,可以评判数据发送的效率,即发现是不是大多数时候在做无用功。

同时,我们下面介绍三个实现可靠数据传输的方式,停等协议、流水线机制、滑动窗口协议,并分析它们的性能。

停等协议

主要理解每次只能发一个分组,并且sender接收到该分组的ACK后才能发送下一个分组。
示例:1Gbps链路,15ms端到端传播延迟,1KB分组: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/waitstop.png

如图所示,大小为L的文件传输,发送时耗$\frac{L}{R}$,传播时延1个RTT。因此计算的到发送方利用率只有0.00027。约等于30毫秒才发送一个分组,很慢。

流水线机制

使用流水线机制的情况如图: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/pipeline.png

如图所示采用流水线机制改进数据传输后(一次可以发3个并且接收到正确ACK后就发一下个),经过计算发送方利用率可以发现利用率提高了将近3倍。当然这是没有差错或丢失的情况。

流水线协议允许发送方在收到ACK之前连续发送多个分组。这表示其有着更大的序列号范围以及可能需要缓存分组。

滑动窗口协议

关于滑动窗口协议,主要掌握的就是其思想以及各种应对状态的措施。
窗口代表着当前可以发送的分组组合,并且以窗口为单位对分组进行划分和管理。

需要注意的出题点如下

  • 序列号问题,n位序列字段可以分配0~$2^{n-1}$的序列号。
  • 序列号按模n编号。
  • 接受数据序号重叠问题,这要求窗口的长度必须小于等于总区间(序号)长度的一半。 …

另外,滑动窗口协议的具体实现方式包括GBN(Go-Back-N)和SR(Select Repeat)。

GBN协议

GBN协议主要需要注意的是其应答特征以及策略
如图: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/gbn.png

我认为GBN主要需要注意的特征是:

  • GBN的发送窗口大小m大于等于1,接收窗口大小只能为1。
  • sender为整个窗口设置一个定时器,当窗口做左侧即第一个分组send_base的ACK到达时,窗口定时器重置,同时窗口向右滑动。
  • 当sender未能成功接收send_base分组的ACK导致超时时,重传当前窗口内已发送但还未收到ACK的所有分组;也就是如图[send_base,nextseqnum)的所有分组。
  • 由于接受窗口的大小为1,如果接收到的是该窗口分组,则发送对应ACK并挪动窗口;故乱序到达的分组,都会被丢弃,并且重传最近确认分组序号的ACK。
  • 特殊情况:当sender接收到了大于send_base序号的分组(假如是n)时,由于接收方窗口为1的缘故,故可以得出n及n以前的分组都已经被正确接收了,故可以直接挪动窗口send_base到n+1。

下面是GBN的有限状态机图,可供捋过程的时候参考使用:

  • 发送方: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/gbnfsms.png
  • 接收方: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/gbnfsmr.png

课上习题: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/gbnpra.png

SR协议

SR协议,即选择重传协议。和GBN的区别在于对接收到的窗口内分组的ACK进行缓存,并且为每个发送出去的分组设置一个定时器,当i分组的定时器超时时,只会重传i分组;而不像GBN一样重传所有的已发送但未收到ACK的分组。
也因为如此,SR协议的接收方窗口不再限制为1,而可以是任意非零正数。

SR协议的发送方、接收方状态转移情况以及应答措施:

  • 发送方&接收方: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/srfsm.png

TCP

概述

TCP是实现可靠数据传输的服务,基于IP层提供的不可靠服务。

我觉得需要注意的点有:

  • 全双工,同一连接中能传输双向数据流
  • 拥塞控制以及流量控制
  • TCP段结构中,需要注意的是序列号seq和确认号ack。因为进行的是全双工通信,所以双方需要用seq和ack来互相同步数据的双向传输。
    seq的作用是表明‘’本次发送的数据的第一个字节的编号(不一定从0开始,建立TCP连接时,双方随机选择序列号)。ack的作用是表示'‘下一个希望接收(你的)到的下一个字节的序号,其实就是我希望你发送的数据的起始字节是哪个。同时,由于TCP使用累计确认的方式,该ack序列号之前的所有字节均已正确接受。

TCP可靠数据传输

主要包括这些点:

  • 流水线机制。
  • 累计确认。
  • TCP使用单一重传定时器。
  • 触发重传的事件包括超时和收到重复ACK。

注意几点,1是超时时间(RTO)的计算,2是累计确认方式,3是TCP的重传机制。

RTO的计算

TCP会计算每次数据传输的RTT,并且利用该RTT来更新超时时间,我们假设每次测量到的RTT为$SampleRTT$,则RTO计算公式如下: $$RTO = EstimatedRTT + 4 \times DevRTT$$ $$EstimatedRTT = (1-\alpha)\times EstimatedRTT + \alpha \times SampleRTT, \alpha 典型值为0.125$$ $$DevRTT = (1-\beta) \times DevRTT + \beta \times |SampleRTT - EstimatedRTT|$$

EstimatedRTT是平滑RTT,为了避免临时网络波动的影响,故采用加权移动平均(EWMA)算法来计算更平滑的RTT。
DevRTT衡量了RTT的波动程度,反映网络中的不稳定性。

累计确认

累计确认的工作原理是:
接收方不必对每个单独的数据包发送确认,而是可以在收到多个数据包后,发送一个确认信息,表明它已经接收到所有序号小于或等于某个特定值的数据包。这意味着累计确认是对所有前面连续的数据包的确认。

TCP重传

TCP只设置1个定时器,并且超时后只会重传1个分组,这个分组是还没有被确认的最早的一个分组
当这个分组被成功接收,并且接收方返回了一个累积确认后,发送方才会知道之后的分组是否也在传输过程中丢失。如果累积确认的序号增加了,那么发送方会推断出之后的分组也被成功接收了。如果没有,那么发送方可能需要继续重传后续的分组,但这通常会发生在随后的超时事件之后。

流量控制

流量控制部分很简单,就是一个速度匹配机制。通过限制sender窗口大小来控制流量。
Receiver通过在Segment的头部字段将RcvWindow告诉Sender->Sender根据RcvWindow来限制自己的能够发送的数据数量,即已经发送但还未收到ACK的数据多少。

TCP的连接管理

TCP的连接管理包括TCP连接的建立和关闭,即三次握手和四次挥手。

  • 三次握手(TCP连接建立):
    • 第一次握手:客户端发送一个带有SYN(同步序列编号)标志的TCP段到服务器以开始一个新的连接。
    • 第二次握手:服务器接收到SYN后,回送一个带有SYN/ACK标志的TCP段作为应答。
    • 第三次握手:最后,客户端发送一个带有ACK标志的TCP段来确认这个响应

这个过程,双方在建立连接的过程中同步了seq和ack序列号。
如图: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/handshake.png

  • 四次挥手(TCP连接关闭):
    • 第一次挥手:当通信的一方完成其数据发送任务后,它会发送一个带有FIN标志的TCP段来关闭连接。
    • 第二次挥手:另一方接收到这个FIN后,会发送ACK来确认收到了连接释放请求。
    • 第三次挥手:接收FIN的一方等到其所有待发送的数据都发送完毕后,也会发送一个FIN来指示它也准备关闭连接了。
    • 第四次挥手:最初发送FIN的一方在收到这个FIN后,发送一个ACK来确认,然后等待足够长的时间确保另一方收到了这个ACK,最后关闭连接。

如图: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/handwave.png

拥塞控制

TCP采用端系统的拥塞控制,主要概念包括:

  • 慢启动
  • 拥塞避免
  • 快重传
  • 快恢复

过程总结如下:

  • 当拥塞窗口(CongWin)小于阈值时,发送方处于慢启动阶段,窗口呈指数增长。
  • 当拥塞窗口大于阈值时,发送方进入拥塞避免阶段,窗口呈线性增长。
  • 当发生三个重复的ACK时,阈值设置为拥塞窗口的一半,拥塞窗口设置为阈值,进入状态’拥塞避免‘。
  • 当发生超时时,阈值设置为拥塞窗口的一半,拥塞窗口设置为1个最大段大小(MSS)。

各含义解释如下:

状态 事件 TCP发送方动作 注释
慢启动 (SS) 收到对之前未确认数据的确认(ACK) CongWin = CongWin + MSS, 如果 (CongWin > 阈值) 则状态设置为 “拥塞避免” 导致每个RTT拥塞窗口翻倍
拥塞避免 (CA) 收到对之前未确认数据的确认(ACK) CongWin = CongWin + MSS * (MSS/CongWin) 加性增加,导致每个RTT拥塞窗口增加1个MSS
SS 或 CA 通过三个重复的ACK检测到丢失事件 阈值 = CongWin/2, CongWin = 阈值, 状态设置为 “拥塞避免” 快速恢复,实现乘法减小。拥塞窗口不会下降至低于1个MSS
SS 或 CA 超时 阈值 = CongWin/2, CongWin = 1 MSS, 状态设置为 “慢启动” 进入慢启动

网络层 & 数据链路层

网络层和数据链路层的数据我是手写的,有时间了再慢慢码字上传。

数据链路层

这部分我主要看王道服务的,可能与学的内容有偏差。

数据链路层的功能

功能:
① 继下(物理层)向上(网络层)提供服务。
② 链路管理,包括建立、维持、释放,也包括资源分配与调度。
③ 帧定界,帧同步和透明传输。
④ 流量控制。
⑤ 差错控制。

其中呢,①是借助物理层的服务,以此为基础,向网络层提供服务,网络层需要其提供的服务是能够将源机器网络层的数据传输到目标机器的网络层。这种服务由于目标的不同可以分为
1)无确认的无连接服务;
2)有确认的无连接服务;
3)有确认的有连接服务。

②中定界(确定帧的界限)+同步(接收方能正确分出帧的首、尾)+透明传输(可支持各种此特流的传输),共同保证了数据的发送与接收。

组帧

组帧:是指发送允将数据组装成帧,在数据链路层,数据是以帧为单位进行传输的(send&receive)。
组帧主要解决功能③的3个问题。
主要有以下方法:

  1. 字符计数法
  2. 字符填充法
  3. 零比特填充法
  4. 违规编码法。

数据链路层的差错检测主要讨论比特差错

差错检测

通常用编码技术来进行差错检测。主要有两种:
① 自动重传请求ARQ和② 前向纠错FEC。

ARQ中接收方收到错误后会设法通知发送方重传。同时也有一类叫检错丢弃,会在检测到错误后丢弃当前帧。
其中,检错编码通常使用冗余编码技术,常见的包括:

  • 奇偶校验码:只能检测奇数位错误。
  • CRC,循环冗余校验,又称多项式码,重点。
循环冗余校验CRC

CRC的编码过程如下:
直接看例子:

CRC

eg:一个m位的帧要发送,约定的G(x),为r阶,则步骤如下:

  1. 在m位帧后加r个0。
  2. 模2除法,G(x)除步骤1中得到的m+r帧,得到r位的余数R,即冗余码。
  3. 将m位帧与R拼接,得到发送的m+r位数帧。

如G(x)=1101,r=3,待传数据M=101001,加0后101001000,然后G(x)除这个,除后得余数001,则$\frac{101001}{M}\frac{001}{R}$ 为发送数据。

可以发现,CRC有纠错能力,但一般不这么做。

纠错检测汉明码

纠错检测一般使用汉明码。
汉明码的原理是将几个校验位插入有效信息位中成汉明码。校验位(第i个)在汉明码编号为$2^{i-1}$的位置,即若有n个校验位,其分别在第1、2、4、…、$2^{n-1}$ 位上。校验位的值如何确定?第i个校验位的值是将有效信息位号都化为2进制后,其2进制位号的第i位为1的所有有效信息位的异或值,如第2个校验位 $p_2=D_1 \oplus D_3 \oplus D_4$。
为什么是$D_1,D_2,D_3$?
/images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/hanming.png

汉明码的检验原理是:有n个校验位,就有n个校验组,且校验组的值是校验位与其构成的信息位的异或值,如: $$S_1 = P_1 \oplus D_1 \oplus D_2 \oplus D_3 \oplus D_4$$ $$S_2 = P_2 \oplus D_1 \oplus D_3 \oplus D_4$$ $$S_3 = P_3 \oplus D_2 \oplus D_3 \oplus D_4$$ 最后得到一个二进制数$S_1S_2S_3$,这个数是几就说明第几位错了。

介质访问控制

介质访问控制是用来调度站点数据发送及信道资源分配管理的。具体进行广播信道中协议使用决定的是数据链路层的一个子层:介质论问控制(Medium Access control,MAC)子层
主要的目的是在保证结点间通信不会相互干扰的基础上提高信道利用率

常见的方法包括:

  • 信道划分
  • 随机访问
  • 轮询访问
信道划分

主要使用多路复用技术,是静态的划分方法,将信道的时域和频域资源合理分配。可以分为以下4种技术:
a. 频分多路复用;
b. 时分多路复用;
c. 波分多路复用;
d. 码分多路复用。
abc很简单,主要讲讲d,d又称码分多址(CDMA),其核心思想是“码片”(chip)。
原理为:将每个比特时间再划分为m个短时间槽,即m位的码片。每个站点被分配一个码片序列作为自己的标识向量,要求是各站点的标识向量(m位)相互正交。在此基础上,制定规则:各站点要发送1时,发送其码片序列;发送0时,发送其码片序列的反码。当两个以上站点同时发送时,各路数据在信道中线性相加。而由于各站点码片序列相互正交,故当接收方知道发送方码片序列时,将该信号与序列作规格化正交,即可分离发送方所发序列的值。注,码片序列中。0用-1代,1用+1代。例子见王道。

随机访问

随机访问的核心是不采用集中控制公式,而是用各种机制如碰撞重发/侦听/坚持/碰撞检测等。协议主要有:

  • ALOHA:简要概括就是各站点自由发送,没有收到确认信息就等待一段时间后重新发送。
  • 时隙ALOHA:在ALOHA的基础上进行了时隙限制,在时隙内,每个站点只能在开始时发一个帧。(而不是任意时刻自由发送)。
  • CSMA:是载波侦听多路访问,站点侦听到信道空闲才会尝试访问;否则,若检查到不空闲,根据应对策略还可以被分为1-坚持CSMA非坚持CSMA以及p-坚持CSMA
  • CSMA/CD:是CSMA/CD(碰撞检测),其特点是边发送加侦听,当信道空闲时发送;若发送中侦听到碰撞,则启动指数退避算法
  • CSMA/CA:是CSMA/CA(碰撞避免),由于在无线局域网下CSMA/CD不适用(因为侦听条件难以达成),故将检测改变避免。这可以理解为“退一步海阔天空”,在检测到空闲时也会等一段时间后再发送;否则就执行退避算法。
CRC
注意,这里总结的很简单,只是提及了一些关键内容。关于各方式的具体过程和策略也是考察的范围,需要自行详细查看。
轮询访问

轮询访问的核心就在于令牌传递,有令牌的站点才能发送,站点在逻辑上构成一个环。

链路层协议的实现

链路层协议如何实现?链路层随机访问的核心是不采用集中控制公式,而是用各种机制如碰撞重发/侦听/坚持/碰撞检测等。协议主要有:协议的实现依赖于“适配器”,即网络接口卡-NIC及其驱动。另外,物理层协议也是由网卡实现的。
在物理层面上依赖于网卡以及各种软硬件。

  • 以太网网卡:802.11网卡;以太网芯片组

如图是网卡间的通信: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/NIC.png

MAC协议

MAC(multiple access control)协议,即多路访问控制协议,是用来确保多结点能正确在共享广播信道上传输数据的协议。

首先要知道有两类链路:

  • 点对点链路
    • 拨号接入的PPP
    • 以太网交换机和主机之间的点对点链路
  • 广播链路(共享介质)
    • 早期总线以太网
    • 802.11无线局域网

在单一共享广播信道上传输时,若出现两个或两个以上结点同时传输的情况,则会出现数据传输的干扰;另外,若结点同时接收到两个或者多个信号,则会产生冲突,导致接受失败。

MAC协议的分类
  • 信道划分MAC协议
    • 多路复用技术
    • TDMA(时分)、FDMA(频分)、CDMA(码分)、WDMA…
  • 随机访问MAC协议
    • 信道不划分,允许冲突;并采用冲突恢复机制来控制结点的访问。
    • ALOHA,时隙ALOHA、、CSMA、CSMA/CD、CSMA\CA
  • 轮转MAC协议
    • 结点轮流使用信道
    • 主结点轮询;令牌传递

MAC地址

互联网中的每一个网卡都有一个唯一的MAC地址。

以太网

以太网是一种局域网技术。

局域网技术
局域网技术一般专注于OSI模型的底层,也就是数据链路层和物理层。
局域网技术通常不涉及网络层及以上层次的事务,如路由选择、数据分段、会话管理等,这些是由更高层的网络协议(如IP协议)来处理的。局域网的设计通常假设网络中的所有设备都在同一个广播域中,这意味着它们可以直接通过数据链路层通信,而无需进行复杂的路由决策。

以下是需要注意的点:

  • 以太网提供无连接、不可靠的服务,如没有握手过程,差错帧直接丢弃等。
  • 以太网的MAC协议使用二进制指数退避算法的CSMA/CD
以太网帧结构

以太网的帧结构如图: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/framestructure.png 包括前导码、源/目的MAC地址、上层协议类型、数据以及CRC循环冗余校验码。

交换机

以太网交换机包含以下四个特点:

  • 属于链路层设备:进行存储转发以太帧;利用CSMA/CD访问链路。
  • 透明:主机感知不到交换机的存在。
  • 即插即用。
  • 自学习
交换表 & 自学习

每个交换机都有一个交换表,表项格式如:
(主机MAC地址,到达主机的接口,时间戳) 如图: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/%E4%BA%A4%E6%8D%A2%E6%9C%BA%E8%A1%A8%E9%A1%B9.png

同时,交换机采用自学习来获知转发信息的策略:

  • 当收到帧时,交换机通过帧的源MAC地址,学习到**该主机位于接收到该帧接口的LAN网段。**然后将发送主机MAC地址/接口记录到交换表中。

若交换机接收到的帧所标识的目的MAC地址不在表项中,则使用泛洪法(向除接收到该帧的接口之外的所有接口转发)来进行学习。

总而言之,交换机自学习和转发的过程可以被概括为:泛洪选择性转发

默认传统的二层交换机只划分冲突域,只实现数据交换功能
三层交换机具有VLAN、数据交换以及路由功能;但三层交换机的路由功能与路由器的路由功能不太一样。三层交换机的路由主要是为VLAN之间的通信服务的。因为如果是使用实现VLAN的二层交换机,此时如果要进行两个VLAN之间的通信,则需要再加上一个路由器设备来进行不同VLAN之间的路由,这样的话成本高并且麻烦;因此,三层交换机中加入的路由功能就是为了解决这个问题。

NAT

NAT呢? NAT(Network Address Translation,网络地址转换)。用于作为私网(专用网络)和公网通信的中介。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。 NAT的功能: NAT不仅能解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。把内网的私有地址,转化成外网的公有地址。使得内部网络上的(被设置为私有IP地址的)主机可以访问Internet。

NAT分为哪几种?
NAT可以分为Basic NATPAT

  • Basic NAT只转化IP,不映射端口。
  • PAT除了转化IP,还做端口映射,可以用于多个内部地址映射到少量(甚至一个)外部地址。

NAT还可以分为静态NAT动态NAT

  • 静态NAT,将内部网络中的每个主机都永久映射成外部网络中的某个合法的地址,多用于服务器
  • 动态NAT,则是在外部网络中定义了一个或多个合法地址,采用动态分配的方法映射到内部网络。

物理层

物理层部分的知识点可以被整理为以下几个部分:

  • 数据通信基础,就是一些基础概念+宏观通信过程以及同步通信和异步通信
  • 物理介质,就是一些介质,没什么好说的。
  • 信道与信道容量,信道分类和两个信道容量计算公式吧。
  • 基带传输,基带传输的概念和一些特征,然后就是很多码。
  • 频带传输,频带概念、特性,然后加上一些调制方法。
  • 物理层接口规程,这没什么好说的。

数据通信基础

如图是数据通信的宏观视角,包括包含的组成部分以及部分过程: /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/datacon1.png /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/datacon2.png 我直接把概念搬过来吧:

  • 信源:将消息转换为信号的设备,如计算机等。

  • 发送设备:将信源产生的信号进行适当的变换装置,使之适合于在信道中传输。主要包括编码和调制。

  • 信道:信号传输通道,如物理介质。

  • 噪声:自然界和通信设备中所产生的干扰。

  • 接收设备:完成发送设备反变换,还原原始发送信号。

  • 信宿:信号终点,将信号转换为供人们能识别的消息。

  • 数据 (data):传送消息的实体。

  • 信号 (signal):数据的电气的或电磁的 表示:

  • “模拟的 ”(analogous):参数的取值是 连续的

  • “数字的 ”(digital):参数的取值是 离散的

  • 码元 (code):信号基本波形(信号基本单元

  • 频带 (Spectrum):信号频率范围

  • 带宽 (Bandwidth):有效带宽

  • 数据通信方式 :单工、半双工、全双工

  • 并行通信 vs 串行 通信

异步通信和同步通信

然后是异步通信和同步通信。我认为这部分的理解很重要。 同步和异步的主要区别在于是否需要时钟对齐。

/images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/%E5%90%8C%E5%BC%82%E6%AD%A5%E9%80%9A%E4%BF%A1.jpg
  • 对于同步通信来说,其特点是进行连续串行传输数据的通信方式,一次通信只能传送一帧的信息。这里的一帧通常包括若干数据字符。
    同步通信在每个数据分组的开始都要加上同步字符,而且由于同步传输不允许有间隙,在没有信息传输时要填上空字符。为了保障时钟的同步,在数据中需要嵌入时钟信号来保证传输过程中时钟的同步。
  • 而异步通信不考虑时钟同步,收发双方可以有自己的时钟;在异步通信中,发送方每次只发送一个字符,并且发送方所发送的字符之间的时间间隔是任意的;这就意味着接受端必须时刻做好接收数据的准备。
    因此,异步通信采取的方式是:以RS232协议规定为例,异步通信每次只发送一个字符,传输字符时,用‘起始位’(低电平,逻辑值0)标识字符传输的开始,然后紧接着是一个字符的比特,最后以‘停止位’(高电平,逻辑值1)结束。字符数据由5~8位组成,后接1位校验位。
    接收方空闲时,会将保持高电平,因此当接收到起始位低电平0时会有一个下跳沿。此时标志着异步通信字符传输开始。
信源编码

信源编码就是将信源产生的模拟数据(连续)编码为数字数据(离散)。典型的方法是PCM。

物理介质

这块应该不考。感兴趣的看文档。

信道与信道容量

信道分类

狭义上的信道只包括信号传输介质。广义上的信道将通信系统的一些变换装置也算作信道的一部分。如发送/接收设备、天线和调制器等。 /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/%E4%BF%A1%E9%81%93.png

信道容量

首先是信道容量的概念:

  • 信道容量指信道无差错传输信息的最大平均信息速率

如何计算呢?对于无噪声和有噪声的信道,分别有公式来计算信道容量。

  • 理想的无噪声信道使用奈奎斯特信道容量公式来计算信道容量: $$C=2B\log_2(M)$$
    其中,C是信道容量,单位是bps;B是信道带宽,单位是Hz;M是信号状态数。这计算的是理想信道的极限容量
    例题:
    /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/%E6%97%A0%E5%99%AA%E5%A3%B0%E4%BE%8B%E9%A2%981.png

  • 有噪声信道的使用香农信道容量公式来计算信道容量:$$C=Blog_2(1+\frac{S}{N})$$
    其中$\frac{S}{N}$是信噪比,也就是信号能力与噪声能量之比,通常以分贝(dB) 为单位:$$(\frac{S}{N})_{dB} = 10 log_⑩(\frac{信号能量}{噪声能量})$$
    例题:
    /images/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C-%E7%AC%94%E8%AE%B0/%E6%9C%89%E5%99%AA%E5%A3%B0%E4%BE%8B%E9%A2%981.png

基带传输基础

什么是基带信号?

  • 基带信号指的是信源发出的原始电信号;比如模拟信源或数字信源发出的原始电信号就分别叫做模拟基带信号和数字基带信号。
    基带信号中包含较多低频成分,因此基带信号适合在具有低通特性的有线信道中传播,不适合无线信道。

典型的数字基带信号码型包括:

  • 单极不归零码。
  • 双极不归零码。
  • 单极归零码。
  • 双极归零码。
  • 差分码。
  • AMI码。
  • 双相码。
  • nBmB码。

具体看文档。

频带传输基础

为了在不具有低通特性带通信道中传输信号,只能将基带信号进行调制,得到与对应信道传输特性匹配的载波信号来进行信息的传输;即通过在信道中传送经过调制的载波信号实现将基带信号携带的信息传送出去。

带通信道
带通信道(Bandpass Channel)是指一种特定类型的通信信道,它允许一个特定频率范围内的信号通过,同时阻止低于和高于这个范围的频率。这个频率范围被称为带宽。带通信道常用于无线通信系统,如无线网络、广播和手机通信等,因为它们可以减少不同信号之间的干扰,确保信号的清晰传输。
带桶信道如无线信道等不具有低通特性。

名词补充
利用模拟基带信号调制载波,称为 模拟调制 。 利用数字基带信号调制载波,称为 数字调制
数字调制系统

见文档。