开源技术 * IBM 微讲堂:Kubeflow 系列(观看回放 | 下载讲义) 了解详情

学习 Linux 101:互联网协议基础知识

概述

本教程中,将学习 Linux 系统的 TCP/IP 网络基础知识。学习内容:

  • 了解网络掩码和无类域间路由 (CIDR) 表示法。
  • 了解专用和公用点分四元组 IP 地址之间的区别。
  • 了解常见的传输控制协议 (TCP) 和用户数据报协议 (UDP) 端口和服务,例如 20、21、22、23、25、53、80、110、123、139、143、161、162、389、443、465、514、636、993、995。
  • 了解 UDP、TCP 和互联网控制消息协议 (ICMP) 之间的区别及其主要功能。
  • 了解 IPv4 和 IPv6 之间的主要区别。
  • 了解 IPv6 的基本功能。

Linux 中的网络

在当今世界,计算机网络让信息共享、研究和商务跨越了国界,覆盖全球。想要考察肯尼亚国家公园?当然可以。希望买一张瑞士火车票?也没问题。给街上或者另一个大洲的人发电子邮件。欣赏外太空的照片。计算机网络让这一切都能够更加轻而易举地实现。

本教程将帮助您围绕 Linux 系统管理员 (LPIC-1) 考试 101 的 109 主题中的 109.1 目标进行应考准备。该目标的权重为 4。本教程反映了 2018 年 10 月 29 日更新的 5.0 版本的目标。

前提条件

要想最充分地利用本系列教程,您应该掌握 Linux 的基本知识,还应该有一个正常工作的 Linux 系统,您可以在这个系统上练习本教程中涵盖的命令。有时,不同版本程序的输出格式也有所不同。因此,您的结果可能不一定与这里显示的清单和数字完全相同。本教程中的示例来自 Fedora 29 和 Ubuntu 16.04.6 LTS。

分层通信

在早期的计算机网络中,主要是计算机与终端设备进行通信。电传打字机或类似打字机的终端通常使用异步协议,并以低至每秒 110 位的速度运行。传输的每个字符都包含一个开始位和一个结束位。远程作业输入终端需要传输大量的数据(如卡图像或打印文件),并使用诸如二进制同步通信 (BSC) 之类的同步协议。传输的每个数据块都包含特殊的块开始字符和块结束字符。 此类设备的典型速度在 2400 bps 至 9600 bps 之间。通信协议是专有协议,内置在设备中,因此使得设备间互操作变得十分困难。

20 世纪 70 年代中期,IBM 引入了同步数据链路控制 (SDLC) 作为系统网络架构 (SNA) 的链路协议。与早期的链路协议相比,SDLC 具有以下优势。

  • 面向位:各个传输帧之间使用特殊八位位组(二进制“01111110”)进行定界。在帧内部会插入一些额外的 0 位,以防止在帧内出现 6 个 1 位的序列,从而允许将整个 256 个八位位组作为数据进行传输。
  • 轮询或点对点操作:同一协议既支持对由主设备控制的线路上的多个辅助设备执行轮询操作,也支持线路上的两个对等方建立直接连接。
  • 全双工或半双工:数据传输可以在两个方向上同时进行,也可以像在早期协议中那样交替进行。
  • 错误检查:SDLC 提供了比早期协议更好的错误检查和纠正功能。它使用了按照循环冗余校验 (CRC) 原理计算的 16 位帧校验序列 (FCS)。

1979 年,国际标准化组织 (ISO) 将 SDLC 标准化为高级数据链路控制 (HDLC) 协议,并随后提供了进一步的扩展。这成为了开放系统互连 (OSI) 的 ISO 7 层模型的第 2 层。表 1 显示了四个较低的层。

表 1. OSI 的四个较低层

名称 用途
1 物理 数据传输的电气和机械方面,例如,电压等级和连接器引脚分配。
2 链路或数据链路 在一对设备之间传输数据帧。
3 网络 在终端设备(例如计算机)之间建立路径。 从备用路由中进行选择,并将消息分解为可在第 2 层(链路层)上传输后重新组合的数据包。
4 传输 在两台计算机之间进行数据传输和流控制。

互联网协议 (IP) 是第 3 层协议。TCP、UDP 和 ICMP 是第 4 层协议。 本教程向您展示了有关这些网络部分的更多信息。

互联网协议 V4 – IPv4

互联网协议 V4(简称为 IPv4)多年来一直是网络的主力军。IPv4 网络中的每个设备都具有一个 4 字节地址。习惯上使用点分四元组表示这些地址,每个字节都用一个十进制数字表示,各个数字之间用点分隔。示例:192.168.1.5、8.8.8.8 或 129.42.38.10。

子网、类、掩码和 CIDR

一个 32 位地址大约允许 4,000,000,000 个地址。这个数量看起来是很多。 最初,该地址是分开的,高 8 位表示网络号,其余 24 位表示网络内的本地地址。当只有几个大型网络(例如 ARPANET)存在时,这种分开表示地址的方法比较适用。幸运的是,到 1981 年,重新定义了地址范围并对其进行分类,所有现有网络的编号都低于 64。当时的现有网络使用 0 表示高阶位,并被指定为 A 类网络,而且最多允许 127 个这样的网络。最终定义了五个类别,如表 2 所示。

表 2. 网络类别

类别 高阶位 网络位 剩余地址位 网络数量 每个网络的主机数
A 0 8 24 128 (27) 16,777,216 (224)
B 10 16 16 16,384 (214) 65,536 (216)
C 110 24 8 2,097,152 (221) 256 (28)
D(多播) 1110 未指定 未指定 未指定 未指定
E(保留或实验) 1111 未指定 未指定 未指定 未指定


网络地址的前几个位定义了类别,因此主机地址由剩余位构成。特定网络中某个设备的流量首先路由到该网络,然后再路由到该设备,因此主互联网路由器只需使用 IP 地址的网络部分进行路由。可以使用网络掩码屏蔽设备部分(使用逻辑 AND),以仅获取网络地址部分。例如,255.0.0.0 是 A 类网络的网络掩码,而 255.255.255.0 是 C 类网络的网络掩码。

对于许多组织而言,C 类网络提供的地址并不够,但 B 类网络提供的地址又比他们实际需要的地址多得多。由于传真机、打印机、扫描仪、计算机和许多其他设备都需要一个地址,因此 IPv4 地址分配系统的地址分配压力有所增加。

1993 年,互联网工程任务组 (IETF) 引入了无类域间路由 (CIDR)。在此模型中,高阶位继续用于定义网络号,而低阶位则用于定义网络中的设备或主机地址。CIDR 将指定表示网络部分的位数,而非固定大小。此位数以斜杠 (/) 后跟位计数形式附加到点分四元组上。因此,以前的 A 类网络地址现在可指定为 36.0.0.0/8,而 C 类网络地址现在可指定为 192.168.1.0/24。像 192.168.1.0/22 这样的地址用 22 位表示网络部分并用 10 位表示主机地址,因此网络中最多可包含 1024 个主机。这三个示例的地址掩码为 255.0.0.0、255.255.255.0 和 255.255.252.0。地址掩码始终为 1 位序列后跟 9 位序列,共有 24 位。

因此,以前的类别被划分为子网,每个子网可以更准确地满足使用该子网的组织的需求。

现如今,IPV4 地址范围主要由大型机构(例如,ARIN 或美国国防部)或区域组织(例如,拉丁美洲和加勒比地区互联网地址注册管理机构 (LACNIC) 或欧洲 IP 资源网络协调中心 (RIPE NCC))管理。互联网号码分配机构 (IANA) 对这些机构的分配拥有总体控制权。互联网服务提供商 (ISP) 为我提供了 107.13.224.0/19 范围内的一个 Ipv4 地址。

即使组织的 IP 地址范围很广,组织也可以选择使用内部子网来简化路由。

专用和公用地址

到目前为止,我们已经看到了用于连接互联网上所有设备的 IPv4 地址方案。 如前所述,像打印机和扫描仪这样的设备都需要一个 IP 地址,但通常只有特定家庭或企业内部的设备才需要。许多 LAN 设备也属于此类别。IETF 和 IANA 已保留三个特定范围作为专用不可路由地址。这些范围为:

  • 10.0.0.0/8 – 10.0.0.0 到 10.255.255.255,具有 16,777,216 个地址和掩码 255.0.0.0
  • 172.16.0.0/12 – 172.16.0.0 到 172.31.255.255,具有 1,048,576 个地址和掩码 255.240.0.0
  • 192.168.0.0 到 192.168.255.255,具有 65,536 个地址和掩码 255.255.0.0

为了进行内部路由,可以将这些范围划分为若干子网。如果您具有家用路由器,那么可能会使用诸如 192.168.0.0/24 或 192.168.1.0/24 之类的范围,这些范围都是 192.168.0.0/16 范围的子网。例如,我的路由器默认使用 192.168.1.0/24 范围(掩码 255.255.255.0)。因此,我仅使用 192.168.0.0/16 范围的子网。

这些专用地址范围不能在公共互联网上使用;如果路由器具有专用地址,那么它们不会将数据包转发到公共互联网。

还有一个范围是本地回送范围 127.0.0.0/8,您在任何计算机上都可以看到此范围,但在互联网上永远看不到此范围。该范围通常显示为 127.0.0.0。

最后,IANA 保留了 100.64.0.0/10 范围,此范围用于运营商级网络地址转换 (NAT)。此地址范围不应该出现在公共互联网上,也不应该用于专用网络。

您可以使用 ip 命令来查看自己的 IPv4 地址,如清单 1 所示,首先在 Fedora 29 上,然后在 Ubuntu 16.04.6 LTS 上。

清单 1. 使用 ip 命令

# Fedora
[ian@attic5-f29 ~]$ ip -4 -br addr
lo               UNKNOWN        127.0.0.1/8
enp9s0           UP             192.168.1.25/24
virbr0           DOWN           192.168.122.1/24

# Ubuntu
ian@attic-u16:~$ ip -4 -br addr
lo               UNKNOWN        127.0.0.1/8
enp2s0           UP             192.168.1.24/24

链路本地地址

如果动态主机配置协议 (DHCP) 不可用并且未进行手动配置,那么系统通过从 169.254.0.0/16 范围中伪随机分配一个地址,可以在以太网上搭建一个零配置网络。

ICMP

互联网协议 (IP) 是主机到主机的数据报协议。数据报可能会通过许多网络节点。无法保证交付。如果发生错误,网关之间需要相互传达这些错误,或者可能需要向始发主机报告这些错误。ICMP 可用于实现此目的。ICMP 使用基本 IP 支持,就好像它是高级协议一样,但 ICMP 实际上是每个 IP 模块实现的 IP 的组成部分。

可以出于以下目的来发送 ICMP 消息:

  • 数据报无法到达目的地
  • 网关没有足够的缓冲区来转发数据报
  • 网关建议主机使用更短路由来发送流量
  • 网关检测到主机不可访问
  • 主机想要检查到远程主机的路由或检查远程主机是否处于活动状态。

ping 命令用于检查另一个主机是否处于活动状态,而 traceroute 命令用于查询到该主机的路由。清单 2 展示了每个命令的示例。

清单 2. 使用 ping 和 traceroute

[ian@attic5-f29 ~]$ ping cybershields.com
PING cybershields.com (198.23.83.141) 56(84) bytes of data.
64 bytes from s10.lookwhois.com (198.23.83.141): icmp_seq=1 ttl=49 time=84.5 ms
64 bytes from s10.lookwhois.com (198.23.83.141): icmp_seq=2 ttl=49 time=84.9 ms
64 bytes from s10.lookwhois.com (198.23.83.141): icmp_seq=3 ttl=49 time=87.2 ms
64 bytes from s10.lookwhois.com (198.23.83.141): icmp_seq=4 ttl=49 time=91.1 ms
^C
--- cybershields.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 6ms
rtt min/avg/max/mdev = 84.521/86.922/91.115/2.652 ms
[ian@attic5-f29 ~]$ traceroute cybershields.com
traceroute to cybershields.com (198.23.83.141), 30 hops max, 60 byte packets
 1  _gateway (192.168.1.1)  0.259 ms  0.368 ms  0.407 ms
 2  * * *
 3  cpe-174-111-105-205.triad.res.rr.com (174.111.105.205)  45.354 ms  45.375 ms  45.390 ms
 4  cpe-024-025-041-002.ec.res.rr.com (24.25.41.2)  23.077 ms  22.143 ms  23.021 ms
 5  * * *
 6  * bu-ether11.atlngamq46w-bcr00.tbone.rr.com (66.109.6.34)  35.248 ms bu-ether14.atlngamq46w-bcr00.tbone.rr.com (66.109.6.82)  28.788 ms
 7  0.ae0.pr0.atl20.tbone.rr.com (66.109.6.171)  27.737 ms 0.ae1.pr0.atl20.tbone.rr.com (66.109.6.177)  19.741 ms 0.ae2.pr0.atl20.tbone.rr.com (107.14.19.11)  21.050 ms
 8  te1-6.bbr01.tl01.atl01.networklayer.com (66.109.11.118)  28.073 ms  29.402 ms  29.581 ms
 9  * * *
10  * * *
11  ae1.dar01.dal13.networklayer.com (169.45.18.91)  47.021 ms ae1.dar01.dal10.networklayer.com (50.97.17.13)  39.878 ms ae1.dar01.dal13.networklayer.com (169.45.18.91)  53.891 ms
12  * ae16.cbs01.dr01.dal04.networklayer.com (169.45.18.36)  50.829 ms *
13  ae2.cbs01.cs01.lax01.networklayer.com (169.45.18.7)  71.911 ms  81.297 ms *
14  * * *
15  * * *
16  ae24.bbr01.eq01.sjc02.networklayer.com (50.97.17.77)  100.518 ms  86.327 ms  86.202 ms
17  ae5.dar01.sjc01.networklayer.com (173.192.18.249)  88.142 ms ae6.dar02.sjc01.networklayer.com (50.97.19.165)  85.816 ms ae5.dar01.sjc01.networklayer.com (173.192.18.249)  87.915 ms
18  a1.76.1732.ip4.static.sl-reverse.com (50.23.118.161)  84.691 ms po2.fcr02.sr02.sjc01.networklayer.com (50.23.118.149)  87.973 ms a1.76.1732.ip4.static.sl-reverse.com (50.23.118.161)  85.636 ms
19  s10.lookwhois.com (198.23.83.141)  87.216 ms *  83.498 ms

TCP 和 UDP

传输控制协议 (TCP)用户数据报协议 (UDP) 是传输层协议,不同主机上的应用程序可以使用这两种协议通过 IP 网络相互通信。

TCP 是一种可靠的端到端协议,可用于会话,保证有序数据包传送以及从错误(如丢失数据包)中进行恢复。在需要可靠的端到端通信的情况下可以使用 TCP,例如:

  • 超文本传输协议 (HTTP)
  • 电子邮件服务,例如简单邮件传输协议 (SMTP)、互联网邮件访问协议 (IMAP) 或邮局协议版本 3 (POP3)。
  • 使用文件传输协议 (FTP) 或安全 FTP (SFTP) 的文件传输
  • 终端应用程序,例如安全 Shell (SSH) 或 Telnet。

UDP 是一种无连接协议,可将数据包从一台主机传递到另一台不需要可靠性的主机。因此,与 TCP 相比,它具有更短的标头,没有恢复功能,也不需要确认。其用途包括:

  • 实时视频流传输(偶尔丢失帧的情况可忽略不计)
  • 语音或音频传输,例如用于 IP 语音 (VoIP) 应用程序
  • 域名系统 (DNS),其中对于一个特定查询,可能会发出多个请求,但一个应答就足够了。
  • 简单文件传输协议 (TFTP),用于通过局域网引导的节点。

TCP 和 UDP 端口及服务

应用程序和服务可以使用 TCP 和 UDP 连接到位于相同或不同主机上的其他应用程序。将使用两字节的地址(称为端口)来识别应接收传入请求的应用程序。因此,端口的范围可以为 0 到 65535。

FTP、HTTP 或 SSH 等应用程序通常会使用众所周知的端口号。这些端口号由 IANA 分配,即使应用程序仅使用 TCP 或仅使用 UDP,当前的 IANA 策略也会为给定应用程序分配相同的 UDP 和 TCP 端口号。 Linux 系统会维护一个端口列表,而使用这些端口的服务会存储在 /etc/services 文件中。清单 3 展示了我的 Fedora 29 系统上该文件的开始部分。

清单 3. /etc/services

# /etc/services:
# $Id: services,v 1.49 2017/08/18 12:43:23 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2016-07-08
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
# are included, only the more common ones.
#
# The latest IANA port assignments can be gotten from
#       https://www.iana.org/assignments/port-numbers
# The Well Known Ports are those from 0 through 1023.
# The Registered Ports are those from 1024 through 49151
# The Dynamic and/or Private Ports are those from 49152 through 65535
#
# Each line describes one service, and is of the form:
#
# service-name  port/protocol  [aliases ...]   [# comment]

tcpmux          1/tcp                           # TCP port service multiplexer
tcpmux          1/udp                           # TCP port service multiplexer
rje             5/tcp                           # Remote Job Entry
rje             5/udp                           # Remote Job Entry
echo            7/tcp
echo            7/udp
discard         9/tcp           sink null
discard         9/udp           sink null

每行最多包含三个由空格分隔的字段,以及一个由 # 字符引入的可选注释。 网络程序应检查此文件以获取其提供的服务的端口号(和协议)。这三个字段为:

  • service-name,这是用于标识服务的友好名称。 此字段区分大小写。客户端程序通常具有相同的名称。
  • port/protocol,这是此服务使用的端口号(十进制),后跟 / 和协议类型,通常为 tcpudp。在 /etc/ 协议中列出了其他协议
  • aliases,这是此服务的其他名称的可选列表(由空格或制表符分隔)。 它们区分大小写。

表 3 中显示了属于 LPI 目标的常见 TCP 和 UDP 端口及服务。

表 3. 常见 TCP 和 UDP 端口及服务

服务名称 端口/协议 别名 注释
ftp-data
ftp-data
20/tcp
20/udp
ftp
ftp
21/tcp
21/udp
fsp fspd 为 ftp 注册了 21,但它也供 fsp 使用
ssh
ssh
22/tcp
22/udp
安全 Shell (SSH) 协议
telnet
telnet
23/tcp
23/udp
mail
mail
smtp
smtp
25/tcp
25/udp
domain
domain
53/tcp
53/udp
域名服务器 (DNS)
http
http
80/tcp
80/udp
www www-http
www www-http
万维网超文本传输协议 (HTTP)
pop3
pop3
110/tcp
110/udp
pop-3
pop-3
邮局协议 (POP) 版本 3
ntp
ntp
123/tcp
123/udp
网络时间协议 (NTP) – UDP
netbios-ssn
netbios-ssn
139/tcp
139/udp
NETBIOS 会话服务
imap
imap
143/tcp
143/udp
imap2
imap2
互联网邮件访问协议 v2
snmp
snmp
161/tcp
161/udp
简单网络管理协议 (SNMP)
snmptrap
snmptrap
162/tcp
162/udp
snmp-trap SNMP 陷阱
ldap
ldap
389/tcp
389/udp
轻量级目录访问协议 (LDAP)
https
https
443/tcp
443/udp
基于 TLS/SSL 的 HTTP 协议
urd 465/tcp
465/udp
smtps URL Rendesvous Directory for SSM Message Submission over TLS 协议(不推荐)
Shell
syslog
514/tcp
514/udp
cmd 类似于 exec,但与登录服务器一样执行自动身份验证
ldaps
ldaps
636/tcp
636/udp
基于 SSL 的 LDAP
snmp-tcp-port
snmp-tcp-port
993/tcp
993/udp
CISCO SNMP TCP 端口
pop3s
pop3s
995/tcp
995/udp
基于 SSL 的 POP-3

0 到 1023 之间的端口是众所周知的端口。这些端口只能由以 root 用户权限 (id 0) 运行的进程打开,因此连接的网络节点可以对其连接的系统具有某种程度的信任。

1024 到 49151 之间的端口是已注册端口。这些端口已向 IANA 进行注册,并由非根应用程序使用。例如,用于 IBM AIX Network Installation Manager (NIM) 的端口 1058。

49152 到 65535 之间的端口可以动态分配或用于专用目的。实际上,系统可能会限制允许本地使用的最大端口,并且还会使用某些已注册端口来实现此目的。可使用 sysctl 命令或 cat 命令来显示系统上的范围,如清单 4 所示。

清单 4. 确定端口范围

[ian@attic5-f29 ~]$ sysctl net.ipv4.ip_local_port_range
net.ipv4.ip_local_port_range = 32768    60999
[ian@attic5-f29 ~]$ cat /proc/sys/net/ipv4/ip_local_port_range
32768    60999

我将使用一个简单的 Python 示例来结束此部分,该示例源自 Python Wiki 上的 TCP Communication 示例。服务器在回送地址端口 50000 上侦听连接,并显示有关所连接的主机和端口的数据,然后回显尖括号中的数据。客户端连接到回送地址并发送“Hello, World”消息,然后显示来自服务器的应答。清单 5 中展示了服务器代码。

清单 5. 服务器代码

#!/usr/bin/env python

import socket

IP_ADDRESS = '127.0.0.1'
PORT = 50000
BUFFER_SIZE = 1024

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind((IP_ADDRESS, PORT))
sock.listen(1)

conn, address = sock.accept()
print( "Connection from: " + address[0] + " Port: " + str(address[1]) )

while True:
    data = conn.recv(BUFFER_SIZE)
    if not data: break
    print( "received data: " + data)
    conn.send("Echo: " + data)
conn.close()

清单 6 中展示了客户端代码。

清单 6. 客户端代码

#!/usr/bin/env python

import socket

IP_ADDRESS = '127.0.0.1'
PORT = 50000
BUFFER_SIZE = 1024
MESSAGE = "Hello, World!"

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((IP_ADDRESS, PORT))
sock.send(MESSAGE)
data = sock.recv(BUFFER_SIZE)
sock.close()

我在一个窗口中启动了服务器,然后在另一个窗口中启动了客户端。清单 7 和清单 8 中展示了输出。

清单 7. 服务器输出

[ian@attic5-f29 ~]$ ./port-server.py
Connection from: 127.0.0.1 Port: 48134
received data: Hello, World!

清单 8. 客户端输出

[ian@attic5-f29 ~]$ ./port-client.py
received data: <Echo: Hello, World!>

注意,在服务器输出中,已为客户端分配了端口 48134。如果再次运行该场景,您可能会看到另一个端口。

网络地址转换

在 IPv4 网络中,您会看到某些地址范围保留为专用地址范围。这些地址不能在通用互联网上路由。大多数小型办公室或家庭路由器都使用像 192.168.1.x 这样的地址。ISP 可以动态提供一个地址,如 107.13.231.7。网络地址转换 (NAT) 是一个过程,在此过程中,路由器可以接受来自网络专用端的连接请求并转换地址(可能还会转换启动端口号),使它在公共网络中看起来像是来自 ISP 分配地址上的端口一样。这允许从专用网络到公共网络的连接,这适用于大多数应用程序。但是,如果来自公共网络的连接请求(或数据报)到达路由器,那么只有在路由器通过一张表指示要将到达特定端口的流量发送到哪个主机和端口时,才可以转发该请求。除了允许专用主机访问公共主机外,此方案还为专用网络提供了一定程度的屏蔽,使其免受可能正在扫描潜在目标的恶意流量的攻击。注意,NAT 不是当前 LPI 要求的一部分。

互联网协议 V6 – IPv6

IETF 在 20 世纪 90 年代中期制定了互联网协议 V6(简称为 IPv6),此协议可以解决 IPv4 的局限性。在广泛使用 NAT 之前,人们预计 IPv4 地址即将用完。IPv6 于 1998 年成为标准草案,并于 2017 年最终获得批准。

IPv6 使用的是 128 位地址。这允许 2128(约为 3.4X1038)个地址。与 IPv4 一样,实际数目要比这个数目少一些。有几个范围保留为专用范围或完全排除在外。

与用于 IPv4 的十进制点分四元组表示法相反,IPv6 地址使用八组四个十六进制数字,用冒号分隔各个组(例如,fe80:0000:0000:0000:efaa:4539:a6ba:27b9)。可以从组中省略前导零,并且可以用双冒号 (::) 替换多个全零组。因此,此示例可以写为 fe80:0:0:0:efaa:4539:a6ba:27b9,或者简写为 fe80::efaa:4539:a6ba:27b9。另一个缩写地址示例为 ::ffff:8.8.8.8。如果您使用 ip 命令检查自己的回送地址,那么您会看到回送地址为 ::1。尝试使用 ping -6 ::1 来查看示例,如清单 9 所示。

清单 9. Ping IPv6

[ian@attic5-f29 ~]$ ping -6 ::1
PING ::1(::1) 56 data bytes
64 bytes from ::1: icmp_seq=1 ttl=64 time=0.100 ms
64 bytes from ::1: icmp_seq=2 ttl=64 time=0.079 ms
64 bytes from ::1: icmp_seq=3 ttl=64 time=0.079 ms
64 bytes from ::1: icmp_seq=4 ttl=64 time=0.082 ms
64 bytes from ::1: icmp_seq=5 ttl=64 time=0.083 ms
^C
--- ::1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 84ms
rtt min/avg/max/mdev = 0.079/0.084/0.100/0.012 ms

许多其他实用程序(包括 digtraceroute)都具有 -6 或 -4 选项,用于指定命令应使用 IPv6 还是 IPv4。traceroute6 命令等效于 traceroute -6

IPv4 和 IPv6 比较

如前所述,IPv6 地址是 128 位,而不是 32 位(Ipv4 地址是 32 位)。因此,IPv6 地址空间不太可能被用完。

Ipv6 协议最初设计为采用 IPSec 形式的安全性,这一点是强制要求。RFC 6434 将此要求更改为应该而非必须,因为尚不确定 IPSec 是否会成为众多安全选项中的主导安全选项。RFC 6434 建议使用具有 IKEv2 密钥管理功能的 IPSec。

IPv6 的数据包头比 IPv4 更简单一些。极少使用的字段已移到扩展中,其余字段的长度都是固定的。这简化了高速路由的处理。

如果连接到 IPv6 网络,Pv5 主机会自动自行配置。此过程被称为无状态地址自动配置 (SLAAC),它将替换 Ipv4 的 DHCP 过程。

移动设备具有可供家庭路由器访问的住宅地址。出门在外时,可以将发送到设备家庭路由器的数据包路由到当前位置。

如果要更改套接字连接示例,记住将地址更改为“::1”,并将 AF_INET 更改为 AFI_NET6。虽然可以为 IPv6 套接字指定其他选项,但这可帮助您入门。

结束语

对“主题 109:网络基础知识”的介绍到此结束。

本文翻译自:Learn Linux, 101: Fundamentals of internet protocols(2019-04-01)