# Notes



## 1.2 Adressierung und Wegewahl anhand von IPv4

Aufbauend auf der Sicherungsschicht, die dafür zuständig ist Rahmen durch ein LAN zu transportieren, werden mit den Funktionen der Vermittlungsschicht (Schicht 3 des ISO-OSI Referenzmodells) Nachrichten von der Quelle bis zum endgültigen Ziel übertragen.

因为数据链路层的建立，**数据链路层是负责通过LAN来传输帧的层**，将会利用网络层的功能将消息从源传输到目的地

Dabei können Teilnetze durchquert werden, die unterschiedliche Schicht 2 Implemen tierungen einsetzen. 
在此过程中可以跨越多个子网，**这些子网使用不同的第二层实现**。

Da die Vermittlungsschicht Datagramme bis zum endgültigen Ziel überträgt, müssen Endpunkte über alle Teilnetze hinweg eindeutig adressierbar sein.
由于网络层将数据报传输到最终目的地，因此端点必须能在所有子网中唯一寻址。

### 1.2.1 Vermittlung und Wegewahl 路由和路径选择（routing and path selection)

Innerhalb einer Broadcast-Domäne (z.B. Ethernet-Bus) können Nachrichten direkt an einen Empfänger zugestellt werden: alle Kommunikationsteilnehmer „hören” die Nachricht auf dem Broadcastmedium. 
在一个广播域内消息可以直接发送给接收者：所有的通信参与者通过广播介质“听到”消息。

Der **Adressat** erkennt an der Zieladresse (es ist seine
eigene!), dass er die Nachricht **auszuwerten** hat. Soll（如果） eine Nachricht nach außerhalb der Broadcast-Domäne des Senders übertragen werden, sind **Koppelkomponenten** erforderlich, die eine *Vermittlung*（路由） der Nachricht ermöglichen. 
接收方通过识别目标地址（就是他自己的地址！），知道他需要处理这条消息。如果要将消息传输到发送方的广播域之外，就需要使用连接组件，这些组件可以实现消息的路由。

Sie kennen bereits die Vermittlung auf der Sicherungsschicht, in geswitchten Ethernet-LANs: ein Switch entscheidet **anhand** einer ihm bekannten Ziel-MAC-Adresse eines Rahmens, an welche(n) seiner Ports der Rahmen ausgegeben werden soll. 
您已经熟悉了路由实在链路层，比如在交换式以太网LAN中，一个**交换机**根据一个已知目的地MAC地址的一个帧，来决定这个帧应该被发送到哪个ports中

Kennt der Switch die Zieladresse des Rahmens noch nicht, so gibt er den Rahmen auf allen Ports aus.
路由器**不知道**帧的目标地址，就会发送帧到所有的端口出去

Zwischen LANs übernimmt die Schicht 3 des ISO-OSI Modells, die Vermittlungsschicht (engl. network layer), die Weitergabe von Nachrichten. 
**LAN使用OSI模型中的第三层（网络层）来转发消息**

Die Komponenten der Vermittlungsschicht heißen Router. 
网络层的组件叫做Router

Ähnlich wie Switches verfügen sie über eine Anzahl **Schnittstellen（接口）**, die in verschiedene Subnetze führen. 
与交换机类似，router有多个接口，这些接口通向不同的子网

Ein Router entscheidet anhand einer Routing-Tabelle und der Zieladresse des Schicht 3 Protokolls, in welches Teilnetz eine Nachricht vermittelt werden soll

一个路由根据路由表和第三层协议的目标地址，来决定应该向哪一个子网路由（传输）数据

![image-20241015231821043](https://lsky.mhrooz.xyz/2024/10/15/fe2decd76d59b.png)

小结：

- **路由器工作在网络层（第三层）**，处理 **IP地址**，并将数据包从一个子网路由到另一个子网。
- **交换机工作在数据链路层（第二层）**，处理 **MAC地址**，在同一子网内的设备之间传输数据。
- 路由器使用多个接口连接不同的子网，并根据路由表来选择合适的接口将数据包发送到目标子网。

### 1.2.2 Das IP-Protokoll (Version 4) IPV4

Die am weitesten **verbreitete** Schicht 3 Implementierung ist das IP-Protokoll in der Version 4 (IPv4, [ RFC 791 ]). 
最广泛使用的第三层实现是IPv4

IPv4 ist ein **verbindungsloses** Schicht 3 Protokoll, d.h. alle Datagramme werden **unabhängig** voneinander zugestellt. 
IPv4是一个无连接的第三层协议，也就是说，所有的数据报都是**独立传送**的

Der Dienst, den IPv4 höheren Schichten zur Verfügung stellt, ist lediglich die Zustellung von Datagrammen zu einem bestimmten Endpunkt. 
IPv4 为更高层提供的服务仅仅是**将数据报传送到特定的终端**。

IPv4 stellt nicht sicher, dass Datagramme in der selben Reihenfolge empfangen werden, in der sie gesendet wurden. 
IPv4 并不能确保**数据报按照发送时的顺序接收**

Ebenso sieht IPv4 keine Funktionen vor, die sicherstellen, dass die Daten unverfälscht am Ziel ankommen. 
同样，IPv4没有提供确保数据未被篡改而到达目标的功能。

Seine Nachfolgeversion IPv6 ist **nicht weniger relevant**, auch wenn es aktuell noch nicht in gleichem Maße **verbreitet** ist.
IPv4的后继者IPv6同样重要,现在还没有像ipv4那么广泛

#### Adressierung

Für die Adressierung in einem IPv4-Netz werden hierarchische 32-Bit Nummern verwendet. 
对于在一个IPv4网络中,用一个32位的分层数字进行寻址

Das heißt IPv4-Adressen (kurz: IP-Adressen) **dienen** sowohl der **Identifizierung der Gegenstellen**, als auch der Strukturierung des Adressraums. 
这意味着IPv4地址（简称IP地址）既用于标识**通信对端**，也用于组织地址空间的结构。

IP-Adressen setzen sich aus einer Netz-ID und einer Host-ID zusammen. IP-Adressen mit der selben Netz-ID gehören zum selben Subnetz. 
IP地址由网络ID和主机ID组成。具有相同网络ID的IP地址属于同一子网.

Ursprünglich wurden IP-Adressen in Subnetzklassen fester Größe eingeteilt (vgl. Vorlesung RNVS), wodurch die Anzahl von IP-Adressen in einem Subnetz immer 256, 65536 oder 16777216 betrug.
最初，IP地址被划分为固定大小的子网类（参见RNVS课程），因此每个子网中的IP地址数量总是256、65536或16777216。”

In heutigen Implementierungen ist die Länge der Netz-ID variabel, um Subnetze unterschiedlicher Größe anlegen zu können.


Dadurch kann bei der Vergabe von Adressblöcken die Anzahl der IP-Adressen besser an die tatsächlich benötigte Menge angepasst werden, wodurch weniger „Verschnitt” (ungenutzte IP-Adressen) entsteht. 

Dieser Ansatz ist als Classless Inter-Domain Routing (CIDR) in [RFC 1519] spezifiziert. 

In jedem Subnetz sind zwei Adressen reserviert: die Netzadresse und die Broadcast-Adresse. 

Die Netzadresse ist die IP-Adresse, bei der alle Bits der Host-ID 0 sind. Die Netzadresse ist die Adresse mit dem numerisch kleinsten Wert im Subnetz. 

Im Gegensatz dazu sind die Bits der Host-ID in der Broadcast-Adresse alle 1. 

Somit ist die Broadcast-Adresse die IP-Adresse mit dem numerisch höchsten Wert im Subnetz.



In jedem Subnetz sind zwei Adressen reserviert: die Netzadresse und die Broadcast- Adresse. Die Netzadresse ist die IP-Adresse, bei der alle Bits der Host-ID 0 sind. Die Netzadresse ist die Adresse mit dem numerisch kleinsten Wert im Subnetz. Im Gegensatz dazu sind die Bits der Host-ID in der Broadcast-Adresse alle 1. Somit ist die Broadcast- Adresse die IP-Adresse mit dem numerisch höchsten Wert im Subnetz.
在每个子网中，有两个地址是保留的：网络地址和广播地址。网络地址是主机ID的所有位都为0的IP地址。网络地址是子网中数值最小的地址。与此相反，广播地址的主机ID的所有位都为1。因此，广播地址是子网中数值最大的IP地址。

Die Einträge einer Routing-Tabelle geben anhand von Zieladressen Routing-Entscheidungen vor. Aufgrund der hierarchischen Vergabe von IP-Adressen muss eine Routing-Tabelle nicht einen Eintrag pro IP-Adresse enthalten, sondern einen Eintrag pro Subnetz. So- mit benötigt der Router aus Abbildung 1.2 drei Einträge in seiner Routing-Tabelle, um Nachrichten an alle fünf dargestellten Rechner weiterleiten zu können:
路由表中的条目根据目标地址做出路由决策。由于IP地址是分层分配的，路由表不需要为每个IP地址包含一个条目，而是为每个子网包含一个条目。因此，图1.2中的路由器只需要在其路由表中有三个条目，就能将消息转发给所有显示的五台计算机。

Ein Eintrag besteht aus einem Ziel-Subnetz und der IP-Adresse der Komponente, die das Ziel erreichen kann (next-hop). Da der Router über eine direkte Verbindung in jedes der drei Subnetze verfügt, sind alle next-hop-Einträge auf der rechten Seite der Routing- Tabelle die eigenen IP-Adressen des Routers. Der Router kann in diesem Fall jedes Ziel *direkt*, d.h. ohne Zwischenschritte (engl. hops), erreichen.
一个条目由目标子网和可以到达该目标的组件的IP地址（下一跳，next-hop）组成。由于路由器直接连接到三个子网中的每一个，因此路由表右侧的所有下一跳条目都是路由器自身的IP地址。在这种情况下，路由器可以直接到达每个目标，也就是说，不需要中间步骤（英文：hops）。

Die Rechner in Abbildung 1.2 sind mit genau einem Subnetz direkt verbunden. Sendet einer davon eine Nachricht, muss der Router diese Nachricht zwischen Sender und Empfänger vermitteln. Sollen Nachrichten zwischen 10.0.0.3 und 10.0.1.3 ausgetauscht werden, so benötigen die Rechner (mindestens) Routing-Tabellen wie in Tabelle 1.1.
图1.2中的计算机每台都直接连接到一个子网。如果其中一台计算机发送消息，路由器必须在发送方和接收方之间进行消息的转发。如果要在10.0.0.3和10.0.1.3之间交换消息，那么这些计算机需要（至少）如表1.1中的路由表。

In manchen Situationen ist es nicht sinnvoll oder möglich für jedes erreichbare Subnetz einen eigenen Eintrag in der Routing-Tabelle anzulegen. Man kann z.B. auf dem Rechner zuhause kaum für jedes über das Internet erreichbare Subnetz einen Eintrag anlegen. Für diesen Fall legt man einen Standard-Eintrag in der Routing-Tabelle an, der genau dann ausgelesen wird, wenn kein anderer Eintrag für eine IP-Adresse gefunden werden kann. Dieser Eintrag wird häufig *default-Route* genannt und enthält als next-hop das *Standard-Gateway* (engl. default gateway). Umgekehrt ist es unter Umständen erwünscht Nachrichten an einen bestimmten Rechner über einen speziellen Pfad zu schicken. Solche Einträge in der Routing-Tabelle, die für genau einen Rechner gelten, heißen *Host-Routen*. Host-Routen können als Subnetz mit genau einer IP-Adresse gesehen werden, also als ein Subnetz mit 32 festen Bits (/32).



#### Wegewahl

Bei der Einteilung von IP-Adressen in Subnetzklassen ist der Algorithmus zur Auswahl einer Route vergleichsweise einfach (vgl. Folien RNVS): die ersten (bis zu vier) Bits einer IP-Adresse bestimmen die Subnetzklasse und damit die Länge der Netz-ID. Die Netz-ID wird ausgelesen und der nächste Zwischenschritt (next hop) in der Routing-Tabelle nachgeschlagen.
在将IP地址划分为子网类时，路由选择算法相对简单（参见RNVS幻灯片）：IP地址的前（最多四个）比特确定子网类，从而确定网络ID的长度。网络ID被读取后，路由表中会查找下一跳（next hop）。

Mit der Einführung von CIDR ist der Entscheidungsprozess komplexer geworden. Die beiden wichtigsten Neuerungen diesbezüglich sind, dass Subnetze nicht mehr zu einer bestimmten Klasse gehören und die Länge der Netz-ID variabel ist. Die Folge dieser Veränderungen ist, dass die Länge der Netz-ID nicht mehr an der IP-Adresse selbst abgelesen werden kann, sondern durch die Einträge in der Routing-Tabelle gegeben werden muss. Anstatt einmal die Netz-ID auszulesen und einen passenden Eintrag dafür zu suchen muss nun die variable Länge berücksichtigt werden.
随着CIDR（无类域间路由）的引入，决策过程变得更加复杂。最重要的两个变化是，子网不再属于某个特定的类，并且网络ID的长度是可变的。这些变化的结果是，网络ID的长度不再能直接从IP地址中读取，而是需要通过路由表中的条目来指定。现在，不再是简单地读取网络ID并找到相应的条目，而是必须考虑到可变的长度。

#### Longest prefix match 

Empfängt ein Router ein IP-Paket, das an die Ziel-IP-Adresse 10.0.0.3 adressiert ist, so liest der Router die Ziel-IP-Adresse aus und durchsucht die Routing-Tabelle nach dem präzisesten zutreffenden Eintrag.
最长前缀匹配（Longest prefix match）：当路由器接收到一个发送到目标IP地址为10.0.0.3的IP包时，路由器会读取目标IP地址，并在路由表中搜索最精确匹配的条目.这段话的翻译如下：



**例子**

假设路由器的路由表包含以下两个条目：

<img src="https://lsky.mhrooz.xyz/2024/10/22/83baace4e7b47.png" alt="image-20241022145812502" style="zoom:50%;" />

**目标**	**next-hop**

10.0.0.0/20	10.0.10.1

10.0.0.0/24	10.0.20.1



“两个条目都可以应用于目标IP地址10.0.0.3：IP地址10.0.0.3的前20位匹配第一个条目，同样的，前24位匹配第二个条目。在这种情况下，将选择更精确的条目，也就是具有更长网络ID的条目。这种策略称为‘最长前缀匹配’（Longest Prefix Match）。”

## 1.3 RNP 基础设施、Linux 和工具

Die Infrastruktur, die für die Durchführung des RNP zur Verfügung steht setzt sich zusammen aus virtuellen Maschinen. Der Zugang zu den virtuellen Maschinen (VM) erfolgt über gruppeXY.rnp.lab.nm.ifi.lmu.de. Diese sind aus dem MWN, zum Beispiel den cip-Pools, erreichbar. Die VMs selbst haben standardmäßig keinen Zugang zum MWNoderdemInternet. Jeder Praktikumsgruppe stehen sieben VMs zur Verfügung, mit denen die Versuche ab OSI Schicht 3 und höher durchgeführt werden. Der Einsatz von virtuellen Maschinen erlaubt es größere Netze mit mehr Knoten zu betreiben, ohne den Management-Aufwand und Platzbedarf vieler physischer Systeme bewältigen zu müssen

用于执行 RNP 实验的基础设施由虚拟机（VM）组成。对虚拟机的访问通过 `gruppeXY.rnp.lab.nm.ifi.lmu.de` 进行，这些虚拟机可以从 MWN（例如 CIP 池）访问。VM 本身默认无法访问 MWN 或互联网。每个实验小组都有七个虚拟机可供使用，实验在 OSI 模型的第三层及以上层次进行。使用虚拟机可以构建具有更多节点的大型网络，而不必应对众多物理系统的管理和空间需求。

### 1.3.1 Linux 简介

 Auf den VMs an denen Sie die Versuche durchführen werden, ist OpenWrt und Debian (GNU/Linux) installiert. Im Rahmen dieses Praktikums werden Sie Linux meistens über ein Terminal bedienen, auf dem ein Kommandozeileninterpreter (Shell) läuft. Nach dem erfolgreichen Anmelden am System startet Linux automatisch eine Shell. Die Standardeinstellung hierfür ist die Bourne-Again SHell (Bash)

在运行实验的虚拟机上安装了 OpenWrt 和 Debian（GNU/Linux）。在本次实验中，Linux 主要通过终端操作，终端是一个命令行解释器（Shell）。成功登录系统后，Linux 会自动启动一个 Shell。默认设置为 Bourne-Again Shell（Bash）。

Jeder Benutzer hat ein eigenes Verzeichnis (Home-Verzeichnis). Für den Benutzer rootist dies das Verzeichnis /root. Für alle anderen Abb. 1.7: Tux Benutzer ist das Home-Verzeichnis ein Unterverzeichnis von /home, das dem Benutzer namen entspricht (/home/). Wann immer sich ein Benutzer in seinem Home-Verzeichnis befindet, wird dieser Pfad von der Bash mit ˜ (Tilde) abgekürzt. Der Aufbau der Eingabezeile kann verändert werden, wodurch der hier beschriebene Aufbau nicht allgemein für alle Benutzer und Systeme gilt. Es hat sich jedoch durchgesetzt, dass am Ende einer Eingabezeile des Benutzers root das #-Symbol steht.

每个用户都有自己的目录（Home 目录）。对于用户 `root`，这个目录是 `/root`。对于其他用户，其 Home 目录是 `/home` 下的一个子目录，与用户名一致（`/home/<用户名>`）。当用户在 Home 目录中时，Bash 会用 `~`（波浪号）简写此路径。输入提示符的结构可以更改，因此此结构并不适用于所有用户和系统。不过已约定，用户 `root` 在命令行提示符的末尾会显示 `#` 符号。

Der wichtigste Befehl beim Arbeiten mit der Bash ist man. Bis auf wenige Ausnahmen existiert für jedes Programm eine Anleitung. Der Befehl man dient dem Lesen von Anleitungen. Ein Befehl auf der Kommandozeile ist häufig ein Programmaufruf, wie z.B. pwd, ls und man. Um die Anleitung für ein bestimmtes Programm einzusehen geben Sie man ein. So erhalten Sie z.B. die Anleitung zu man selbst mittels

在使用 Bash 时最重要的命令是 `man`。几乎每个程序都有一个说明文档，`man` 命令用于查看这些说明。命令行上的指令通常是程序调用，如 `pwd`、`ls` 和 `man`。要查看某个程序的说明，输入 `man <程序名>`。例如，输入以下命令可以获得 `man` 命令的说明：

```bash
# man man
```

要查看 `pwd` 的说明：

```bash
# man pwd
```

Beachten Sie, dass OpenWrt optimiert ist für Router mit wenig Speicherplatz. Aus diesem Grund steht ihnen der Befehl man auf OpenWrt (router1-router3) nicht zur Verfügung. Sie können stattdessen auf die äußere Managementmaschine ausweichen. Die Verwendung der Befehle zwischen Debian und OpenWrt ist meistens identisch

请注意，OpenWrt 针对内存较小的路由器进行了优化，因此在 OpenWrt（如 router1-router3）上无法使用 `man` 命令。不过可以在外部的管理机器上使用 `man` 命令。Debian 和 OpenWrt 之间的命令使用通常是相似的。

偏离标准的情况，例如配置文件文档，可以在 OpenWrt 的在线文档中找到：[OpenWrt 文档链接](https://openwrt.org/docs/start)。

 Abweichungen davon, wie zum Beispiel die Dokumentation von Konfigurationsdateien, f inden Sie in der Online-Dokumentation1 zu OpenWrt. 

**Bash 教程**（[Garr 08]）是入门学习的好资源。教程的各个章节特别推荐“输入/输出重定向”和 Bash 编程部分。通过“输出重定向”可以将程序输出重定向到文件中，便于后续分析。Bash 编程允许编写简化实验任务的小脚本。

Das Bash-Tutorial [Garr 08] ist ein guter Ausgangspunkt für die Einarbeitung. Insbe sondere sei auf die Abschnitte des Tutorials hingewiesen, die sich mit “Input-/Output redirection” und Bash-Programmierung beschäftigen. Mit “Output-redirection” kann man Programmausgaben in eine Datei umlenken und anschließend in Ausarbeitungen einfügen. Bash-Programmierung ermöglicht es kleine Skripte zu schreiben, die oft durch geführte Aufgaben vereinfachen.

### 1.3.2 使用虚拟基础设施

 Jeder Gruppe steht eine virtuelle Infrastruktur in Form von sieben VMs zur Verfügung; drei PCs und vier Router. Alle sieben VMs sind Linux-Rechner. Der Unterschied zwi schen den VM-Arten besteht darin, dass die PCs nur eine Verbindung in die virtuelle Infrastruktur haben, während die Router mit mehreren Maschinen verbunden sind. Die Rechnernamen der VMs sind pc1, pc2, pc3, router1, router2, router3 und router4; diese Bezeichnungen tauchen vor allem in den Aufgabenstellungen auf. 

每个小组都有一个由七个虚拟机（VM）组成的虚拟基础设施，包括三台 PC 和四台路由器。所有七台虚拟机都运行 Linux 系统。PC 和路由器的区别在于，PC 只有一个连接到虚拟基础设施的接口，而路由器连接了多个设备。虚拟机的名称为 `pc1`、`pc2`、`pc3`、`router1`、`router2`、`router3` 和 `router4`，这些名称将在实验任务中频繁出现。

Die Infrastrukturen sind mit 1 beginnend aufsteigend durchnummeriert (analog zu den Gruppen). Damit es bei der Adressierung zu keinen Überschneidungen kommt, ver wenden Sie nur IP-Adressen, die mit 10. Infrastrukturnummer beginnen z.B. 10.1.0.1 ist eine IP-Adresse, die nur in Infrastruktur 1 verwendet werden darf. Das heißt, jeder Infrastruktur ist ein Subnetz 10. Infrastrukturnummer .0.0/16 zugeordnet. 

基础设施的编号从 1 开始，以对应实验小组编号。为了避免地址冲突，每组的 IP 地址从 10 开始，格式为 `10.<组号>.X.Y`，例如 `10.1.0.1` 表示基础设施 1 的一个 IP 地址。每个基础设施的地址范围是 `10.<组号>.0.0/16`。

Jede VM ist an ein Management-Netz angeschlossen. Zugang zu Ihren VMs erhalten Sie, über den Rechner rnp@gruppeXY.rnp.lab.nm.ifi.lmu.de Melden Sie sich zunächst per SSH an (man ssh) und ändern Sie Ihr Startpasswort. Von dort aus können Sie ihre VMs per SSH erreichen. Beispiel: SSH-Aufruf für Gruppe 1 um auf router4 zu gelangen

每个虚拟机连接到一个管理网络。可以通过 SSH 连接到虚拟机，使用 `rnp@gruppeXY.rnp.lab.nm.ifi.lmu.de` 登录，然后更改初始密码。之后可以从该系统 SSH 登录到其他虚拟机。

示例：小组 1 连接到 `router4` 的 SSH 命令：

```bash
ssh rnp@gruppe01.rnp.lab.nm.ifi.lmu.de
ssh root@router4
```

 Auf den VMs wurde Public-Key Authentifizierung eingerichtet, deshalb benötigen Sie an dieser Stelle kein Passwort.

所有虚拟机均已配置为使用公钥认证，因此不需要密码。

**警告**：请不要将数据保存在虚拟机上！虚拟机可能会被自动重置，届时数据会丢失。请将数据保存在您的 CIP 目录中。

通过在远程机器上使用 `tmux`，您可以通过单个 SSH 会话使用多个终端。`tmux` 会话可以被中断并稍后继续。`tmux` 是一种窗口管理工具。

### 1.3.3 IRoute2 - IP 配置

 IProute2 ist eine Sammlung von Programmen für die Steuerung von Netzeinstellungen eines Rechners. Das prominenteste Tool aus dieser Sammlung ist ip. Die Funktionen von ip sind zahlreich und umfassen alles notwendige für die Konfiguration von (logischen) Verbindungen, IPv4-/IPv6-Adressen und Routen. Die man-page zu ip bietet einen Überblick über dessen Mächtigkeit. 

**IRoute2** 是一组用于管理计算机网络设置的程序。该工具集中最常用的工具是 **`ip`**。`ip` 命令提供了丰富的功能，涵盖了配置（逻辑）连接、IPv4/IPv6 地址和路由所需的一切。`ip` 的手册页概述了其强大功能。

Zu den grundlegenden, für das Praktikum relevante, Funktionen von ip gehören

以下是一些在本实验中相关的 `ip` 命令：

| 命令                                     | 说明                                                         |
| ---------------------------------------- | ------------------------------------------------------------ |
| `ip link show`                           | 显示所有网络接口                                             |
| `ip link set ethX up`                    | 激活接口 ethX                                                |
| `ip address show`                        | 显示所有接口的 IP 地址                                       |
| `ip address add 192.168.1.1/24 dev ethX` | 将 IP 地址 192.168.1.1 和子网掩码 255.255.255.0（CIDR 表示法）分配给接口 ethX |
| `ip route show`                          | 显示路由表                                                   |
| `ip neighbor show`                       | 显示 ARP 表                                                  |

使用以下命令可以在命令行上显示当前的路由表：

```bash
ip route show
```

#### 添加路由

要在路由表中添加一条路由，可以使用以下命令：

```bash
ip route add <目标> via <网关>
```

例如：

```bash
ip route add 192.168.1.0/24 via 192.168.1.1
```

这个示例命令会将所有目标为 `192.168.1.0/24` 子网的数据包发送到 `192.168.1.1`。如果省略子网掩码 `/24`，则会添加一个 Host 路由（带有32位的特定 IP 地址）。

#### 删除路由

要删除一条路由，可以使用以下命令：

```bash
ip route del <目标>
```

例如：

```bash
ip route del 192.168.1.0/24
```



注意：

Linux 内核通常不会自动转发 IP 数据包。可以通过 `/proc` 文件系统启用 IPv4 转发，将路径 `/proc/sys/net/ipv4/ip_forward` 中的值设置为 `1`（默认值为 `0`）。使用以下命令来激活 IP 转发：

```bash
echo 1 > /proc/sys/net/ipv4/ip_forward
```



### 1.3.4 `tcpdump` - 数据分析

Das Programm tcpdump zeigt Informationen aus den Protokollheadern eines jeden gesendeten oder empfangenen Pakets. Startet man tcpdump ohne Argumente, so wird der gesamte Datenverkehr aller Schnittstellen eines Rechners analysiert und optisch aufbereitet. Damit Sie auch sicher nur Ihren eigenen Datenverkehr analysieren achten Sie beim Aufruf von tcpdump darauf, dass Sie stets einen entsprechenden Filter für Ihr Subnetz benutzen. Zur optischen Aufbereitung von tcpdump gehört auch das Auflösen von IP-Adressen und Port-Nummern zu Rechner- und Port-Namen. In diesem Praktikum ist diese Anwendung von tcpdump nicht der Normalfall. Statt dessen werden meist folgende Optionen verwendet:

`tcpdump` 程序显示每个发送或接收数据包的协议头信息。如果直接运行 `tcpdump` 而不带参数，它会捕获并分析系统所有网络接口上的所有流量数据。为了确保仅分析自身的网络流量，建议在运行 `tcpdump` 时为特定的子网指定过滤器。在网络分析中，`tcpdump` 还可以将 IP 地址和端口号解析为主机名和服务名，但在本次实验中不使用此功能。建议使用以下 `tcpdump` 选项：

| 选项 | 参数   | 说明                                           |
| ---- | ------ | ---------------------------------------------- |
| `-n` | 无     | 禁止将数值（IP地址和端口）解析为主机和服务名称 |
| `-i` | 接口名 | 仅分析指定的网络接口                           |
| `-e` | 无     | 显示第二层协议头信息                           |

 Zusätzlich zu Optionen implementiert tcpdump eine Filtersprache, die es ermöglicht nur bestimmte Rahmen/Pakete/Segmente zu analysieren. Alle Optionen, sowie die Filter Tastenkombination Strg sprache werden in der manpage und unter [WWW 09] erläutert. tcpdump wird mit der + c beendet.

此外，`tcpdump` 还支持过滤规则，仅分析特定的数据包。所有选项和过滤规则的详细信息可参考手册页或特定文档。按 `Ctrl + C` 可终止 `tcpdump` 的数据捕获。



## Aufgaben 

### A101

**A101 拓扑发现（Topology Discovery）**

**章节 1.3.2** 描述了提供给您的虚拟基础设施，以及如何访问您的虚拟机器。

请为您可用的虚拟机器创建一个网络拓扑图（参见**章节 1.1.2**）！

​	1.	**配置您的虚拟机器**，使用来自您子网的 IPv4 地址！为此请使用 ip 命令！（注：可以使用 ip help 获取帮助）

​	2.	**确定两台虚拟机之间的连接**，通过使用 ping 命令在它们之间发送数据！（注：可以使用 man ping 获取帮助）

​	3.	**创建一个网络拓扑图**，反映您的配置和结果！

这段内容要求你配置虚拟机器的IP地址，使用 ping 命令测试虚拟机之间的连接，并最终绘制一个反映配置的网络拓扑图。

### A102 使用 `tcpdump` 进行故障诊断

在本任务中，使用 `tcpdump` 来查看 ICMP “回显请求”（echo request）PDU。首先在 `pc1` 和 `router1` 之间启动一个 `ping`，然后在其中一台机器上运行 `tcpdump`，以便读取ICMP PDU。

解释当以下情况时，`tcpdump` 的输出：

i) **未使用** `-e` 选项。

ii) **使用了** `-e` 选项。

iii) 现在在 `pc1` 上执行命令 `ifup eth1`，这样 `pc1` 将获得 IP 地址 **172.16.1.100**。给 `router1` 上对应的接口分配 IP 地址 **172.16.1.1**。使用这些地址重新进行 `ping` 操作。

iv) 使用 `tcpdump` 查看 IP 地址的区别，并解释为什么没有收到响应。

v) 纠正错误并展示 `ping` 操作成功的结果。

---

### A103 静态路由

配置虚拟机，使它们能够传输多跳的数据包。**提示**：所有子任务都应该以数据包可以来回传输为目标，即数据包应在发送方和接收方之间双向传输。

要查看并管理设备的路由表，请使用 `ip` 工具：

i) 配置**主机路由**，使得 `pc1` 和 `pc2` 能够相互交换数据！通过 ICMP 回显请求/响应来验证此情况。将成功配置后的路由表截图加入报告！只需提供代表性的表格，确保流程清晰可见。

ii) 将 `pc1` 和 `pc2` 上的主机路由替换为默认路由！

iii) 将路由器上的主机路由替换为到 `pc1` 和 `pc2` 子网的路由！

iv) 从 `pc1` 启动一个到 `pc2` 的 `traceroute`。通过 `tcpdump` 的输出解释其工作方式。

v) 配置路由，使得从 `pc1` 到 `pc2` 的数据**总是**通过 `router4` 传输，而从 `pc2` 到 `pc1` 的数据**永远不会**经过 `router4`。使用 `traceroute` 验证并记录输出结果。画出一个有向的网络拓扑图来展示配置。

---



## Appendix

### Wort

dienen 起到...作用

Gegenstellen **“Gegenstelle”** 可以指你正在与之通信的设备、服务器、客户端等。例如，在一个客户端-服务器模型中，客户端的“Gegenstelle”是服务器，服务器的“Gegenstelle”是客户端。

verbreitet 广泛

vorsehen 计划 安排 提供

unverfälscht 未被篡改

selben 相同的

Reihenfolge 顺序

sicherstellen 确保 保证

Dienst 服务

unabhängig 独立的

Datagramme 数据报

verbreitete 广泛传播的，普及的

verfügen ueber 表示某个设备拥有/具备某些功能

Schnittstellen 接口

anhand 根据 依据

Quelle 源

endgueltigen Ziel 目的地

eindeutig 唯一的

Datagramme 数据报

hinweg 跨越，通过

Empfänger 接收者

Adressat 收件人/接收者

auswerten 分析 处理

Koppelkomponenten 连接组件（路由器 交换机 网桥等等）

Vermittlung 路由

LAN 局域网

Weitergabe 转发

### OSI 七层模型

#### 1. **物理层 (Physical Layer)**

- **功能**：负责传输原始的比特流（0和1），确保数据可以通过物理媒介传输，例如电缆、光纤或无线信号。
- **示例**：网线、光纤、以太网标准（如100BASE-T）、无线电波等。

#### 2. **数据链路层 (Data Link Layer) **sicherungsschicht

- **功能**：负责节点之间的直接数据传输，并提供错误检测和纠正。它将数据划分为帧，并在物理层之上构建可靠的传输。
- **示例**：MAC 地址、交换机、以太网协议、PPP（点对点协议）。

#### 3. **网络层 (Network Layer)** Vermittlungsschicht

- **功能**：负责数据包的路由选择和转发，即决定数据如何从源到达目标。它处理逻辑地址（如IP地址）并决定数据的传输路径。
- **示例**：IP（互联网协议）、路由器、ICMP（用于ping命令）。

#### 4. **传输层 (Transport Layer)**

- **功能**：负责端到端的数据传输，并提供流量控制、分段、错误控制等服务。它确保数据的完整传输，并可能提供数据重传机制。
- **示例**：TCP（传输控制协议）、UDP（用户数据报协议）。

#### 5. **会话层 (Session Layer)**

- **功能**：负责建立、管理和终止会话。它确保在两个系统之间的对话能够正确进行，并提供对话控制功能。
- **示例**：NetBIOS、RPC（远程过程调用）。

#### 6. **表示层 (Presentation Layer)**

- **功能**：负责数据的翻译、加密和压缩。它确保数据可以被目标系统理解，甚至在不同的数据格式之间进行转换。
- **示例**：SSL/TLS（用于加密），JPEG、MPEG（用于数据格式）。

### 7. **应用层 (Application Layer)**

- **功能**：提供网络服务直接给用户。它是用户和网络之间的接口，允许应用程序访问网络服务。
- **示例**：HTTP、FTP、SMTP、DNS（域名系统）、Telnet。



finetuning 的时候用ground truth？

混合accuracy和swap

有没有ddpo改进的点？

先试一试？

可以做一个只有stage 2？

把transformer和reward的loss放一块

针对nas

search

neurips 

discrete state continuous time diffusion for graph generation

有没有什么新的diffusion？针对na的

icml graph





这段内容主要是关于 **IProute2** 工具在Linux系统中配置网络的相关命令和解释。以下是内容的翻译和一些重要信息的补充。



**1.3.3 IProurte2 – IP配置**



**IProute2** 是一组用于控制计算机网络设置的程序。这组程序中最突出的工具是 ip 命令。它提供了许多功能，用于配置逻辑连接、IPv4/IPv6地址和路由。ip 命令的手册页面可以展示它的强大功能。



**表格部分：ip 命令及其解释**



**命令**	**解释**

ip link show	显示所有的网络接口。

ip link set ethX up	激活接口 ethX。

ip address show	显示所有接口的IP地址信息。

ip address add 192.168.1.1/24 dev ethX	给接口 ethX 分配IP地址 192.168.1.1 和子网掩码 255.255.255.0（CIDR表示法）。

ip route show	显示当前的路由表。

ip neighbor show	显示ARP表。



**命令解释：**



​	•	ip link show：显示所有网络接口的详细信息，包括每个接口的名称、状态和MAC地址。

​	•	ip link set ethX up：启用特定的网络接口 ethX，这样接口就可以进行数据传输。

​	•	ip address add：为指定的接口添加一个IP地址，并通过子网掩码定义网络范围。

​	•	ip route show：显示系统的路由表，帮助用户了解数据包的传输路径。

​	•	ip neighbor show：显示ARP表，包含IP地址和MAC地址的映射。



**添加路由命令的用法：**



\# ip route add <目标> via <网关>



**例如：**



\# ip route add 192.168.1.0/24 via 192.168.1.1



这个例子展示了如何添加一条路由规则，所有发送到子网 192.168.1.0/24 的数据包都将通过网关 192.168.1.1 进行转发。如果省略了 /24（子网掩码），则表示这是一个主机路由，专门为某个特定主机添加路由规则。



**删除路由命令的用法：**



\# ip route del <目标>



例如：



\# ip route del 192.168.1.0/24



**注意事项（ACHTUNG）：**



Linux内核默认情况下不会转发IP数据包。如果你需要启用IP转发功能，你必须修改系统设置。



你可以使用以下命令启用IP转发：



\# echo 1 > /proc/sys/net/ipv4/ip_forward



这行命令会将 /proc/sys/net/ipv4/ip_forward 设置为 1，启用IP转发功能，默认值为 0，即禁用转发。



**重要补充信息：**



​	1.	**IP转发功能**：当你启用IP转发时，Linux机器可以作为一个路由器，将数据包从一个接口转发到另一个接口。这对于实现路由和跨子网通信非常关键。

​	2.	**CIDR（无类域间路由）**：在 ip address add 命令中，CIDR表示法（如 /24）用于指定子网掩码的长度，它规定了网络部分的位数，通常用于确定IP地址分配的范围。

	3.	ip **命令 vs** ifconfig **命令**：ip 命令是 ifconfig 的替代方案，功能更强大，能够更精确地处理现代网络配置

**`tcpdump`** 是一个用于捕获和分析网络流量的命令行工具，可以实时监控网络接口上通过的数据包。它非常适合网络故障排查和流量分析。

### 基本用法
最基本的 `tcpdump` 命令如下：

```bash
sudo tcpdump -i <interface>
```

- **`-i`**：指定要监听的接口，例如 `eth0`、`wlan0` 等。如果不指定接口，`tcpdump` 将选择系统的默认网络接口。

### 常用选项

1. **显示所有数据包**
   ```bash
   sudo tcpdump
   ```
   这会捕获系统默认网络接口上的所有数据包。

2. **捕获特定接口上的数据包**
   ```bash
   sudo tcpdump -i eth0
   ```
   这会捕获 `eth0` 接口上的数据包。

3. **指定捕获的数据包数量**
   ```bash
   sudo tcpdump -c 10
   ```
   `-c` 选项表示捕获10个数据包后自动停止。

4. **保存数据包到文件**
   ```bash
   sudo tcpdump -w capture.pcap
   ```
   `-w` 选项会将捕获的数据包保存到 `capture.pcap` 文件中，可以使用 Wireshark 等工具进行详细分析。

5. **读取保存的文件**
   ```bash
   sudo tcpdump -r capture.pcap
   ```
   `-r` 选项从文件中读取并显示捕获的数据包内容。

### 过滤流量
`tcpdump` 支持各种过滤选项，便于精确捕获需要的数据包。以下是一些常用的过滤示例：

1. **过滤特定协议**
   ```bash
   sudo tcpdump -i eth0 icmp
   ```
   捕获 `eth0` 接口上的所有 ICMP（如 ping）数据包。

2. **过滤特定端口**
   ```bash
   sudo tcpdump -i eth0 port 80
   ```
   捕获通过端口 80（HTTP）的所有数据包。

3. **过滤特定 IP 地址**
   ```bash
   sudo tcpdump -i eth0 host 192.168.1.1
   ```
   捕获所有源或目标地址为 `192.168.1.1` 的数据包。

4. **过滤源 IP 或目标 IP**
   ```bash
   sudo tcpdump -i eth0 src 192.168.1.1
   sudo tcpdump -i eth0 dst 192.168.1.1
   ```
   分别捕获源地址为 `192.168.1.1` 和目标地址为 `192.168.1.1` 的数据包。

5. **组合过滤条件**
   ```bash
   sudo tcpdump -i eth0 src 192.168.1.1 and port 80
   ```
   捕获源地址为 `192.168.1.1` 且端口为 80 的数据包。

### 显示数据包的详细信息
`tcpdump` 支持多种详细级别的输出：

- **`-v`**：详细输出
- **`-vv`**：更详细输出
- **`-vvv`**：最大详细输出

```bash
sudo tcpdump -i eth0 -vv
```

### 显示数据包的十六进制和 ASCII 内容
使用 **`-X`** 选项可以显示每个数据包的十六进制和 ASCII 内容：

```bash
sudo tcpdump -i eth0 -X
```

### 捕获并显示链路层头信息
使用 **`-e`** 选项可以显示链路层（如以太网）头信息：

```bash
sudo tcpdump -i eth0 -e
```

### 停止捕获
在终端中按 **Ctrl+C** 可停止捕获数据包，`tcpdump` 会显示捕获的包的统计信息。

### 示例：捕获 HTTP 和 HTTPS 流量
```bash
sudo tcpdump -i eth0 port 80 or port 443
```
该命令捕获 `eth0` 接口上的 HTTP（端口80）和 HTTPS（端口443）流量。

### 示例：捕获并查看特定网络段的数据包
```bash
sudo tcpdump net 192.168.1.0/24
```
捕获源或目标在 `192.168.1.0/24` 网段内的所有数据包。

### 总结
- **接口选择**：使用 `-i` 指定要监听的接口。
- **捕获过滤**：可以根据协议、端口、IP 等设置过滤条件。
- **数据包保存与读取**：使用 `-w` 保存数据包，`-r` 从文件读取数据包。
- **详细信息显示**：`-v`、`-vv`、`-vvv` 设置输出的详细级别。
  

`tcpdump` 是一个功能强大的工具，适用于实时流量分析和网络故障排查。如果你有特定的需求或需要进一步的帮助，请随时告诉我！