# IP
# ifconfig
用法:
$ ifconfig # 显示已启用的网口
-a # 显示所有网口的信息
eth0 # 显示网口 eth0 的信息
up # 启用网口
down # 停用网口
10.0.0.1 # 设置网口的 IP 地址
netmask 255.255.255.0 # 设置网口的子网掩码
broadcast 10.0.0.255 # 设置网口的广播地址
例:
[[email protected] ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
ether 52:54:00:59:c1:b7 txqueuelen 1000 (Ethernet)
RX packets 25883978 bytes 7322687281 (6.8 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 24178898 bytes 6035774584 (5.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
loop txqueuelen 1000 (Local Loopback)
RX packets 3615476 bytes 2842561090 (2.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3615476 bytes 2842561090 (2.6 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 一个主机可以有多个网络接口,例如:
eth0 # 连接到第一个以太网网卡 wlan0 # 连接到第一个无线网卡 lo # 环回网口,地址为 127.0.0.1 。属于虚拟网口,没有连接到物理设备
- 每个网口有一些配置信息,比如 IP、子网掩码,保存在内核的网络协议栈中。
- MAC 地址属于网卡的配置信息,与网口无关。
- flags 取值示例:
- UP :网口已启用。
- BROADCAST :网口支持广播。
- RUNNING :网口已连接到网络。
- MULTICAST :网口支持组播。
- 地址信息:
- mtu :最大传输单元,即网口能传输的 IP 数据包最大大小,单位 bytes 。
- inet :网口的 IP 地址。
- netmask :子网掩码。
- ether :网口的 MAC 地址。
- txqueuelen :传输队列的长度。
- IP 数据包的统计数量:
- RX packets :接收的数据包总数。
- TX packets :发送的数据包总数。
- bytes :数据包的总大小。
- errors :出错的数据包数。比如校验错误、帧对齐错误。
- dropped :因为 buffer 内存不足等原因而被丢弃的数据包数。
- overrun :因为缓冲区已满而被丢弃的数据包数。
- frame :因为数据帧出错的数据包数,比如长度不能被 8 整除。
- carrier :因为载体出错的数据包数,比如半双工模式时不可通信。
- collisions :发生碰撞的数据包数。
# route
命令:
$ route # 显示本机的路由表
-n # 将名称解析为 IP
例:查看路由表
[[email protected] ~]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.1.1 0.0.0.0 UG 0 0 0 eth0 # 缺省路由。默认将数据包通过 eth0 网口发送到 10.1.6.1 网关 10.0.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 # 将发向 10.0.1.0/24 子网的数据包通过 eth0 网口发出 169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0 # Link-Local Address
- 常见的路由方式:
- 目标地址在当前网络,因此直接将数据包从某网口发出,直接访问。
- 目标地址在其它网络,因此下一跳会将数据包发送到一个网关,由它继续路由转发。
- 该网关必须在当前网络,可直接访问。通常是当前网络的路由器。
- Flags 的常见取值:
U # Up ,该路由为启用状态 ! # 该路由为禁用状态 H # Host ,目的地址是一个主机 G # Gateway ,将数据包发送到一个网关
- Metric 表示这条路由的跳数,即到目标主机需要经过几次路由转发。默认为 0 。
- 常见的路由方式:
例:修改路由表
route add default gw 10.0.1.1 # 设置缺省路由 route del default route add -host 10.0.1.2 dev eth0 # 添加一条路由,将发向 10.0.1.2 的数据包通过 eth0 网口发出。其中 -host 表示目的地址是一个主机 route add -net 10.0.1.0/24 metric 1024 dev eth0 # -net 表示目的地址是一个子网 route add -net 10.0.1.0/24 gw 10.0.1.1 # 将发向 10.0.1.0/24 子网的数据包路由到网关 10.0.1.1 route add -host 10.0.1.2 reject # 拒绝发向指定主机的流量
用 route、ip 命令修改的路由在主机重启之后不会保存。
- 可以将路由保存在
/etc/sysconfig/network-scripts/route-xx
文件中,然后执行systemctl restart network
。
- 可以将路由保存在
# ip
:可替代 ifconfig、route 命令,且功能更强。
命令:
$ ip
link # 显示所有网口的信息
-s # 增加显示网口接收、发送的字节数(该选项要放在 link 之前)
-s -s # 增加显示网口接收、发送的错误包数(该选项要放在 link 之前)
show eth0 # 只显示指定网口的信息
set eth0 up # 启用网口
down # 停用网口
del eth0 # 删除网口
addr # 显示所有网口的信息,及其 IP 地址
add 10.0.0.1/24 dev eth0 # 给网口增加一个 IP 及掩码
del 10.0.0.1/24 dev eth0 # 删除
neighbour # 显示当前网段的其它主机
route # 显示路由表
add default via 10.0.1.1 # 设置缺少路由
add 10.0.1.0/24 via 10.0.1.1 # via 相当于 route 命令的 gw
add 10.0.1.0/24 dev eth0
# ping
:常用于基于 ICMP 协议测试网络是否连通、网络延迟、丢包率、域名解析。
命令:
$ ping <host> # 启动 ping -c n # 最多发送 ICMP 报文多少次(默认为无限次) -i n # 每次发送 ICMP 报文的间隔时间(默认为 1 秒) -I eth0 # 使用本机的指定网口来发送 ICMP 报文(默认自动选取网口)
- host 可以是 IP 地址或域名,如果是域名,在执行时还会显示出域名解析后的 IP 地址。
例:
[[email protected] ~]# ping baidu.com PING baidu.com (39.156.69.79) 56(84) bytes of data. 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=250 time=37.0 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=250 time=37.0 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=3 ttl=250 time=37.0 ms 64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=4 ttl=250 time=37.0 ms ^C --- baidu.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3003ms rtt min/avg/max/mdev = 37.008/37.022/37.044/0.136 ms
- icmp_seq :表示这是第几个 ICMP 报文。
- ttl :ICMP 报文剩下的生存期。
- time :发出 ICMP 报文之后,隔了多久才收到回复。
- Linux 的 ping 命令默认每隔一秒向目标主机发送一个 ICMP 报文,并且会一直发送,要按
Ctrl+C
终止。
例:
[[email protected] ~]# ping google.com PING google.com (93.46.8.90) 56(84) bytes of data. ^C
- 可见它一直尝试连接目标主机,但并没有成功。原因可能是:
- 与目标主机的物理网络没有连通。
- 与目标主机的物理网络连通,但是目标主机没有开启 ICMP 协议。
- ICMP 不是基于 TCP 通信,因此不需考虑目标主机是否开放了 TCP 端口。
- 可见它一直尝试连接目标主机,但并没有成功。原因可能是:
# traceroute
:用于测试发送一个数据包到目标主机,显示经过的各个路由节点。
- 命令:
$ traceroute <host> -I # 发送 ICMP ECHO 数据包 -T # 发送 TCP SYN 包,默认端口为 80 -U # 发送 UDP 数据表,默认端口是 53
- 先探测 TTL 减 1 的路由节点,再探测 TLL 减 2 的路由节点,以此类推,直到 TTL 减为 0 或者到达目标主机。
- 例:
[[email protected] ~]# traceroute baidu.com traceroute to baidu.com (220.181.38.148), 30 hops max, 60 byte packets 1 100.98.0.1 (100.98.0.1) 7.329 ms 7.170 ms 7.232 ms 2 * * * 3 * * * 4 * * * 5 * * * 6 10.47.55.177 (10.47.55.177) 2.073 ms 2.157 ms 1.765 ms 7 10.1.0.146 (10.1.0.146) 2.674 ms 2.276 ms 2.274 ms 8 172.16.38.33 (172.16.38.33) 2.876 ms 2.611 ms 2.524 ms 9 172.16.38.21 (172.16.38.21) 3.030 ms 3.677 ms 2.978 ms 10 220.181.182.129 (220.181.182.129) 3.389 ms 3.682 ms 4.957 ms 11 * * * 12 220.181.182.174 (220.181.182.174) 4.447 ms 3.676 ms 3.902 ms 13 * * * 14 * * *
- 显示为 * 的路由节点,是因为没有回复 traceroute 发送的数据包。
# cip.cc
:一个位于公网的 Web 网站,访问之后会显示本机的公网 IP、地理位置、运营商。
- 不同场景的用法:
- 在 Web 浏览器上,访问
cip.cc
网站。 - 在 Unix/Linux 上,执行
curl cip.cc
。 - 在 Windows 上,执行
telnet cip.cc
。
- 在 Web 浏览器上,访问
- 也可查询指定 IP 的信息:
curl cip.cc/8.8.8.8
- 例:
[[email protected] ~]# curl cip.cc IP : 120.241.2.7 地址 : 中国 广东 深圳 运营商 : 移动 数据二 : 广东省深圳市 | 移动 数据三 : 中国广东深圳 | 移动