Linux - 网络管理

本贴最后更新于 1835 天前,其中的信息可能已经时移世易

网络状态查看

ifconfig

查看网络信息:

ifconfig     

执行该命令输出如下:

huny@huny-PC:~$ ifconfig
enp2s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether 80:e8:2c:12:fe:f1  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        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
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 7083  bytes 2605304 (2.4 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7083  bytes 2605304 (2.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlp0s20f3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.33.2.70  netmask 255.255.224.0  broadcast 172.33.31.255
        inet6 fe80::434f:5457:5f70:c7d4  prefixlen 64  scopeid 0x20<link>
        ether 58:a0:23:70:e7:43  txqueuelen 1000  (Ethernet)
        RX packets 734318  bytes 432089360 (412.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 173208  bytes 18868472 (17.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

huny@huny-PC:~$ 

在输出的结果中:

其中的 enp2s0,lo,wlp0s20f3 是网卡。其中 lo(Loopback)纯软件网络设备接口,它的 ip 地址永远都是 127.0.0.1,这个可以提供给自己本地的服务访问。

而每一个网卡下面的 inet 是 ip(ipv4)地址,netmask 是子网掩码,broadcast 是广播地址

ether 是网卡的 MAC 地址。然后 RXTX 表示发送和接受的包的个数和大小。

route

查看网关:

route [-n]     #使用 -n 参数不解析主机名,不加 -n ,每个ip会反解为域名

执行该命令输出如下:

huny@huny-PC:~$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.33.0.1      0.0.0.0         UG    600    0        0 wlp0s20f3
172.33.0.0      0.0.0.0         255.255.224.0   U     600    0        0 wlp0s20f3
huny@huny-PC:~$ 

在输出的结果中:

其中的 Destination 是目标网段或者主机,Gateway 是网关地址,”*” 表示目标是本主机所属的网络,不需要路由,Genmask 是掩码,Flags 是标记,Metric 是路由距离,到达指定网络所需的中转数(linux 内核中没有使用)Ref 是路由项引用次数(linux 内核中没有使用),Use 此路由项被路由软件查找的次数,Iface 该路由表项对应的网卡。

其中 Flags 可以为

一些标记解释
H — 目标是一个主机
G — 路由指向网关
R — 恢复动态路由产生的表项
D — 由路由的后台程序动态地安装
M — 由路由的后台程序修改
! — 拒绝路由

网络配置

ip

修改 ip

ifconfig 网卡名 IP地址 

修改 ip 并修改子网掩码

ifconfig 网关名 IP地址  netmask 子网掩码

网卡

关掉启动网卡

ifup/ ifdown  网卡名

网关

修改默认网关(0.0.0.0)

  1. 先删除默认网关

    route del default gw  网关地址
    
  2. 添加网关

    route add default gw  网关地址
    

路由

添加明细路由(访问指定的地址走指定的网关):

route add -host 主机地址  gw 网关地址

添加明细路由(访问一个网段走指定的网关):

route add -net  网段 netmask 子网掩码  gw 网关地址

网络故障排除

ping

ping 检测当前主机与目标主机的网络是否畅通

检测是否可以上百度:

huny@huny-PC:~$ ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=54 time=29.5 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=54 time=49.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=3 ttl=54 time=58.6 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=4 ttl=54 time=62.2 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=5 ttl=54 time=61.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=6 ttl=54 time=76.8 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=7 ttl=54 time=78.2 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=8 ttl=54 time=72.4 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=9 ttl=54 time=81.2 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=10 ttl=54 time=58.0 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=11 ttl=54 time=56.9 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=12 ttl=54 time=67.9 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=13 ttl=54 time=63.7 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=14 ttl=54 time=73.1 ms
^C
--- www.a.shifen.com ping statistics ---
14 packets transmitted, 14 received, 0% packet loss, time 13018ms
rtt min/avg/max/mdev = 29.533/63.560/81.213/12.973 ms
huny@huny-PC:~$ 

使用 ping 的时候,在 Linux 不会自动停止,如果想停止要使用 ctrl+c 快捷键。

也可以使用参数:-w 时间(s),这样在运行多少秒后会自动停止。

检测是否可以上百度(4s 后停止):

huny@huny-PC:~$ ping -w 4 www.baidu.com
PING www.a.shifen.com (14.215.177.38) 56(84) bytes of data.
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=1 ttl=54 time=31.5 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=2 ttl=54 time=33.7 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=54 time=30.9 ms
64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=4 ttl=54 time=32.8 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 30.946/32.257/33.749/1.117 ms
huny@huny-PC:~$ 

traceroute

traceroute 用来追踪当前主机到目标主机的状态

用法:

traceroute [参数] [主机] 

参数:

  • -d 使用 Socket 层级的排错功能。
  • -f 设置第一个检测数据包的存活数值 TTL 的大小。
  • -F 设置勿离断位。
  • -g 设置来源路由网关,最多可设置 8 个。
  • -i 使用指定的网络界面送出数据包。
  • -I 使用 ICMP 回应取代 UDP 资料信息。
  • -m 设置检测数据包的最大存活数值 TTL 的大小。
  • -n 直接使用 IP 地址而非主机名称。
  • -p 设置 UDP 传输协议的通信端口。
  • -r 忽略普通的 Routing Table,直接将数据包送到远端主机上。
  • -s 设置本地主机送出数据包的 IP 地址。
  • -t 设置检测数据包的 TOS 数值。
  • -v 详细显示指令的执行过程。
  • -w 设置等待远端主机回报的时间。
  • -x 开启或关闭数据包的正确性检验。
huny@huny-PC:~$ traceroute  www.baidu.com
traceroute to www.baidu.com (14.215.177.39), 30 hops max, 60 byte packets
 1  172.33.0.1 (172.33.0.1)  2.952 ms  3.214 ms  3.374 ms
 2  183.64.60.81 (183.64.60.81)  3.609 ms  3.897 ms  4.179 ms
 3  222.176.39.213 (222.176.39.213)  5.709 ms  5.868 ms  5.990 ms
 4  222.176.46.25 (222.176.46.25)  4.992 ms  6.043 ms  6.308 ms
 5  222.176.6.17 (222.176.6.17)  6.431 ms 222.176.9.121 (222.176.9.121)  6.619 ms  6.753 ms
 6  202.97.28.21 (202.97.28.21)  35.829 ms 202.97.28.162 (202.97.28.162)  32.151 ms 202.97.34.85 (202.97.34.85)  29.472 ms
 7  113.96.5.74 (113.96.5.74)  35.882 ms 113.96.4.66 (113.96.4.66)  35.834 ms 113.96.4.54 (113.96.4.54)  33.246 ms
 8  * 98.96.135.219.broad.fs.gd.dynamic.163data.com.cn (219.135.96.98)  37.394 ms  35.895 ms
 9  14.215.32.90 (14.215.32.90)  34.492 ms  34.529 ms 14.215.32.126 (14.215.32.126)  33.039 ms
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *
huny@huny-PC:~$ 

结果说明:

记录按序列号从 1 开始,每个纪录就是一跳 ,每跳表示一个网关,我们看到每行有三个时间,单位是 ms,其实就是-q 的默认参数。探测数据包向每个网关发送三个数据包后,网关响应后返回的时间;如果您用 traceroute -q 4 www.baidu.com ,表示向每个网关发送 4 个数据包。那么就会出现四个时间。

有时我们 traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了 ICMP 的返回信息,所以我们得不到什么相关的数据包返回数据。

有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因。当然如果某台 DNS 出现问题时,不能解析主机名、域名时,也会 有延时长的现象;您可以加-n 参数来避免 DNS 解析,以 IP 格式输出数据。
如果在局域网中的不同网段之间,我们可以通过 traceroute 来排查问题所在,是主机的问题还是网关的问题。如果我们通过远程来访问某台服务器遇到问题时,我们用到 traceroute 追踪数据包所经过的网关,提交 IDC 服务商,也有助于解决问题;但目前看来在国内解决这样的问题是比较困难的,就是我们发现问题所在,IDC 服务商也不可能帮助我们解决。

mtr

mtr 检查到目标主机间是否有数据包丢失,比 tracreoute 更详细。

更多可查看MTR 命令详解详解

nslookup

nslookup 可以查看域名对应的 ip,用于只知道域名,但是你需要 ip 地址的场景。

telnet

如果能与某个主机联通,但是还是不能访问某个服务,就可以查看是否端口问题。

telnet 检查与某个主机的端口的连接状态

telnet www.baidu.com 80       #检测是否与百度的80端口是可连接的

运行结果:

huny@huny-PC:~$ telnet www.baidu.com 80
Trying 14.215.177.39...
Connected to www.a.shifen.com.
Escape character is '^]'.

如果畅通,就会出现这种显示,如果我们要退出的话可以使用 ctrl+] 进入如下页面:

huny@huny-PC:~$ telnet www.baidu.com 80
Trying 14.215.177.39...
Connected to www.a.shifen.com.
Escape character is '^]'.
^]
telnet> 

然后输入 quit 就可以退出了。

tcpdump

查看每一个发送的数据包是怎么样的(即用来网络抓包)

抓取任意网卡的 80 端口的数据包

tcpdump -i any -n port 80   # -i any标识所有的网卡,-n不要显示域名,显示ip

抓取某个主机的数据包

tcpdump -i any -n host 地址

抓取某个主机的某个端口的数据包

tcpdump -i any -n host 地址 and port 80 #抓取某个主机的80端口的数据包

如果想要把抓取的结果输出到某个地方,可以在命令后加 -w [输出地址]

更多详细用法,,,,,,,,待学习!!!!!!后面再总结,(^__^) 嘻嘻……

netstat

netstat 查看服务的监听范围的问题

-n 显示 ip 地址,不显示域名

t 以 tcp 的方式去截取

p 除了显示对应的端口外,也显示对应的进程

l tcp 的一个状态

运行示例:

huny@huny-PC:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                   
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:4300          0.0.0.0:*               LISTEN      5549/wineserver.rea 
tcp        0      0 127.0.0.1:4301          0.0.0.0:*               LISTEN      5549/wineserver.rea 
tcp        0      0 127.0.0.1:12333         0.0.0.0:*               LISTEN      4613/electron-ssr - 
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:1080          0.0.0.0:*               LISTEN      4777/python         
tcp        0      0 127.0.0.1:2333          0.0.0.0:*               LISTEN      4613/electron-ssr - 
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::139                  :::*                    LISTEN      -                   
tcp6       0      0 ::1:631                 :::*                    LISTEN      -                   
tcp6       0      0 :::445                  :::*                    LISTEN      -                   
huny@huny-PC:~$ 

ss

ss 查看服务的监听范围的问题

使用参数与 netstat 差不多相同:

运行示例:

huny@huny-PC:~$ ss -ntpl
State       Recv-Q Send-Q                                                             Local Address:Port                                                                            Peer Address:Port              
LISTEN      0      80                                                                     127.0.0.1:3306                                                                                       *:*                  
LISTEN      0      50                                                                             *:139                                                                                        *:*                  
LISTEN      0      10                                                                     127.0.0.1:4300                                                                                       *:*                   users:(("TIM.exe",pid=6046,fd=262),("wineserver.real",pid=5549,fd=75))
LISTEN      0      10                                                                     127.0.0.1:4301                                                                                       *:*                   users:(("TIM.exe",pid=6046,fd=263),("wineserver.real",pid=5549,fd=275))
LISTEN      0      511                                                                    127.0.0.1:12333                                                                                      *:*                   users:(("electron-ssr",pid=4613,fd=106))
LISTEN      0      5                                                                      127.0.0.1:631                                                                                        *:*                  
LISTEN      0      512                                                                    127.0.0.1:1080                                                                                       *:*                   users:(("python",pid=4777,fd=6))
LISTEN      0      511                                                                    127.0.0.1:2333                                                                                       *:*                   users:(("electron-ssr",pid=4613,fd=110))
LISTEN      0      50                                                                             *:445                                                                                        *:*                  
LISTEN      0      50                                                                            :::139                                                                                       :::*                  
LISTEN      0      5                                                                            ::1:631                                                                                       :::*                  
LISTEN      0      50                                                                            :::445                                                                                       :::*                  
huny@huny-PC:~$ 

常用网络配置文件

关于网络的配置文件有:
主机地址配置文件:/etc/hosts
网络服务信息文件:/etc/services
允许与拒绝地址配置文件:/etc/hosts.allow 和/etc/hosts.deny
网络配置文件:/etc/network/interfaces
主机查找配置文件:/etc/host.conf
名称服务器查找顺序配置文件:/etc/resolv.conf
网卡参数配置文件:/etc/network/interfaces

/etc/hosts

主机地址配置文件/etc/hosts,也叫本地主机文件,其内容为 IP 地址与其对应的主机名,用来实现将主机名称解析为 IP 地址。

hosts 文件是 Linux 系统中一个负责 IP 地址与域名快速解析的文件,以 ASCII 格式保存在“/etc”目录下,文件名为“hosts”。hosts 文件包含了 IP 地址和主机名之间的映射,还包括主机名的别名。

在没有域名服务器的情况下,系统上的所有网络程序都通过查询该文件来解析对应于某个主机名的 IP 地址,否则就需要使用 DNS 服务程序来解决。通常可以将常用的域名和 IP 地址映射加入到 hosts 文件中,实现快速方便的访问。 Linux 主机名的相关配置文件就是/etc/hosts;这个文件告诉本主机哪些域名对应那些 ip,那些主机名对应哪些 ip:

列如我的 hosts 文件:

huny@huny-PC:/etc$ cat /etc/hosts
#格式:IP地址 主机名/域名 主机别名
127.0.0.1	localhost
127.0.1.1   huny-PCs

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
huny@huny-PC:/etc$ 

一般情况下 hosts 文件的每行为一个主机,每行由三部份组成,每个部份由空格隔开。其中#号开头的行做说明,不被系统解释。

这里可以稍微解释一下主机名(hostname)和域名(Domain)的区别:

主机名通常在局域网内使用,通过 hosts 文件,主机名就被解析到对应 ip;

域名通常在 internet 上使用,但如果本机不想使用 internet 上的域名解析,这时就可以更改 hosts 文件,加入自己的域名解析。

查看修改自己的 hostname

huny@huny-PC:/etc$ hostname         #查看自己的hostname
huny-PC
huny@huny-PC:/etc$ sudo hostname huny     #修改自己的hostname
[sudo] huny 的密码:
huny@huny-PC:/etc$ hostname 
huny
huny@huny-PC:/etc$ 

通过 hostname 工具来设置主机名只是临时的,下次重启系统时,此主机名将不会存在;

永久设置主机名:

修改/etc/hostname,里面写入需要的设置的主机名即可,重启或注销登陆后生效。

也可以使用命令:hostnamectl set-hostname 主机名

其余配置信息可参考网络配置文件

  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    943 引用 • 943 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...