# IP
# ifconfig
命令:
ifconfig # 显示已启用的网口 -a # 显示所有网口的信息 eth0 # 只显示网口 eth0 的信息 up # 启用网口 down # 停用网口 10.0.0.1 # 设置网口的 IP 地址 netmask 255.255.255.0 # 设置网口的子网掩码 broadcast 10.0.0.255 # 设置网口的广播地址
例:
[root@CentOS ~]# 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 :发生碰撞的数据包数。
- 一个主机可以有多个网口,例如:
# arp
- 命令:
arp # 显示本机的 ARP 缓存表 -n # 将 IP 显示成数字,否则默认会显示成主机名 <ip> # 只显示指定 IP 的 ARP 记录 -d <ip> # 删除指定 IP 的 ARP 记录 -s <ip> <mac> # 添加一条静态 ARP 记录
# route
命令:
route # 显示本机的路由表 -n # 将 IP 显示成数字,否则默认会显示成主机名
例:查看路由表
[root@CentOS ~]# 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 # 显示所有网口的信息(不包括网口绑定的 IP 地址) -s # 增加显示网口接收、发送的字节数(该选项要放在 link 之前) -s -s # 增加显示网口接收、发送的错误包数(该选项要放在 link 之前) show eth0 # 只显示指定网口的信息 set eth0 up # 启用网口 down # 停用网口 del eth0 # 删除网口 addr # 显示所有网口的信息,及其 IP 地址 show eth0 add 10.0.0.1/24 dev eth0 # 将 IP 绑定到网口设备 eth0 del 10.0.0.1/24 dev eth0 # 删除绑定的 IP neighbour # 显示当前子网的其它主机,基于 ARP 缓存表 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
例:给本机网口绑定一个自定义 IP
[root@CentOS ~]# ip addr add 10.0.0.1/24 dev lo [root@CentOS ~]# ip addr show lo 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 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 inet 10.0.0.1/32 scope global lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever [root@CentOS ~]# ping 10.0.0.1 PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=0.099 ms 64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=0.097 ms
- 此时本机发向 10.0.0.1 的数据包,会被 lo 网口接收。
- 此时在同一子网的其它主机也能访问到 10.0.0.1 ,因为可发送 ARP 消息来寻址。
- 此时在其它子网的其它主机访问不到 10.0.0.1 ,因为路由器不会跨子网传播 ARP 消息。除非在路由器添加一条路由规则,将访问 10.0.0.1 的流量路由到该主机的 IP 。
# ping
:用于基于 ICMP 协议测试网络是否连通、网络延迟、丢包率、域名解析。
命令:
ping <host> # 启动 ping -c n # 最多发送 ICMP 报文多少次(默认为无限次) -i n # 每次发送 ICMP 报文的间隔时间(默认为 1 秒) -I eth0 # 使用本机的指定网口来发送 ICMP 报文(默认会自动选取网口) -b # 允许目标 IP 地址为广播地址,比如 10.0.0.255 。不过 Linux 主机默认配置了 sysctl net.ipv4.icmp_echo_ignore_broadcasts=1
- host 可以是 IP 地址或域名,如果是域名,在执行时还会显示出域名解析后的 IP 地址。
例:
[root@CentOS ~]# 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 报文之后,隔了多久才收到回复,这表示往返时间(RTT)。
- Linux 的 ping 命令默认每隔一秒向目标主机发送一个 ICMP 报文,并且会一直发送,要按
Ctrl+C
终止。
例:
[root@CentOS ~]# 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 或者到达目标主机。
- 例:
[root@CentOS ~]# 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、地理位置、运营商。
- 也可查询指定 IP 的信息:
curl cip.cc/8.8.8.8
- 不同场景的用法:
- 在 Web 浏览器上,访问
cip.cc
网站。 - 在 Unix/Linux 上,执行
curl cip.cc
。 - 在 Windows 上,执行
telnet cip.cc
。
- 在 Web 浏览器上,访问
- 例:
[root@CentOS ~]# curl cip.cc IP : 120.241.2.7 地址 : 中国 广东 深圳 运营商 : 移动 数据二 : 广东省深圳市 | 移动 数据三 : 中国广东深圳 | 移动