层次模型

一共有7层

image-20200426100702045

物理层

信号是随时间变换的,可物理测量的量。信号变化可以对于一个符号。这些符号就是信息。

信息含量(Informationsgehalt)是这个符号可以传递多少信息。

  • 一个信息出现次数越少,它的信息含量越高

  • 字符串的信息含量是所有字符信息含量的和

  • 可预测的字符信息含量是0

信息的定义

信息存在于一个信号的变化预知的不确定性。一个字符 \(x \in X\)信息含量与它出现的概率 \(p(x)\) 有关。 \[ I(x)=-\log _{2} p(x) \quad \text { mit } \quad[I]= bit. \] (Entropie)是一个信息源的信息含量 \[ H(X)=\sum_{x \in X } p(x) I(x)=-\sum_{x \in X } p(x) \log _{2}(p(x)) \] 其中的\(p(x)\) 也可以写成 \(Pr[X=x]\)

有条件的熵

有条件的熵(bedingte Entropie)指当X已知的时候Y的不确定性 \[ H(Y | X)=\sum_{x \in X } p(x) H(Y | X=x)=-\sum_{x \in X } p(x) \sum_{y \in Y } p(y | x) \log _{2} p(y | x) \]

组合熵

X,Y一起发生. \(p(x,y)\) 是Verbunddichte. \[ p(x, y)=\operatorname{Pr}[X=x | Y=y] \operatorname{Pr}[Y=y] \\ H(X, Y)=-\sum_{x \in X } \sum_{y \in Y } p(x, y) \log _{2} p(x, y) \] 组合熵和有条件熵的计算 \[ H(X, Y)=H(X)+H(Y | X) \\ H(Y | X)=-\sum_{x \in X } \sum_{y \in Y } p_{X Y}(X=x, Y=y) \log _{2}\left(p_{Y}(Y=y | X=x)\right) \]

传递信息

image-20200426110459205

传递信息(Transinformation)是原来的信息减去失去的信息 \[ I(X ; Y)=H(X)-H(X | Y)=H(Y)-H(Y | X) \]

数据链路层 Sicherungsschicht

我们首先考虑直接连接的网络

  • 所有节点可以直接到达
  • 节点用简单地址表示
  • 没有数据传递Vermittlung
  • 可以简单继续传接(Bridging, Switching)

数据链路层的主要任务是

  • 控制媒介寻址
  • 检查携带的信息是否有错误
  • 在直接连接的网络中寻址

网络的图表示

有向图

一个非对称asymmetrisch 的网络可以用图有向图\(\mathcal{G}=(\mathcal{N}, \mathcal{A})\) 表示

其中 \(\mathcal{N}\) 是点的集合, \(\mathcal{A}=\{(i,j)|i,j \in \mathcal{N} \}\) 是有向边的集合

无向图

一个对称的symmetrisch网络可以用无向图 \(\mathcal{G}=(\mathcal{N}, \mathcal{E})\) 表示

其中 \(\mathcal{N}\) 是点的集合, \(\mathcal{E}=\{\{i,j\}|i,j \in \mathcal{N} \}\) 是无向边的集合

路径Pfad

一个路径从 \(s\)\(t\) 可以用集合表示: \[ \mathcal{P}_{s t}=\{(s, i),(i, j), \ldots,(k, l),(l, t)\} \] 路径的花费Pfadkosten是所有边花费的总和 \[ c\left(\mathcal{P}_{s t}\right)=\sum_{(i, j) \in \mathcal{P}_{s t}} c_{i j} \] 路径长度 Pfadlänge是所有边的数量,也叫 Hop Count \[ l\left(\mathcal{P}_{s t}\right)=\left|\mathcal{P}_{s t}\right| . \]

网络拓扑结构

Topologie 描述图的结构

  • 物理结构
  • 逻辑结构

重要的拓扑结构

  • 点对点 Punkt-zu-Punkt

    image-20210625223259448
  • 链 Kette

    image-20210625223443911
  • 星星Stern

    image-20210625223456683
  • Vermaschung

    image-20210625223524112
  • 树 Baum

    image-20210625223544737
  • 总线 Bus

    image-20210625223601885

邻接矩阵和距离矩阵

邻接矩阵Adjazenzmatirx: \[ \boldsymbol{A}=(a)_{i j}=\left\{\begin{array}{ll} 1 & \exists(i, j) \in \mathcal{A} \\ 0 & \text { sonst } \end{array}, \forall i, j \in \mathcal{N}, \quad \boldsymbol{A} \in\{0,1\}^{N \times N}\right. \] image-20210625223704683

距离矩阵Distanzmatrix: \[ \boldsymbol{D}=(d)_{i j}=\left\{\begin{array}{ll} c_{i j} & \exists(i, j) \in \mathcal{A} \\ 0 & \text { wenn } i=j, \quad \forall i, j \in \mathcal{N}, \quad \boldsymbol{D} \in \mathbb{R}_{0+}^{N \times N} \\ \infty & \text { sonst } \end{array}\right. \] image-20210625223749771

生成树结构

  • 最短路径树(Shortest Path Tree)
  • 最小生成树(Minimum Spanning Tree)
image-20210625223910908

连接特征

  • 传递率 Übertragungsrate
  • 传递延迟Übertragungsverzögerung
  • 传递方向Übertragungsrichtung
  • 多次访问Mehrfachzugriff

我们首先讨论点对点的连接

传递率

传递率 \(r\) (bit/s) 决定传递 \(L\) 的数据块所需要的时间,这个时间称为序列化时间 Serialisierungszeit \[ t_{s}=\frac{L}{r} \]

Ausbreitungsgeschwindigkeit

是一个距离 \(d\)

Ausarbeitungsverzögerung传递延迟

\[ t_{p}=\frac{d}{\nu c_{0}} . \]

其中 \(d\) 是传输距离,\(c_0\) 是光速,\(\nu\) 是介质的传输倍率(relative Ausbreitungsgeschwindigkeit in einem Medium)

传输时间Übertragungszeit

\[ t_{d}=t_{s}+t_{p}=\frac{L}{r}+\frac{d}{\nu c_{0}} \]

Bandbreitenverzögerungsprodukt

同一时间传输的bit数 \[ C=t_{p} r=\frac{d}{\nu c_{0}} r \]

Multiplex

ALOHA

假设有很多节点 \(N>15\) , 每个结点有相同且独立的发送概率,发送的信息大小相同(发送时间$ T$ )

每个节点发送到中心,如果两个节点同时发送数据就会产生冲突collision

可以用伯努利实验来建模,因为有许多节点,所以它是二项分布的。当 \(N\) 很大的时候,可以用泊松分布近似

\(Np=\lambda\) 是泊松分布的参数

事件 \(X_t\) 是在区间 \([t,t+T)\) 中发送数据的节点数量 \[ \operatorname{Pr}\left[X_{t}=k\right]=\frac{\lambda^{k} e^{-\lambda}}{k !} \] 假设一个节点在 \(t_0\) 的时候发送了数据

image-20210701122623774

那么在 \([t_0-T,t_0+T]\) 的时间里都不能有其他节点发送数据 \[ p_{0}=\operatorname{Pr}\left[X_{t_{0}-T}=0\right] \operatorname{Pr}\left[X_{t_{0}}=1\right]=\mathrm{e}^{-\lambda} \lambda \mathrm{e}^{-\lambda}=\lambda \mathrm{e}^{-2 \lambda} \] 那么 \(p_0\) 就是不发生冲突的概率

Slotted ALOHA

节点不会在任意一个时间点发送,而是在离散的点发送 \(t = nT, n=0,1,2,...\) \[ S=\lambda \cdot e^{-\lambda} . \] 现在Kritischer Bereich就变小了,不发生冲突的概率就增大了为 \(S\)

Carrier Sense Multiple Access (CSMA)

CSMA 一个队 slotted aloha 的优化: „Listen Before Talk“在说之前听

它监听,只在空闲的时候发送

它还有不同的种类

  • \(1\)-persistentes CSMA

    当没有媒体的时候,开始发送

    如果有媒体,那么等到它结束了再发送

  • \(p\)-persistentes CSMA

    当没有媒体的时候,有 \(p\) 的概率开始发送。\(1-p\) 的概率等待一会,然后重新判断

    当有媒体,那么等到结束之后再重新判断

  • nicht-persistentes CSMA

    当没有媒体的时候,开始发送

    如果有媒体,随机等待一个时间段然后再判断

image-20210701123807074

这个是目前所有时间的比较

CSMA/CD (Collision Detection)

检查到冲突的时候,重新发送

如果没有冲突那么就发送

  • 发送端要能在发送的同时检测冲突

要检测冲突,那么对发送数据的长度也有要求

发送数据的最短长度是 \(L_{min}\) \[ L_{\min }=\frac{2 d}{\nu c_ {0}} r \] image-20210701130330769

否则 \(i\) 识别不出冲突

如果用 \(1\)-persistentes CSMA 会有问题

  • 冲突会影响两个发送站
  • 至少1个发送站要发送 Jam-Signal
  • 等待过后又会有冲突

解决方案:

在第 \(k\) 次等待的时候,等待如下的时间 \[ n \in\left\{0, \ldots, \min \left\{2^{k-1}-1,1023\right\}\right\} \]

这样就会减小重复发送的时间

CSMA/CA (Collision Avoidance)

如果是一个WIFI的无限网络,那么就很难检测冲突。因为 \(i\) 对于 \(j\) 是隐藏的站点 „Hidden Station“

image-20210701131151115

这个时候用 \(p\)-persistentes CSMA

RTS/CTS是这个方法的一个拓展

有一个控制中心,站点发送数据前先向数据中心发送请求 RTS(Request to send). 数据中心再发送 CTS(Clear to send) 回复。站点被允许发送的时候就可以发送,否则就继续等待一个CTS里要求的时间

image-20210701134408992

优点:Longest Prefix Matching

  • 避免隐藏站点来减少冲突,但是不能完全避免
  • 减少冲突

缺点:

  • 如果 B 不接受 CTS的话就会发生冲突
  • RTS/CTS 减少最大可以达到的传递率Datenrate

Token Passing

所有站点连成一个环,然后传递一个Token,只有当拿到Token的时候才可以发送,发送完之后,要将Token传递给下一个站点

会有一个站点Monitor-Station来监督,如果 Token丢失了,那么会重新生成一个

优点:

  • 高效,没有冲突
  • 保证最大延迟

缺点:

  • 需要监督站点
  • 一个站点出错会影响其他站点
  • 发送延迟会更高,因为要等待Token
  • 把站点连成环的代价高

源数据,寻址,识别错误

识别数据

image-20210701135224953

如何在一串数据流中识别两个不同的数据。

Längenangabe der Nutzdaten

在数据的开始标明长度

image-20210701135352639

但是怎么知道一个数据从哪里开始:

通过控制字符Steuerzeichen

每个 4bit 的数据会被唯一的映射到 5bit的数据里

通过 J/K 控制开始,T/R 控制结束

image-20210701135602516
通过分隔符Begrenzungsfelder und Bit-Stopfen

用一定的bit序列来标注开始和结束,然后再源数据中不会出现这些符号

比如开始结束用 01111110

然后数据是 1100101111110111111 ,在每5个1后加入一个0

image-20210701140221374
Coderegelverletzung

通过特定的信号控制来识别

image-20210701140328046

寻址Adressierung

在直接连接的网络中,节点之间是直接连接的,不需要路由Vermittlung (engl. Routing)。我们需要唯一确定在网络中的每一个节点。

在Schicht2中的的地址是 MAC地址(Media Access Control)

image-20210701140821637

在IEEE 802-Standards标准下的MAC地址是有如下的结构

image-20210701140924389

网卡在工作后会在 RAM里留下MAC地址

在制造网卡的时候MAC地址是唯一的, 制造商可以通过MAC地址确定他们的设备,比如苹果的是 7c:6d:62

如果是广播的话,MAC地址都是1:ff:ff:ff:ff:ff:ff

识别错误

在传播数据的时候,会产生错误。为了减少错误就需要可以识别错误的编码fehlererkennende Codes

Cyclic Redundancy Check (CRC) 是一个识别错误的编码族群

长度为 \(n\) 的数据串可以表示成一个多项式 \[ a(x)=\sum_{i=0}^{n-1} a_{i} x^{i} \text { mit } a_{i} \in \mathbb{F}_{2} \text { mit } \mathbb{F}_{2}=\{0,1\} \]\(F_q[x]\) 是表示所有长度为 \(n\) 的数据的集合,\(q=2^n\) \[ F_{q}[x]=\left\{a \mid a(x)=\sum_{i=0}^{n-1} a_{i} x^{i}, a_{i} \in \mathbb{F}_{2}\right\} \] 我们可以定义加法和乘法 \[ c(x)=a(x)+b(x)=\sum_{i=0}^{n-1}\left(a_{i}+b_{i}\right) x^{i} \] 这里相加是 XOR 运算 \[ d(x)=(a(x) \cdot b(x)) \bmod r(x) \] 计算乘法的时候,我们选取一个Reduktionspolynom \(r(x)\), 这里 \(r(x)\) 必须满足 irreduzibel 且 如果 \(a(x),b(x)\) 的最高位是 \(n-1\), 那么 \(r(x)\) 的最高位是\(n\)

也就是 \(r(x)\) 不能表示为两个 \(n-1\) 集合中多项式相乘的结果

image-20210701154525978

对于CRC策略,它选取 \(r(x)=p(x)(x+1)\)

若信息是 \(m(x)\)

  1. 首先在结尾加上 \(n\)\(0\), 即\(m^{\prime}(x)=m(x) \cdot x^{n}\)
  2. 然后求余数 \(c(x)=m'(x) \bmod r(x)\)
  3. 最后发送 \(s(x) = m'(x) +c(x)\)

对于接受方而言,收到的信息是 \(s^{\prime}(x)=s(x)+e(x)\)

如果满足 \[ c^{\prime}(x)=s^{\prime}(x) \bmod r(x)=(s(x)+e(x)) \bmod r(x) \]\(c'(x)=0\) 那么大概率是没有错误的

否则就有错误

CRC能纠错的类型

  • 所有 1 bit-Fehler
  • 隔离的 2bit-Fehler ,就是两个 \(i,j\) 距离 \(i-j>n\)
  • 一些长度大于 \(n\) 的 Burst-Fehler

1层和2层的连接方式

Hub, Bridges und Switches

Hub:

A 发送到 D点, Hub通过总线连接所有节点。发送的信息所有节点都能收到。每次只能1个节点发送,否则会产生冲突

image-20210701155353342

Aktive Hubs (Repeater): 增强物理信号后转发

Passive Hubs: 只是转发

Switch交换机

image-20210702081628084

两组通过Hub连接的主机,再连上了交换机。交换机相当于有2个端口的Hub,它知道数据从哪个端口传输过来。只街上2个的交换机也叫做桥 Bridge

如果发送的信息有Eintrag登记,那么只会发送到登记的那个端口。

image-20210702082007193

交换机可以划分冲突区域(Kollisionsdomänen,Segmentierung),不同区域的可以同时发送信息

image-20210702082343169

如果每个区域只有一个主机,那么称为(Microsegmentation,vollständig geswitchtem Netz)

交换机可以连接不同通讯协议(Zugriffsverfahren)的网络段, 这种连接是 transparent 的。节点不知道是否使用了交换机。

image-20210702082543204

WLAN Access Points

WLAN Access Point是连接有线和无限传递(Funkübertragung)的桥梁, 在有线连接是 RJ45-Interface, 在无线方向是Wireless Transceiver。

与交换机不同的是,对于WLAN的客户端来说是nicht transparent 的

如果PC1给NB2发送信息,首先确定Source Address (SA) und Destination Address (DA)

image-20210702083719157

然后经过交换机,因为交换机不知道 NB2,所以会发送给除了发送者的所有人

image-20210702083753979

然后AP知道NB2的地址,发送给NB2,Transmitter Address (TA)就是AP的地址,然后NB1会忽略这个信息

image-20210702083911532

然后NB2再发送回来

image-20210702084059867

再发给交换机

image-20210702084122539

交换机知道PC1,所以只发个PC1

image-20210702084143221

网络层Vermittlungsschicht

中转的类型Vermittlungsarten:

  1. Leitungsvermittlung
  2. Nachrichtenvermittlung
  3. Paketvermittlung

Leitungsvermittlung电路交换

有3步

  1. 建立连接Verbindungsaufbau
  2. 交换数据Datenaustausch
  3. 断开连接Verbindungsabbau
image-20210702090258393

计算传输时间: \[ T_{L V}=2 t_{p}+t_{s}+2 t_{p}=t_{s}+4 t_{p}=\frac{L}{r}+\frac{4 d}{\nu c_{0}} \] 优点:

传输质量稳定,传递快速,不需要其他传递

缺点:

如果不一直用的话,会浪费资源。建立连接复杂。建立物理连接花费高

报文交换

长度为 \(L\) 的信息会加入长度为 \(L_H\) 的头

image-20210702092836254

头包含发送者,接收者地址,中站站以及一些信息。然后头和信息一起传输

image-20210702094819239

如果有2个中转站: \[ T_{N V}=(n+1) \cdot t_{s}+t_{p}=(n+1) \cdot \frac{L_{H}+L}{r}+\frac{d}{\nu c_{0}} \] \(t_s\) 是序列化时间,\(t_p\) 是总共传输时间

Multiplexing的情况:

如果是多个在一起的话,可以重复使用某个路段,称为(Zeitmultiplex) (Time Division Multiplex, TDM)

image-20210702100235315

优点:

Flexibles Zeitmultiplex von Nachrichten

节约资源,开始没有建立连接的延迟

缺点:

如果 \(i,j\) 在使用中,那么信息传输会被缓存Pufferung

如果 Puffer 有限,那么会丢失信息

同一个信息会有多次序列化时间

分组交换

信息被分成若干个小单元,分次发送

image-20210702100627511

每个小单元会有自己的头

image-20210702100656321

每个小单元不一定是相同长度的,但是有一个长度的上限\(p_{max}\)

image-20210702100807798

此时的传输时间是: \[ T_{P V}=\frac{1}{r}\left(\left[\frac{L}{p_{\max }}\right] \cdot L_{h}+L\right)+\frac{d}{\nu c_{0}}+n \cdot \frac{L_{h}+p_{\max }}{r} \] 如果是多个传输的话

image-20210702100959210

如果丢失包了,只需要重新发送一小段

优点:

Flexibles Zeitmultiplex einzelner Pakete

只需要缓冲小的数据包

缺点:

可能会丢失数据包,每个数据包必须有头,接收者要重新组合数据包

网络中的地址

IPv4 (Internet Protocol v4)

我们考虑一个路由器的网络

image-20210702101422743

每个主机有一个IP地址,每个IP地址是四组数字用点分隔

每个发送包要有发送者的IP和接收者的IP

image-20210702101602606
IPv4-Header
image-20210702101738903

Version是IP地址的版本,可能的值是 46

IHL (IP Header Length) 是IP头长度,长度一般是32bit 的倍数

TOS (Type of Service)区分服务,

Total Length

  • 这个IP包裹的长度(Header+Daten)
  • 最长的是 65535 B

标志Flag:

  • DF(Don't Fragment) 不能分片
  • MF(More Fragment) 后面还有分片(=1), 后面没有分片(=0)

Fragment Offset片偏移:

该分片在原来数据中的位置

生存时间TTL(Time To Live):

表示这个数据的再网络中的寿命,转发一次就减1,0就丢弃

协议Protocol 如 TCP,UDP

首部检验和Header Checksum 只检验数据报的首部,只检查,不修改

源地址Source Address 发送者的IP地址

目的地址Destination Address 接受者的IP地址

可变部分Options / Padding IP支持的选项可以填在这里,如果不足4B的倍数可以在这里填充

在发送之前要把 Host Byte Order (Little Endian bei x86) 转成 Network Byte Order (Big Endian)

ARP请求

主机1知道主机2的IP地址,但不知道它的MAC地址。所以主机1发送一个ARP请求,询问主机2的MAC地址。然后主机2发送ARP回复,回复它的MAC地址

image-20210703051114332

ICMP协议

IP协议支持发送数据包到目的主机,但是可能会发生问题:包陷入死循环,不能找到目标主机,不能解析MAC地址...

ICMP可以告知发生的错误类型和支持其他操作,如Ping,Redirect

image-20210703055653971

从主机1 Ping 主机2

首先主机1选择一个随机的Identifier(16bit), Echo Request像IP包那样传递。如果主机2拿到了 Echo Request,那么它会回复 Echo Reply。如果出错了,ICMP互发回一个错误码

image-20210703065230457

如果包的TTL变成0了,那么会返回超时的错误

ICMP还可以Traceroute,跟踪数据包经过的节点

它发送若干个数据包,第一次发送一个 TTL=1的,第二次TTL=2的,然后就能知道经过哪些节点了

image-20210703065501278

Dynamic Host Configuration Protocol (DHCP)

主机如何获得IP地址:自动分配(通过DHCP服务器)和手动分配

首先客户端发送DHCP-Discover(广播),DHCP服务器回复DHCP-Offer里面有分配的IP地址。

客户端回复DHCP-Request 表示确定要这个地址,然后DHCP服务器回复DHCP-ACK或者 DHCP-NACK表示接受或者拒绝。

image-20210703065846776

IP地址的类型分成5类

image-20210703070000960

因为后来IP地址不够用了,于是就引入了子网的概念Subnetze

网络接口除了IP地址外,还有32bit的子网掩码Subnetzmaske

子网掩码把IP地址分为网络部分Netzanteil和主机部分Hostanteil

1表示Netzanteil,0表示Hostanteil

IP地址和子网掩码共同组成网络地址Netzadresse

image-20210703070411261

IPv6

它与IPv4的变化主要是:增大了IP地址到128bit,简化了头,改变了IP-Fragmentierung..

IPv6地址和IPv4地址类似,但是分成了16组

image-20210704040337269 \[ 2001:0db8:0000:0000:0001:0000:0000:0001 \] 对于这个地址

多个0可以用1个0表示: \[ 2001:db8:0:0:1:0:0:1 \] 最前面的最长的连续0可以省略 \[ 2001:db8::1:0:0:1 \]

IPv6头
image-20210704040540324

Traffic Class:和IPv4的TOS类似

Flow Label:用于识别哪些数据包是在一起的

Payload Length: 后面数据的长度

Next Header: 下一个头的类型(如TCP,UDP)

Hop Limit : 对于Ipv4 的 TTL

扩展的IPv6协议支持把 Layer 3的信息也一起打包

特殊的IPv6地址

::1/128 Localhost

::/128 未指定的地址

fe80:: / 10 – Link-Local Adressen

fc00: / 7 Unique-Local Unicast-Adressen

ff00:: / 8 Multicast-Adressen

Multicast

ff02::1 – All Nodes

ff02::2 – All Routers

ff02::1:2 – All DHCP-Agents

ff02::1:ff00:0/104 – Solicited-Node Address

从 IPv6地址映射到MAC地址 \[ f f 02:: 1: f f c 6: 938 b \quad \mapsto \quad 33: 33: f f: c 6: 93: 8 b \]

SLAAC

IPv6允许在子网里自动配置主机

image-20210704043643168

前缀是 fe80::/10

Subnet Identifier 是 0

ICMPv6
image-20210704043847439
Neighbor Discovery Protocol (NDP)

路由Wegwahl(Routing)

静态路由Statisches Routing

image-20210704044115882

R1 如何确定数据包该往哪里走

Routing Table

在路由表里有

  • 目标地址
  • 前缀长度
  • 下一个Next-Top(网关)
  • 可以到大Next-Top的接口
  • 达到目标的花费
image-20210704044338044
匹配最长前缀Longest Prefix Matching

动态路由

bellmanford算法,dijkstra算法

运输层

UDP

TCP

Sitzungsschicht

应用层Anwendungsschicht

网络安全

网络分析工具

Wireshark

1
sudo pacman -S wireshark-qt

sudo wireshark 来启动,这样才能读取到网卡信息

ARP协议

Socket抽象层是应用层和传输层直接的软件抽象层。它把TCP/IP协议封装成一个借口给程序员使用。

  • 流套接字 TCP
  • 数据表套接字 UDP
  • 原始套接字 可以发送从应用层到链路层的数据。

VPN

VPN(Virtual Private Network) 是利用开放的公众IP网络建立专用数据传输通道,将远程的分之机构、移动办公人员连接起来。

按隧道网络

第二层隧道网络:L2TP,PPTP,L2F。

原始数据包 -> PPP封装-> L2TP封装 - > 新增ip头+L2TP头+PPP头+原始数据包

第三层隧道协议:如IPSec

SSTap-beta