练习 24:接口配置,ifconfig,netstat,iproute2,ss,route
原文:Exercise 24. Networking: interface configuration, ifconfig, netstat, iproute2, ss, route
译者:飞龙
自豪地采用谷歌翻译
这个练习对于你来说是一个很大的信息量,如果你不熟悉网络,这就是一个伤害。如果你感到非常失落,请立即跳到“这样做”的部分,并完成它。为了正确理解这部分,你至少应该非常熟悉网络的以下基本概念:
通信协议 - 通信协议,就是数字消息格式和规则的系统,用于在计算系统或在电子通讯中交换那些消息。
以太网 - 用于局域网(LAN)的计算机网络技术族。
MAC 地址 - 分配给物理网段上通信的网络接口的唯一标识符。例如:
08:00:27:d4:45:68。TCP/IP - 互联网协议套件是一组通信协议,用于互联网和类似网络,通常是广域网最流行的协议栈。它通常被称为 TCP/IP,由于其最重要的协议:传输控制协议(TCP)和互联网协议(IP)
IP - 互联网协议(IP)是主要通信协议,用于跨互联网络中继转发数据报(也称为网络封包)。
IP 地址 - 互联网协议地址。示例:
10.0.2.15端口 - 应用特定或流程特定的软件结构,在计算机的主机操作系统中用作通信端点。示例:
22网络套接字 - 跨计算机网络的,进程间通信流的端点。今天,大多数计算机之间的通信基于互联网协议;因此大多数网络套接字都是互联网套接字。
本地套接字地址 - 本地 IP 地址和端口号,例如:
10.0.2.15:22。远程套接字地址 - 远程 IP 地址和端口号,仅适用于已建立的 TCP 套接字。示例:
10.0.2.2:52173。套接字对 - 沟通本地和远程套接字,只有 TCP 协议。示例:
(10.0.2.15:22, 10.0.2.2:52173)。子网掩码 - 逻辑可见的 IP 网络细分。示例:
/24或另一个记号255.255.255.0。路由 - 在网络中选择路径,来发送网络流量的过程。
默认网关 - 在计算机网络中,网关是一个 TCP/IP 网络上的节点(路由器),作为另一个网络的接入点。默认网关是计算机网络上的节点,当 IP 地址与路由表中的任何其他路由不匹配时,网络软件使用它。示例:
10.0.2.2。广播地址 - 逻辑地址,其中连接到多重访问的网络的设备能接收数据报。发给广播地址的消息,通常会由所有附加到网络的主机接收,而不是特定主机。示例:
10.0.2.255。ICMP - 互联网消息控制协议,示例用法:
ping 10.0.2.2。TCP - 传输控制协议。在数据交换之前建立连接,因此设计上可靠。示例:SSH, HTTP。
UDP - 用户数据报协议。传输数据而不建立连接,因此设计上不可靠。示例:DNS。
如果你对某些概念不熟悉,不用担心。
阅读相应的维基百科文章,直到你至少充分理解(但是深入钻研当然更好)。
观看 http://www.visualland.net.cn/ 的视频:
展开站点左侧的 IP 地址树节点,并通过它来以你的方式实现。
展开 TCP 树节点并执行相同操作。
阅读 Linux 网络概念介绍。这本指南很好,因为它甚至承认 互联网是为情欲而生的。
让我们继续。这是 Linux 网络相关的命令列表:
ifconfig- 配置和查看网络接口的状态。netstat- 打印网络连接,路由表,接口统计信息,伪装连接和组播成员资格。ip- 显示/操做路由,设备,策略和隧道。ss- 调查套接字的另一个实用程序。
现在让我们来看看每个命令可以告诉我们什么信息。我们将从ifconfig开始。
我们可以看到vm1中有两个网络接口,eth0和lo。lo是一个回送 接口,用于连接同一台机器上的客户端-服务器程序。
让我们看看我们在eth0上有哪些信息,它是一个 VirtualBox 的伪网络接口:
(1) Link
物理选项
(17) RX
接收(缩写)
(2) encap
封装类型
(18) packets
封包总数
(3) Hwaddr
MAC 地址
(19) errors
错误的数据包总数
(4) inet
地址族(IPv4)
(20) dropped
丢弃的封包(低系统内存?)
(5) addr
IPv4 地址
(21) overruns
比处理速度快的封包
(6) Bcast
广播地址
(22) frame
接收的无效的帧
(7) Mask
网络掩码
(23) TX
传输(缩写)
(8) inet6
地址族(IPv6)
(24) packets
封包总数
(9) addr
IPv6 地址
(25) errors
错误的数据包总数
(10) Scope
地址范围(主机,链路,全局)
(26) dropped
丢弃的封包(低系统内存?)
(11) UP
接口功能正常
(27) overruns
比处理速度快的封包(我不确定)
(12) BROADCAST
它可以一次性向所有主机发送流量
(28) carrier
链路载波丢失
(13) RUNNING
它准备好接受数据(我不确定)
(29) collisions
发生了包装碰撞
(14) MULTICAST
它可以发送和接收组播封包
(30) txqueuelen
传出数据包的转发队列长度
(15) MTU
其最大传输单位
(31) RX bytes
收到的字节总数
(16) Metric
路由开销(在 Linux 中未使用)
(32) TX bytes
发送的字节总数
这确实很多。但是同样,现在的重要字段是:
(5)
addr- IPv4地址。(6)
Bcast- 广播地址。(7)
Mask- 网络掩码。(11)
UP- 接口正常工作。(13)
RUNNING- 准备好接受数据。(19)
errors和 (25)errors- 如果在这里有不为零的东西,我们就有问题了。
现在让我们看看netstat能给我们看的东西。
我使用两个参数来修改netstat输出。-a参数告诉netstat来显示所有的连接,包括建立的,例如你当前正在打字的ssh会话,以及监听的,例如等待新的连接的sshd守护进程。-p告诉netstat来显示哪个程序拥有每个连接。
字段
描述
(1) Proto
套接字使用的协议(tcp,udp,raw)
(2) Recv-Q
连接到此套接字的用户程序的未复制的字节数
(3) Send-Q
远程主机未确认的字节数
(4) Local Address
套接字的本端的地址和端口号。
(5) Foreign Address
套接字远端的地址和端口号。
(6) State
ESTABLISHED, SYN_SENT, SYN_RECV, FIN_WAIT1, FIN_WAIT2, TIME_WAIT, CLOSE, CLOSE_WAIT, LAST_ACK, LISTEN, CLOSING, UNKNOWN
(7) PID
拥有套接字的进程的进程 ID(PID)和进程名称的斜杠对。
活动 UNIX 域套接字(服务器和已建立)
字段
描述
(8) Proto
套接字使用的协议(通常为 unix)。
(9) RefCnt
引用计数(即附加到此套接字的进程)。
(10) Flags
显示的标志是SO_ACCEPTON(显示为ACC),SO_WAITDATA(W)或SO_NOSPACE(N)。
(11) Type
SOCK_DGRAM, SOCK_STREAM, SOCK_RAW, SOCK_RDM, SOCK_SEQPACKET, SOCK_PACKET, UNKNOWN.
(12) State
FREE, LISTENING, CONNECTING, CONNECTED, DISCONNECTING, (empty), UNKNOWN.
(13) I-Node
套接字文件的索引节点。
(14) PID
打开套接字的进程的进程 ID(PID)和进程名称。
(15) Path
这是连接到套接字的对应进程的路径名。
并非所有字段都是重要的。通常你只需要查看活动的互联网连接(服务器和已建立) 部分,并使用以下字段:
(1)Proto - 套接字使用的协议(tcp,udp,raw)。 (4)Local Address - 套接字本端的地址和端口号。 (5)Foreign Address - 套接字远端的地址和端口号,仅用于套接字对。 (6)State - 现在你只应该知道两个状态:LISTEN和ESTABLISHED。前者意味着你可以连接到这个套接字,第后者的意思是这个套接字已经连接了,在这种情况下,netstat显示你的套接字对。
ip是一个类似于ifconfig的,具有扩展功能的程序。它来自iproute2套件,用于在某一天替换ifconfig。示例输出:
同样,我们来看看我们在eth0上有什么信息:
(1) BROADCAST
它可以一次性向所有主机发送流量
(2) MULTICAST
它可以发送和接收组播数据包
(3) UP
它是生效的,逻辑状态
(4) LOWER_UP
驱动器信号 L1 已开启(自 Linux 2.6.17 起)
(5) MTU
最大传输单位
(6) qdisc
排队规则,基本上是流量调度策略
(8) State
物理状态(载体感觉?)
(9) qlen
传出数据包的转发队列长度
(10) link
物理选项
(11) ether
封装类型,MAC 地址
(12) brd
数据链路层(物理)广播地址
(13) inet
IPv4 地址族地址
(14) brd
IPv4 广播
(15) scope
IPv4地址范围(主机,链路,全局)
(16) inet6
IPv6 地址族地址
(17) scope
IPv6地址范围(主机,链路,全局)
(18) valid_lft
IPv6 源地址选择策略
(19) preffered_lft
IPv6 源地址选择策略
你已经知道哪些参数很重要(与ifconfig相同)。
ss基本上是具有扩展功能的当代netstat。这是它的示例输出,其解释为留作练习:
这用于处理接口,连接和接口地址。但是网络路由呢?你也可以使用几个命令获取它们的信息:
让我们再一次看看字段:
(1) Destination
目标网络或目标主机。
(2) Gateway
网关地址或*,如果没有设置的话。
(3) Genmask
目标网络的掩码;255.255.255.255为主机目标,0.0.0.0为默认路由。
(4) Flags
Up, Host, Gateway, Reinstate, Dynamically installed, Modified, Addrconf, Cache entry, ! reject.
(5) Metric
目标的“距离”(通常以跳数计算)。最近的内核不使用它,但路由守护进程可能需要它。
(6) Ref
这个路由的引用次数(在 Linux 内核中未使用)。
(7) Use
路由查询次数。
(8) Iface
用于这个路由的,发送封包的接口
(9) irtt
初始 RTT(往返时间)。内核使用它来猜测最佳的 TCP 协议参数,而无需等待(可能很慢)的答案。
(10) Net/Mask
目标网络或目标主机。
(11) dev
用于这个路由的,发送封包的接口
(12) proto
man ip /RTPROTO: redirect, kernel, boot, static, ra
(13) scope
man ip /SCOPE_WALUE: global, site, link, host
(14) src
发送到路由前缀覆盖的目标时,优先选择的源地址。
(15) default
默认网关地址
(15) dev
用于这个路由的,发送封包的接口
目前的重要字段:
(1)
Destination- 目标网络或目标主机。(2)
Gateway- 网关地址或*,如果没有设置的话。默认值意味着,如果没有明确指定的目标地址的网关,则将通过该网关发送数据包。(3)
Genmask- 目标网络的网络掩码;255.255.255.255为主机目标,0.0.0.0为默认路由。(8)
Iface- 用于这个路由的,发送封包的接口。
netstat和route的哪个字段对应于`ip route show ·的哪个字段 ,再次留作一个练习。这真是太多了!深吸一口气,让我们转到实践。
现在你将学习如何创建伪接口,为其分配地址并更改其状态。
这样做
你会看到什么
解释
安装使用伪(虚拟)接口的软件包。
创建伪接口
tap0。打印为此接口创建的,虚拟目录的内容,其中包含其设置和统计信息。
将 IP 地址
10.1.1.1/24添加到tap0。打印当前接口状态。
打印当前路由表条目。请注意,Linux 自动为
tap0添加新路由。通过向其发送 ICMP 回显请求数据包来测试
tap0。将
tap0设为DOWN状态(停用)。通过再次发送 ICMP 回显请求数据包来测试
tap0。会有额外的附加题来解释为什么这个仍然可以工作,尽管已经停用了。将
tap0设为UP状态(启用)。向
tap0添加额外的IP地址10.2.2.2/24。ip aa是ip addr add的缩写版本。这个+的含义,你会在附加题中自己发现它。打印当前接口状态。注意
ifconfig无法列出使用ip工具添加的新 IP 地址。为什么?留作附加题。打印当前路由表。请注意,Linux 自动为
tap0添加了一条路由。使用
ip工具打印当前接口状态。你可以在这里看到新添加的地址。使用
ip工具打印我们的路由表。通过向其发送 ICMP 回显请求报文,来测试
net tap0的 IP 地址。将
tap0设为DOWN状态。打印当前接口状态。
打印当前路由表条目。请注意,
tap0路由将自动删除。通过向其发送 ICMP 回显请求报文,来测试
net tap0的 IP 地址。这个有用,为什么?删除伪接口
tap0。打印当前接口状态。
tap0不存在告诉我们,
tap0虚拟目录现在也没有了。
附加题
熟悉
man ifconfig,man ip,man netstat,man ss。当
tap0处于关闭状态时,为什么ping有用?brd +的意思是什么?为什么
ifconfig无法列出使用ip添加的新地址?
Last updated