原创深度精华好文,网络是如何工作的?建议静下心好好看,收获会颇丰!

举报
wljslmz 发表于 2022/07/28 00:26:08 2022/07/28
【摘要】 很多做IT相关工作的人,多少都会觉得“网络”这个技术已经很老了,非技术人员甚至还有另外一个体会,就是“就应该有网络”,根本就不关心网络是怎么来的,就像很多人每天吃米饭一样,吃饭成了理所当然,但是很多城市孩...

很多做IT相关工作的人,多少都会觉得“网络”这个技术已经很老了,非技术人员甚至还有另外一个体会,就是“就应该有网络”,根本就不关心网络是怎么来的,就像很多人每天吃米饭一样,吃饭成了理所当然,但是很多城市孩子根本不知道一碗米饭来源得有多珍贵:泡种、育种、耕地、养地、插秧、除草去虫、收割、晾晒、去壳…

网络也是如此,我们每天都使用 IP 和 DNS 之类的词,但不了解它们是如何工作的,这种越是基本的理论对于一个有追求、想要突破自己的工程师非常重要,只要你是从事IT相关的,一定离不开网络。

OSI模型

首先,我们需要熟悉OSI 模型。该模型标准化了网络协议之间的通信。

OSI 将通信分为 7 层,每一层都有自己的协议,你会经常听到“它发生在第三层”之类的事情,以下是这些层:

  • 物理层
  • 数据链路层
  • 网络层
  • 传输层
  • 会话层
  • 表示层
  • 应用层

物理层

这一层的协议负责最低层的硬件通信,描述了有线(或无线)数据传输。

协议示例:Wi-Fi、蓝牙、DSL。

数据链路层

数据链路层负责在一个网络中的两个设备之间传输数据,数据以为单位传输,一个帧包含发送方和接收方的物理地址,该地址称为 MAC 地址

那么,谁是发送者和接收者?

首先,每个设备(包括笔记本电脑)都有 NIC — 网络接口控制器。这是一个硬件(或虚拟硬件),负责发送和接收帧。

NIC 有一个 MAC 地址——一个独特的地址,通常嵌入在硬件中或由虚拟化系统生成。

当然,一台机器可以有多个 NIC,让我们看一下使用ip命令的接口:

[root@localhost ~]$ ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:05:36:e6 brd ff:ff:ff:ff:ff:ff

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

在这种情况下,用于通过网络与外界通信的接口是 eth0,其 MAC 地址为52:54:00:05:36:e6。

有个问题:

什么是lo?

lo是一个环回接口,一个特定的虚拟接口,系统使用它与自身进行通信,多亏了lo,即使没有网络连接,本地应用程序也可以相互通信。

一般情况下,每台计算机有数十亿条电缆直接连接到世界上所有的计算机,当然这肯定不是直接连接,需要依赖其他的设备,例如,交换机。

交换机是一种建立网络的设备,我们所有的机器都通过端口连接到它。L2 交换机的任务(有更高级的交换机,比如 L3 甚至 L7)——将帧从 MAC 发送方转发到 MAC 接收方,许多设备连接到一个交换机形成一个局域网(LAN)。

将一堆服务器连接到一个交换机是创建网络最常见的方式,但是如果我们想建立一个物理上位于不同地方的服务器网络呢?或者,比如说,我们想在逻辑上将连接到一个位置的一台交换机的服务器分离到不同的网络中?

对于这种情况,要创建 VLAN(虚拟局域网),它的工作原理非常简单:将带有 VLAN 标记的附加标头添加到帧中,并确定该帧属于哪个网络。

另一种设备是网桥。L2 网桥用于连接两个使用交换机形成的网络,如下所示:

交换机和网桥(以及集线器)都可以实现将多个设备连接到一个网络中。还有连接网络的路由器,它们在 L3 上工作,例如,你家里的 Wi-Fi 路由器将您的局域网(有您的笔记本电脑、手机和平板电脑)连接到互联网。

除了局域网,还有一些其他的网络类型:例如,广域网,可以将 Internet 视为 WAN,但 Internet 完全消除了网络的地理边界。

正如我上面提到的 L3 交换机,它不仅可以将帧从一个设备转发到另一个设备,而且还具有一些更高级的特性,例如路由。那么,你可能会问,路由器和 L3 交换机之间有什么区别?你可以看我之前的文章,或者后面我会再介绍一下。

网络层

在第三层,网络层,使用 IP 地址而不是 MAC 地址,让我们使用以下命令查看我们设备的 IP:

[root@localhost ~]$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:05:36:e6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.212/24 brd 192.168.122.255 scope global dynamic eth0
       valid_lft 2930sec preferred_lft 2930sec
    inet6 fe80::5054:ff:fe05:36e6/64 scope link
       valid_lft forever preferred_lft forever

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

该192.168.122.212/24地址分配给eth0接口。

但什么是/24?为什么环回接口有/8?

我们知道IPv4 地址大概有4 294 967 296 个 ,Internet 不是一个大网络,而是由许多小网络构成,此外,为不同类型的网络(例如,无法从外部访问的专用网络)保留了单独的 IP 地址块。

现在已经慢慢推行IPv6 地址,但尚未完全过渡到 IPv6。

CIDR 是一种为不同类型的网络分配 IP 地址的方法。CIDR 表示法是一种以格式写入此块的方法192.168.122.212/24,其中的数字/24称为掩码,可以了解此块中有多少地址。

IPv4 是一个简单的版本,长度为 32 位,可以用二进制代码表示。在二进制代码中,IP 地址从0000000000000000000000000000000011111111111111111111111111111111。为方便起见,我们将这个数字分成 4 份,每份有 8 位数字:11111111.11111111.11111111.11111111. 在我们习惯的十进制系统中,这个地址看起来像这样:255.255.255.255

掩码/24可以表示为255.255.255.0,或者用二进制表示法表示为11111111.11111111.11111111.00000000。为了找到网络的第一个和最后一个地址,我们可以使用其中一个地址和网络掩码,并对它们的二进制表示法应用按位与:

11000000.10101000.01111010.11010100
&
11111111.11111111.11111111.00000000
=
11000000.10101000.01111010.00000000

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

让我们将结果翻译成人类可读的表示:192.168.122.0是网络地址。为了计算所有可访问地址的数量,我们需要计算掩码中零的数量。在我们的例子中,有 8 个零位置,它们中的每一个都可以拥有 1 或 0 的值,这就是为什么总的来说我们得到 2^8 也就是256 个地址,这意味着最后一个地址将是192.168.122.255。

当然计算这些玩意,知道方法就行了,真正用的时候用计算器计算就可以了。

ARP

我们已经知道 L2 使用 MAC 地址和 L3使用IP 地址,这个时候必须有某种机制将 MAC 地址与其 IP 地址相关联,这种机制称为ARP(地址解析协议)。

Linux 有一个同名命令arp,它允许我们查看设备已知的 MAC 地址表和映射到它们的 IP 地址表。

[root@localhost]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.178.1 ether 5c:49:79:99:f3:23 C wlp3s0

  
 
  • 1
  • 2
  • 3

在这种情况下,192.168.178.1 是我的 Wi-Fi 路由器的 IP 地址,我的笔记本电脑通过 wlp3s0 接口连接到该路由器。

该arp命令被视为已弃用,强烈建议使用ip neigh代替。

有一种网络攻击类型与 ARP 相关,称为ARP 欺骗,这种攻击的目标是用黑客的设备地址替换与某个 IP 地址相关联的 MAC 地址。

DHCP

大家有没有想过这样的问题,网络接口究竟是如何分配 IP 地址的?

选项之一:手动

缺点:手工的会因为认为原因配置重复的地址并产生冲突

另一种选择:动态主机配置协议 ( DHCP )

一种用于自动设置不同配置(包括 IP 地址)的协议。

有关 DHCP 的更多详细信息,请参阅 RFC 文档:https : //www.ietf.org/rfc/rfc2131.txt

要使 DHCP 工作,需要一个 DHCP 服务器,它可以分配 IP 地址。在家里,DHCP 服务器通常位于路由器中。

为了理解 DHCP 究竟是如何工作的,你需要了解“广播”。这是一个过程,我们的服务器将消息传输到网络中的所有服务器,因为它不知道它需要的信息的确切位置,这种广播通信接近于无线电广播。

就比如一个新老师到你班里发作业,不认识学生,那就全班喊“王某某、李某某”,这个就相当于广播了。

在 DHCP 的情况下,它是这样发生的:

  • DHCP 客户端发送带有请求“我需要 IP 地址”的广播消息
  • DHCP 服务器捕获它并发送回广播消息“我有一个 IP 地址 xxxx,你想要吗?”
  • DHCP 客户端收到消息并发送另一个消息:“是的,我想要地址 xxxx”
  • DHCP 服务器回答“好的,那么 xxxx 属于你”
连接设置存储在哪里?

连接设置存储在/etc/sysconfig/network-scripts. 在这里你可以编辑诸如分配 IP 地址的方式(自动或静态)、是否在系统加载时自动启动连接等内容。例如,这就是我的 Wi-Fi 连接配置的样子:

[root@localhost network-scripts]# cat ifcfg-FRITZ-Box_7490
HWADDR=4C:34:88:54:C1:2B
ESSID="FRITZ!Box 7490"
MODE=Managed
KEY_MGMT=WPA-PSK
TYPE=Wireless
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME="FRITZ!Box 7490"
UUID=55ba9218-1d2f-407d-af13-51502d542edb
ONBOOT=yes
SECURITYMODE=open
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

注意BOOTPROTO=dhcp——这个选项意味着我的电脑将使用 DHCP 服务器,用于接收 IP 地址。作为比较,环回设备的连接配置:

[root@localhost network-scripts]# cat ifcfg-lo
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

静态地址在此处指定:IPADDR=127.0.0.1,在家里,你可以使用该工具nmcli或安装软件包Networkmanager-tui,这将在你的控制台中提供一个用户友好的文本界面,而不是手动编辑配置。

下面需要配置一个更重要的东西:路由。

如何理解,流量将流向何处?

一切都很简单:使用ip_r命令查看本地路由表就足够了。

在写这篇文章的时候,我坐在咖啡店里,拿着一台笔记本电脑,它用手机作为路由器。这就是ip_r显示:

default via 172.20.10.1 dev wlp3s0 proto static metric 600
172.20.10.0/28 dev wlp3s0 proto kernel scope link src 172.20.10.3 metric 600
192.168.100.0/24 dev virbr2 proto kernel scope link src 192.168.100.1
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1

  
 
  • 1
  • 2
  • 3
  • 4

如你所见,默认情况下,所有流量都流向地址为 的机器172.20.10.1。如果我运行ip addr show,我会看到我的笔记本电脑上的网络接口也有一个来自这个网络的 IP 地址:

4: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 4c:34:88:54:c1:2b brd ff:ff:ff:ff:ff:ff
    inet 172.20.10.3/28 brd 172.20.10.15 scope global dynamic wlp3s0
       valid_lft 83892sec preferred_lft 83892sec
    inet6 fe80::4e34:88ff:fe54:c12b/64 scope link
       valid_lft forever preferred_lft forever

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

你可以使用该ip r add命令添加新路径,并使用该ip r del命令删除它们。

DNS

你可能已经听说过 DNS,这个名词很简单:请求服务器不是通过它的 IP 地址(人们很难记住),而是通过它的正常名称。

最古老和最流行的 DNS 服务器(存储有关地址的信息并响应请求的服务器)是 BIND。

在 DNS 之前,我们所拥有的只是一个文件 /etc/hosts,现在也经常使用它。

还有一个更有趣的文件 /etc/nsswitch.conf。这是它以什么顺序定义的地方,以及在哪里寻找不同的信息,包括在哪里寻找主机。默认情况下,它们会在 /etc/hosts 中查找,然后才会向 DNS 服务器发送请求。

顺便说一下,用于解析 DNS 名称的服务器在 /etc/resolv.conf 中定义。

最好使用命令 dignslookup 来调试 DNS 问题。例如,要从名称服务器 8.8.8.8 请求有关 mkdev.me 的信息,你需要做的就是:

# dig mkdev.me @8.8.8.8

; <<>> DiG 9.10.3-P4-RedHat-9.10.3-12.P4.fc23 <<>> mkdev.me @8.8.8.8
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3320
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;mkdev.me. IN A

;; ANSWER SECTION:
mkdev.me. 299 IN A 52.28.20.212

;; Query time: 355 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Fri May 27 12:51:04 CEST 2016
;; MSG SIZE rcvd: 53

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

虚拟机

虚拟机,大家都玩过吧,相比于物理机,虚拟机就是运行在物理机的操作系统。

首先,让我们使用 virt-install创建一个 VM :

sudo virt-install --name mkdev-networking-basics-1 \
--location ~/Downloads/CentOS-7-x86_64-Minimal-1511.iso \
--initrd-inject /path/to/ks.cfg \
--extra-args ks=file:/ks.cfg \
--memory=1024 --vcpus=1 --disk size=8

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

默认情况下,libvirt 创建一个网络:

[root@localhost]# virsh net-list
 Name State Autostart Persistent
---------------------------------------------------------------
 default active yes yes

  
 
  • 1
  • 2
  • 3
  • 4

192.168.0.0/16为专用网络分配一个块。libvirt192.168.122.212/24为其网络分配了一个块,这意味着从192.168.122.0到 的所有地址192.168.122.255

要查看有关某个网络的详细信息,可以使用virsh net-infovirsh net-dumpxml。第二个命令将返回更多详细信息,这就是我们使用它的原因:

[root@CentOS-72-64-minimal ~]# virsh net-dumpxml default
<network connections='1'>
  <name>default</name>
  <uuid>f2ee9249-6bed-451f-a248-9cd223a80702</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:83:b4:74'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

connections显示连接到该网络的机器数量,可以在libvirt 文档 中阅读此 XML 文件的所有可能选项的详细说明。

这里解释一下桥接dhcp

网桥或virbr0设备或虚拟网络交换机是一种特殊设备,该网络中的所有 VM 都连接到该设备。在一个网络中从一个虚拟机到另一个虚拟机的所有请求都通过这个虚拟交换机。Libvirt 为每个网络创建一个虚拟交换机,每个交换机都被识别为主机上的一个单独设备:

[root@localhost]# ip link show
8: virbr1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT
    link/ether 52:54:00:a8:02:f2 brd ff:ff:ff:ff:ff:ff

  
 
  • 1
  • 2
  • 3

默认情况下,在 libvirt 中创建网络等同于创建一个所有 VM 都连接到的虚拟交换机,从而创建局域网 LAN。

virbr0 交换机是使用Linux Bridge实现的——一种最初专门用于创建虚拟局域网的技术。

Linux Bridge 与典型的硬件 L2 交换机“略有不同”。在它存在的几年中,它添加了许多功能,例如流量过滤防火墙

<ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

这里声明了用于该网络中虚拟机的地址块,192.168.122.1是此虚拟网络中主机的 IP 地址。

如果我们ip r在 VM 中运行,我们会看到:

[vagrant@localhost ~]$ ip r
default via 192.168.122.1 dev eth0 proto static metric 100
192.168.122.0/24 dev eth0 proto kernel scope link src 192.168.122.209 metric 100

  
 
  • 1
  • 2
  • 3

默认情况下,来自 VM 的流量通过主机与外界通信。

众所周知,DHCP 服务负责分配 IP 地址,Libvirt 将dnsmaq用于 DHCP 和 DNS,并为每个网络运行一个 dnsmasq 实例。

[root@CentOS-72-64-minimal ~]# ps aux | grep dns
nobody 10600 0.0 0.0 15548 856 ? S Apr01 0:02 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
root 10601 0.0 0.0 15520 312 ? S Apr01 0:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
现在我们可以查看 DHCP 表,它会显示分配的地址:
[root@loclahost]# virsh net-dhcp-leases default
 Expiry Time MAC address Protocol IP address Hostname Client ID or DUID
------------------------------------------------------------------------------------------------------------------------
 2016-04-29 16:31:19 52:54:00:05:36:e6 ipv4 192.168.122.212/24 - -

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

注意52:54:00:05:36:e6是我们虚拟机 eth0 接口的 MAC 地址。

NAT

有一个问题:即使我们将网络分成许多块,IP 地址的总数也不会增加。其实,我们平时所用的IP都是私有地址和公共地址的组合。通常,一个公共地址隐藏了很多机器,每台机器都有自己的私有地址。

对于我们的 VM 也是如此。每个都有来自块的私有 IP 地址192.168.122.0/24,并且所有这些都隐藏在主机的公共地址后面。

VM的私有地址在局域网内部可以相互通信的,比如与它的宿主机(就是装有虚拟机的物理机)肯定属于一个局域网,那么它们就是可以相互通信的,但是你在家时没有办法和你基友的虚拟机进行通信的,因为你基友的虚拟机属于一个私有地址,外界网络无法感知。这个就像你在你们村的外号叫二狗子,然后远在美国的某个小妞想要认识你,通过一些手段搜索中国xx省xx市xx县xx村二狗子,这不可能找到的。有人抬杠了,可以问人呀!大哥,计算机不是人,怎么个问人法。

NAT(网络地址转换)将解决这个问题,它是一种解析网络包中 IP 地址的机制。通常,发送方和接收方的 IP 地址都包含在一个包中,NAT 可以动态更改这些地址并保存更改地址表。

还有 SNAT(源 NAT),我们的 VM 使用它来访问 Internet。发送包时,其源地址将替换为主机地址,当来自目标服务器的响应返回时,地址从主机地址更改为 VM 地址,改变地址的是路由器。

DNAT(目标 NAT)的作用几乎相同,但反之亦然:这是当您请求某个隐藏私有本地地址的公共地址时。

NAT 是虚拟机与外界通信的默认方式。但是 libvirt 是一个灵活的东西,例如,您可以将 VM 直接连接到主机的物理接口而不是虚拟交换机。

Libvirt 使用 iptables 进行 NAT。简而言之,这是一个负责过滤网络包的工具,iptables 是在特殊规则的帮助下配置的,这些规则组合在链中。通过添加这些规则,libvirt 允许我们的虚拟机使用 NAT 访问 Internet。当我们谈论一般的安全性时,我们将回到 iptables。

此外,必须在核心设置中启用 ip_forward 选项才能使包重定向在主机上工作。启用它非常容易:echo 1 > /proc/sys/net/ipv4/ip_forward

tcpdump

网络出现问题的时候,终极大招就是调试,调试最常用的工具就是tcpdump。知道如何使用它非常重要,例如,在重新启动 VM 时,我们的 virbr0 上发生了什么。

让我们在主机上打开一个控制台并运行tcpdump -i virbr0.

打开单独的窗口并运行virsh reboot #{number_of_VM}.

查看第一个窗口中的结果,看看哪些请求来自哪里。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on virbr0, link-type EN10MB (Ethernet), capture size 262144 bytes
12:57:31.339135 IP6 :: > ff02::16: HBH ICMP6, multicast listener report v2, 1 group record(s), length 28
12:57:31.397937 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 52:54:00:e0:06:54 (oui Unknown), length 300
12:57:31.398182 IP linux.fritz.box.bootps > 192.168.122.209.bootpc: BOOTP/DHCP, Reply, length 301
12:57:31.590332 ARP, Request who-has linux.fritz.box tell 192.168.122.209, length 28
12:57:31.590373 ARP, Reply linux.fritz.box is-at 52:54:00:7e:33:23 (oui Unknown), length 28
12:57:31.590409 IP 192.168.122.209.38438 > linux.fritz.box.domain: 61342+ A? 0.centos.pool.ntp.org. (39)
12:57:31.590458 IP 192.168.122.209.38438 > linux.fritz.box.domain: 25671+ AAAA? 0.centos.pool.ntp.org. (39)
12:57:31.590618 IP linux.fritz.box.domain > 192.168.122.209.38438: 25671 0/0/0 (39)
### And so on

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

这里是,例如,从VM广播:12:57:31.397937 IP 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 52:54:00:e0:06:54 (oui Unknown), length 300

另外,让我们看看ARP表:

Address HWtype HWaddress Flags Mask Iface
# ...
192.168.122.209 ether 52:54:00:e0:06:54 C virbr0
# ...

  
 
  • 1
  • 2
  • 3
  • 4

虚拟专用网(VPN)

有时(说实话,很多时候)有必要让客户端和服务器看起来都在一个私有网络中。例如,当所有公司服务都在专用网络中时,该网络只能从办公室访问,但您需要为公司员工提供远程访问权限。或者当一家公司有多个办公室或数据中心时,它们需要以这样的方式相互连接。

VPN 本身就是将一个 tcp/ip 包放入另一个包并加密内容。因此,有一个虚拟网络在真实网络内部工作。虚拟网络设备 (tun/tap) 是为虚拟网络创建的,他们拥有只能在我们的虚拟加密网络中访问的虚拟 IP 地址。

关于虚拟专用网,我可以后面多出一些文章详细介绍,在本文就不多阐述了,这个课题太大了,讲的话不是一篇文章就能讲明白的。

自学

我们刚刚介绍了网络的最基本知识,但是,当然还有近十几种技术值得一看。自己google VXLAN,学习TCP和UDP(搞清楚什么时候用哪个),看看IMCP。你会不断遇到新术语,但与往常一样,最重要的是学习基础知识。

我们还没有接触到更高的 OSI 层,也没有研究 Web 应用程序使用的不同协议:HTTP(S)、FTP、SSH、NTP 和许多其他协议。

不要忘记查看RFC。这是在你学习网络的第一站。

文章来源: blog.csdn.net,作者:wljslmz,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_43025343/article/details/119413654

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。