[架构之路-44]:目标系统 - 系统软件 - Linux下的网络通信-4-Linux内核网络协议栈网络配置命令网络服务启动

Posted 文火冰糖的硅基工坊

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-44]:目标系统 - 系统软件 - Linux下的网络通信-4-Linux内核网络协议栈网络配置命令网络服务启动相关的知识,希望对你有一定的参考价值。

目录

前言:

第1章 Linux网络概述

1.1 TCP/IP网络协议栈架构

1.2 Linux网络协议栈

1.3 Linux 网络收发流程

1.4 Linux网络用户空间应用程序与Linux内核网络协议栈

第2章 如何通过用户空间命令来配置Linux网络

2.1 IP层命令

2.2 TCP/UDP层相关命令

2.3 应用层相关命令

2.4 它山之石

第3章 配置Linux的网络服务

3.1 Linux 启动、关闭、重启网络服务的两种方式

3.2 显示网络服务

3.3 常见的网络服务


前言:

Linux提供了TCP/IP全套的协议栈的代码实现,但我们还是需要知道:如何配置、使能、监控这些协议栈,使之能够正常工作。

第1章 Linux网络概述

1.1 TCP/IP网络协议栈架构

我们从上到下来看这个网络栈,可以发现:

  • 最上层的应用程序,需要通过系统调用,来跟套接字接口进行交互;
  • 套接字的下面,就是我们前面提到的传输层、网络层和网络接口层;
  • 最底层,则是网卡驱动程序以及物理网卡设备。网卡是发送和接收网络包的基本设备。在系统启动过程中,网卡通过内核中的网卡驱动程序注册到系统中。
  • 网络包的处理非常复杂,网卡驱动程序在网络收发过程中,内核通过中断跟网卡进行交互。网卡硬中断只处理最核心的网卡数据读取或发送,而协议栈中的大部分逻辑,都会放到软中断中处理。

1.2 Linux网络协议栈

在进行网络传输时,数据包就会按照协议栈,对上一层发来的数据进行逐层处理;然后封装上该层的协议头,再发送给下一层。

当然,网络包在每一层的处理逻辑,都取决于各层采用的网络协议。比如在应用层,一个提供 REST API 的应用,可以使用 HTTP 协议,把它需要传输的 JSON 数据封装到 HTTP 协议中,然后向下传递给 TCP 层。

而封装做的事情就很简单了,只是在原来的负载前后,增加固定格式的元数据,原始的负载数据并不会被修改。

比如,以通过 TCP 协议通信的网络包为例,通过下面这张图,我们可以看到,应用程序数据在每个层的封装格式。

1.3 Linux 网络收发流程

(1)网络包的接收流程

  • 当一个网络帧到达网卡后,网卡会通过 DMA 方式,把这个网络包放到收包队列中;
  • 然后通过硬中断,告诉中断处理程序已经收到了网络包。
  • 接着,网卡中断处理程序会为网络帧分配内核数据结构(sk_buff),并将其拷贝到 sk_buff 缓冲区中;
  • 然后再通过软中断,通知内核收到了新的网络帧。
  • 接下来,内核协议栈从缓冲区中取出网络帧,并通过网络协议栈,从下到上逐层处理这个网络帧。
  • 在链路层检查报文的合法性,找出上层协议的类型(比如 IPv4 还是 IPv6),再去掉帧头、帧尾,然后交给网络层。
  • 网络层取出 IP 头,判断网络包下一步的走向,比如是交给上层处理还是转发。当网络层确认这个包是要发送到本机后,就会取出上层协议的类型(比如 TCP 还是 UDP),去掉 IP 头,再交给传输层处理。
  • 传输层取出 TCP 头或者 UDP 头后,根据 < 源 IP、源端口、目的 IP、目的端口 > 四元组作为标识,找出对应的 Socket,并把数据拷贝到 Socket 的接收缓存中。
  • 最后,应用程序就可以使用 Socket 接口,读取到新接收到的数据了。

下面这张图的左半部分表示接收流程,而图中的粉色箭头则表示网络包的处理路径。

(2)网络包的发送流程

了解网络包的接收流程后,就很容易理解网络包的发送流程。

网络包的发送流程就是上图的右半部分,很容易发现,网络包的发送方向,正好跟接收方向相反

  • 首先,应用程序调用 Socket API(比如 sendmsg)发送网络包。
  • 由于这是一个系统调用,所以会陷入到内核态的套接字层中。套接字层会把数据包放到 Socket 发送缓冲区中。
  • 接下来,网络协议栈从 Socket 发送缓冲区中,取出数据包;再按照 TCP/IP 栈,从上到下逐层处理。比如,传输层和网络层,分别为其增加 TCP 头和 IP 头,执行路由查找确认下一跳的 IP,并按照 MTU 大小进行分片。
  • 分片后的网络包,再送到网络接口层,进行物理地址寻址,以找到下一跳的 MAC 地址。然后添加帧头和帧尾,放到发包队列中。这一切完成后,会有软中断通知驱动程序:发包队列中有新的网络帧需要发送。
  • 最后,驱动程序通过 DMA ,从发包队列中读出网络帧,并通过物理网卡把它发送出去。

1.4 Linux网络用户空间应用程序与Linux内核网络协议栈

(1)Linux内核空间程序负责:驱动程序(物理层、MAC层)、IP层、TCP/UDP层、Socket接口

(2)Linux用户空间程序负责:应用程序层,如HTTP, SSH。

(3)网络:多台服务器通过网卡、交换机、路由器等网络设备连接到一起,构成了相互连接的网络。

(4)socket接口:应用程序通过套接字接口发送数据包,先要在网络协议栈中从上到下进行逐层处理,最终再送到网卡发送出去。而接收时,同样先经过网络栈从下到上的逐层处理,最终才会送到应用程序。

1.5 Linux网络通信的问题

第2章 如何通过用户空间命令来配置Linux网络

2.1 IP层命令

(1)ifconfig

ifconfig命令用于显示或设置网络设备,来源于 net-tools 工具包

格式:

ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]

参数说明:

add<地址> 设置网络设备IPv6的IP地址
del<地址> 删除网络设备IPv6的IP地址
down 关闭指定的网络设备
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址
io_addr<I/O地址> 设置网络设备的I/O地址
irq<IRQ地址> 设置网络设备的IRQ
media<网络媒介类型> 设置网络设备的媒介类型
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目
mtu<字节> 设置网络设备的MTU
netmask<子网掩码> 设置网络设备的子网掩码
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址
up 启动指定的网络设备
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能
-promisc 关闭或启动指定网络设备的promiscuous模式
[IP地址] 指定网络设备的IP地址
[网络设备] 指定网络设备的名称

示例:

#显示网络设备信息
ifconfig  
#启动关闭指定网卡
ifconfig eth0 down/up	等于   ifdown/ifup eth0
#设置最大传输单元
ifconfig eth0 mtu 1500 
#临时修改 IP
ifconfig ens33 192.168.10.20/24
#建立虚拟网卡(网卡别名),流量走主网卡
ifconfig ens33:0 192.168.10.21
ifconfig ens33:1 192.168.10.22
#单独显示某网卡
ifconfig eth0

(2)ip

ip 命令和 ifconfig 类似,但前者功能更强大,并旨在取代后者。使用 ip 命令,只需一个命令,你就能很轻松地执行一些网络管理任务。ifconfig 是 net-tools 中已被废弃使用的一个命令,许多年前就已经没有维护了。iproute2 套件里提供了许多增强功能的命令,ip 命令即是其中之一。

 示例:

#显示网卡设备信息
ip a	或者   ip addr show
#查看链路层的状态,但是看不到 ip 地址
ip link
ip -s link	#显示更全面,显示不同网络接口的统计数据
#查看接入你所在的局域网的设备的 MAC 地址
ip neighbour
#开启/关闭 eth0
ip link set eth0 up/down
#临时修改网卡名称
ip link set eth1 name syhjnet
#设置网卡别名(虚拟网卡)
ip addr add 172.16.100.100/16 dev eth0 label eth0:0
ip addr del 172.16.100.100/16 dev eth0 label eth0:0
#给 eth0 添加 IP 地址
ip addr add 20.0.0.19/24 dev eth0
#删除 eth0 网卡上的 IP
ip addr del 20.0.0.19/24 dev eth0
ip addr flush dev eth0
#设置 eth0 默认网关为 192.168.0.2
ip route add default via 20.0.0.2 dev eth0
#查看路由表条目
ip route show
#查看具体 IP 路由包从哪里来
ip route get 20.0.0.19
#更改默认路由
ip route add default via 20.0.0.196
#监控 netlink 消息
ip monitor all

(3)ping

Linux ping 命令用于检测主机,执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

格式:

ping [参数选项] [主机名或IP地址]
参数含义
-c设置完成要求回应的次数
-i指定收发信息的间隔时间
-s设置数据包的大小
-w在设定的秒后退出

示例:

[root@c7-1 ~]#ping -c 5 www.baidu.com
PING www.a.shifen.com (112.80.248.75) 56(84) bytes of data.
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=1 ttl=128 time=25.0 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=2 ttl=128 time=25.8 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=3 ttl=128 time=25.9 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=4 ttl=128 time=24.9 ms
64 bytes from 112.80.248.75 (112.80.248.75): icmp_seq=5 ttl=128 time=25.8 ms

--- www.a.shifen.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4039ms
rtt min/avg/max/mdev = 24.938/25.535/25.974/0.448 ms

(4)route

route 命令用于显示和操作 IP 路由表。

格式:

route [-nee]
route add [-net|-host] [网域或主机] netmask [mask] [gw|dev]
route del [-net|-host] [网域或主机] netmask [mask] [gw|dev]

选项说明:

add		添加一条路由规则
del		删除一条路由规则
-net	目的地址是一个网络
-host	目的地址是一个主机
target	目的网络或主机
netmask	目的地址的网络掩码
gw		路由数据包通过的网关
dev		为路由指定的网络接口

要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器或者同时位于两个网络的网关。在 Linux 系统中,设置路由通常是为了解决以下问题:该 Linux 系统在一个局域网中,局域网中有一个网关,能够让机器访问 internet,那么就需要将这台机器的 IP 地址设置为 Linux 机器的默认路由。要注意的是,直接在命令行下执行 route 命令来添加路由,不会永久保存,当网卡重启或者机器重启之后,该路由就失效了。

要想永久保存,有如下方法:

1.在 /etc/rc.local 里添加
2.在 /etc/sysconfig/network 里添加到末尾
3./etc/sysconfig/static-router :
any net x.x.x.x/24 gw y.y.y.y

route 命令的输出项说明:

Destination	目标网段或者主机
Gateway	    网关地址,”*” 表示目标是本主机所属的网络,不需要路由
Genmask	    网络掩码
Flags	    标记。一些可能的标记如下:
 	        U — 路由是活动的
 			H — 目标是一个主机
 			G — 路由指向网关
 			R — 恢复动态路由产生的表项
 			D — 由路由的后台程序动态地安装
 			M — 由路由的后台程序修改
 			! — 拒绝路由
Metric	路由距离,到达指定网络所需的中转数(linux 内核中没有使用)
Ref	    路由项引用次数(linux 内核中没有使用)
Use	    此路由项被路由软件查找的次数
Iface	该路由表项对应的输出接口

示例:

[root@c7-1 ~]#route -nee
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface    MSS   Window irtt
0.0.0.0         20.0.0.2        0.0.0.0         UG    100    0        0 eth0     0     0      0
20.0.0.0        0.0.0.0         255.255.255.0   U     100    0        0 eth0     0     0      0

#路由主要有三种:主机路由,网络路由,默认路由
#添加到主机的路由,目标 192.168.1.3 网关 172.16.0.1
route add -host 192.168.1.3 gw 172.16.0.1 dev eth0
#添加到网络的路由,目标 192.168.0.0 网关 172.16.0.1
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.16.0.1 dev eth0
route add -net 192.168.0.0/24 gw 172.16.0.1 dev eth0
route add -net 192.168.8.0/24 dev eth1 metric 200
#添加默认路由,网关 172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add -net 0.0.0.0/0 gw 172.16.0.1
route add default gw 172.16.0.1
#删除路由
route del -host 192.168.1.2 dev eth0:0  
route del -host 10.20.30.148 gw 10.20.30.40  
route del -net 10.20.30.40 netmask 255.255.255.248 eth0  
route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41  
route del -net 192.168.1.0/24 eth1  
route del default gw 192.168.1.1  

(5)netstat

netstat 用来查看当前操作系统的网络连接状态、路由表、接口统计等信息,来自于 net-tools 工具包,ss 是 netstat 的升级版。

netstat 用来查看当前操作系统的网络连接状态、路由表、接口统计等信息,来自于 net-tools 工具包,ss 是 netstat 的升级版。

参数    含义
-a    显示主机中所有活动的网络连接信息 (包括监听、非监听状态的服务端口)
-n    以数字的形式显示相关的主机地址、端口等信息
-p    显示与网络连接相关联的进程号、进程名称信息 (该选项需要 root 权限)
-l    显示处于监听 (Listen) 状态的网络连接及端口信息
-t    查看 TCP (Transmission Control Protocol,传输控制协议) 相关的信息
-u    显示 UDP (User Datagram Protocol,用户数据报协议) 协议相关的信息
-r    显示路由表信息
-i    显示网卡列表
-g    显示组播组的关系
-s    显示网络统计信息

常用命令选项:

netstat [-anpt] [-anpu] [-anptu] [-anpltu] [-ntlp]

示例:

[root@c7-1 ~]#netstat -anpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3631/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3421/sshd           
tcp        0      0 20.0.0.19:22            20.0.0.1:64385          ESTABLISHED 20165/sshd: root@pt 
tcp        0     52 20.0.0.19:22            20.0.0.1:60938          ESTABLISHED 30806/sshd: root@pt 
tcp6       0      0 ::1:25                  :::*                    LISTEN      3631/master         
tcp6       0      0 :::22                   :::*                    LISTEN      3421/sshd           
[root@c7-1 ~]#netstat -anpt | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3421/sshd           
tcp        0      0 20.0.0.19:22            20.0.0.1:64385          ESTABLISHED 20165/sshd: root@pt 
tcp        0     52 20.0.0.19:22            20.0.0.1:60938          ESTABLISHED 30806/sshd: root@pt 
tcp6       0      0 :::22                   :::*                    LISTEN      3421/sshd  

(6)ss

ss 命令来自于 iproute 包,是 netstat 的升级版本。

netstat 通过遍历 /proc 来获取 socket 信息,

ss 使用 netlink 与内核 tcp_diag 模块通信获取 socket 信息。

格式:

ss [OPTION]... [FILTER]

选项:

-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock 相关
-l: listen 状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及 PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息

示例:

#显示本地打开的所有端口
ss -l
#列出当前 socket 详细信息
ss -s
#显示每个进程具体打开的 socket
ss -pl
#显示所有 tcp socket
ss -at
#显示所有的 udp socket
ss -au
#显示所有已建立的 ssh 连接
ss -o state established '( dport = :ssh or sport = :ssh )'
#显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'

(7)traceroute

traceroute 命令可以用于测试从当前主机到目的主机之间经过了哪些网络结点,并显示各个中间结点的连接状态(响应时间)。对于无法响应的结点,连接状态将显示为 “*”,预设数据包大小是 40Bytes,用户可另行设置。如果没有 traceroute 命令可执行 yum -y install traceroute 安装。

格式:

traceroute [参数] [主机|IP]

参数:

-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 开启或关闭数据包的正确性检验

示例:

[root@c7-1 ~]#traceroute 20.0.0.25
traceroute to 20.0.0.25 (20.0.0.25), 30 hops max, 60 byte packets
 1  20.0.0.25 (20.0.0.25)  0.942 ms  0.782 ms  0.647 ms
#可以看到这两台机器之间没有经过路由,是直连或连着交换机的状态

[root@c7-1 ~]#traceroute www.baidu.com
traceroute to www.baidu.com (112.80.248.75), 30 hops max, 60 byte packets
 1  gateway (20.0.0.2)  5.900 ms  5.817 ms  5.758 ms
 2  * * *
 3  * * *
 4  * * *
......

(7)arp

arp 命令用于操作主机的 arp 缓冲区,可以用来显示 arp 缓冲区中的所有条目、删除指定的条目或者添加静态的 ip 地址与 MAC 地址对应关系。

格式:

arp [-vn]  [<HW>] [-i <if>] [-a] [<hostname>]             <-Display ARP cache
arp [-v]          [-i <if>] -d  <host> [pub]               <-Delete ARP entry
arp [-vnD] [<HW>] [-i <if>] -f  [<filename>]            <-Add entry from file
arp [-v]   [<HW>] [-i <if>] -s  <host> <hwaddr> [temp]            <-Add entry
arp [-v]   [<HW>] [-i <if>] -Ds <host> <if> [netmask <nm>] pub          <-''-

参数:

-a<主机>:显示 arp 缓冲区的所有条目
-H<地址类型>:指定 arp 指令使用的地址类型
-d<主机>:从 arp 缓冲区中删除指定主机的 arp 条目
-D:使用指定接口的硬件地址
-e:以 Linux 的显示风格显示 arp 缓冲区中的条目
-i<接口>:指定要操作 arp 缓冲区的网络接口
-s<主机><MAC地址>:设置指定的主机的 IP 地址与 MAC 地址的静态映射
-n:以数字方式显示 arp 缓冲区中的条目
-v:显示详细的 arp 缓冲区条目,包括缓冲区条目的统计信息
-f<文件>:设置主机的 IP 地址与 MAC 地址的静态映射

示例:

#显示 ARP 表
arp -n    或    ip neigh
#ARP 静态绑定 MAC 地址可以防止 ARP 欺骗
arp -s 10.0.0.6 00:0c:29:32:80:38
#删除 arp 缓存条目
arp -d 10.0.0.6
#指定回复的 MAC 地址
arp -i eth0 -Ds 10.0.0.2 eth1 pub

2.2 TCP/UDP层相关命令

(1)tcpdump

网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供 and、or、not 等逻辑语句帮助去除无用的信息。

格式:

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>][-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

选项:

-a 尝试将网络和广播地址转换成名称
-c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作
-d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出
-dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出
-ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出
-e 在每列倾倒资料上显示连接层级的文件头
-f 用数字显示网际网络地址
-F<表达文件> 指定内含表达方式的文件
-i<网络界面> 使用指定的网络截面送出数据包
-l 使用标准输出列的缓冲区
-n 不把主机的网络地址转换成名字
-N 不列出域名
-O 不将数据包编码最佳化
-p 不让网络界面进入混杂模式
-q 快速输出,仅列出少数的传输协议信息
-r<数据包文件> 从指定的文件读取数据包数据
-s<数据包大小> 设置每个数据包的大小
-S 用绝对而非相对数值列出TCP关联数
-t 在每列倾倒资料上不显示时间戳记
-tt 在每列倾倒资料上显示未经格式化的时间戳记
-T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型
-v 详细显示指令执行过程
-vv 更详细显示指令执行过程
-x 用十六进制字码列出数据包资料
-w<数据包文件> 把数据包数据写入指定的文件

示例

#不指定任何参数,监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡
tcpdump
#监听特定网卡
tcpdump -i eth0
#限制抓包的数量,抓到 1000 个包后,自动退出
tcpdump -c 1000
#监听特定主机,监听主机 10.0.0.100 的通信包,出、入的包都会被监听
tcpdump host 10.0.0.100
#特定来源
tcpdump src host hostname
#特定目标地址
tcpdump dst host hostname
#如果不指定 src 跟 dst,那么来源或者目标是 hostname 的通信都会被监听
tcpdump host hostname
#特定端口
tcpdump port 3000
#监听 TCP/UDP,服务器上不同服务分别用了 TCP、UDP 作为传输层,假如只想监听 TCP 的数据包
tcpdump tcp
#来源主机+端口+TCP,监听来自主机 10.0.0.100 在端口 22 上的 TCP 数据包
tcpdump tcp port 22 and src host 10.0.0.100
#监听特定主机之间的通信
tcpdump ip host 10.0.0.101 and 10.0.0.102
#10.0.0.101 和除了 10.0.0.1 之外的主机之间的通信
tcpdump ip host 10.0.0.101 and ! 10.0.0.1

#保存到本地,tcpdump 默认会将输出写到缓冲区,只有缓冲区内容达到一定的大小,或者 tcpdump 退出时,才会将输出写到本地磁盘,可以加上 -U 强制立即写到本地磁盘(一般不建议,性能相对较差)
tcpdump -n -vvv -c 1000 -w /tmp/tcpdump_save.cap

2.3 应用层相关命令

(1)lsof

lsof(list open files)是一个查看进程打开的文件的工具
选项:

-a:列出打开文件存在的进程
-c<进程名>:列出指定进程所打开的文件
-u:列出 UID 号进程详情
-g:列出 GID 号进程详情
-d<文件号>:列出占用该文件号的进程
+d<目录>:列出目录下被打开的文件
+D<目录>:递归列出目录下被打开的文件
-n<目录>:列出使用 NFS 的文件
-i<条件>:列出符合条件的进程( IPV(4/6)协议	:端口	@ip )
-p<进程号>:列出指定进程号所打开的文件
-n: 不反向解析网络名字

(2)nslookup

域名解析工具,执行 yum -y install bind-utils 安装。

格式:

[root@c7-1 ~]#nslookup www.baidu.com
Server:		20.0.0.2
Address:	20.0.0.2#53

Non-authoritative answer:
www.baidu.com	canonical name = www.a.shifen.com.
Name:	www.a.shifen.com
Address: 112.80.248.75
Name:	www.a.shifen.com
Address: 112.80.248.76

[root@c7-1 ~]#nslookup www.google.com
Server:		20.0.0.2
Address:	20.0.0.2#53

Non-authoritative answer:
Name:	www.google.com
Address: 104.244.46.208
Name:	www.google.com
Address: 2001::1f0d:5211

[root@c7-1 ~]#cat /etc/resolv.conf	#域名解析配置文件
# Generated by NetworkManager
# 一行一个 DNS,最多配置三个 DNS,优先使用第一个 DNS 服务器
nameserver 20.0.0.2

[root@c7-1 ~]#cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
112.80.248.75 www.baidu.com
#/etc/hosts 文件中记录着一份主机名与 IP 地址的映射关系表,一般用来保存经常需要访问的主机的信息。当访问一个未知的域名时,先查找该文件中是否有相应的映射记录,如果找不到再去向 DNS 服务器查询。

(3)dig

也是解析域名,同样来自 bind-utils 包。

格式:

dig 域名

示例:

[root@c7-1 ~]#dig www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46750
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; MBZ: 0x0005, udp: 1280
;; QUESTION SECTION:
;www.baidu.com.			IN	A

;; ANSWER SECTION:
www.baidu.com.		5	IN	CNAME	www.a.shifen.com.
www.a.shifen.com.	5	IN	A	112.80.248.75
www.a.shifen.com.	5	IN	A	112.80.248.76

;; Query time: 2 msec
;; SERVER: 20.0.0.2#53(20.0.0.2)
;; WHEN: 三 8月 25 16:46:53 CST 2021
;; MSG SIZE  rcvd: 104

(3)nmap

nmap 是一个强大的端口扫描类安全评测工具,支持 ping 扫描、多端口检测等多种技术。

# nmap 软件包安装
rpm -qa | grep nmap
yum -y install nmap

格式:

nmap [扫描类型] [选项] [扫描目标]

常用参数选项:

-p:指定扫描的端口
-n:禁用反向 DNS 解析(加快扫描速度)
-sS:TCP 的 SYN 扫描(半开扫描),只向目标发出 SYN 数据包,如果收到 SYN/ACK 响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放
-sT:TCP 连接扫描,这是完整的 TCP 扫描方式(默认扫描类型),用来建立一个 TCP 连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放
-sF:TCP 的 FIN 扫描,开放的端口会忽略这种数据包,关闭的端口会回应 RST 数据包。许多防火墙只对 SYN 数据包进行简单过滤,而忽略了其他形式的 TCP 攻击包。这种类型的扫描可间接检测防火墙的健壮性
-sU:UDP 扫描,探测目标主机提供哪些 UDP 服务,UDP 扫描的速度会比较慢
-sP:ICMP 扫描,类似于 ping 检测,快速判断目标主机是否存活,不做其他扫描
-P0:跳过 ping 检测,这种方式认为所有的目标主机是存活的,当对方不响应 ICMP 请求时,使用这种方式可以避免因无法 ping 通而放弃扫描

TCP 控制位类型:

SYN  建立连接
ACK  确认数据包传输状况
FIN  关闭连接
PSH  推送位
RST  重置
URG  紧急

示例

#分别查看本机开放的 TCP 端口、UDP 端口
nmap -sT 127.0.0.1
nmap -sU 127.0.0.1
#检测 192.168.80.0/24 网段有哪些主机提供 HTTP 服务
nmap -p 80 192.168.80.0/24
#检测 192.168.80.0/24 网段有哪些存活主机
nmap -n -sP 192.168.80.0/24 

2.4 它山之石

Linux网络命令合集_Hermokrates的博客-CSDN博客_linux网络命令

第3章 配置Linux的网络服务

3.1 Linux 启动、关闭、重启网络服务的两种方式

(1)使用service脚本来调度网络服务,如:

启动service network start

关闭service network stop

重启service network restart

(2)直接执行网络服务的管理脚本,如:

启动/etc/init.d/network start

关闭/etc/init.d/network stop

重启/etc/init.d/network restart

3.2 显示网络服务

1、linux显示所有服务的运行状态命令

service --status-all

chkconfig --list

2、linux查看单个服务的运行状态命令

service iptables status

3、linux查看服务启动状态,是否开机自动启动命令

chkconfig --list servicename

3.3 常见的网络服务

Linux网络服务常用完了管理服务包括:DHCP、FTP、ssh、DNS、NFS、PXE

Linux网络服务总结,复习看这个很方便(DHCP、FTP、SSH、DNS、NFS、PXE)_Steve lu的博客-CSDN博客

以上是关于[架构之路-44]:目标系统 - 系统软件 - Linux下的网络通信-4-Linux内核网络协议栈网络配置命令网络服务启动的主要内容,如果未能解决你的问题,请参考以下文章

[架构之路-56]:目标系统 - 平台软件 - 总体架构概述

[架构之路-28]:目标系统 - 系统软件 - Linux OS内核功能架构图解内核构建内核启动流程

[架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程

[架构之路-21]:目标系统 - 系统软件 - 计算机系统架构计算机指令系统结构化程序与分层编程。

[架构之路-29]:目标系统 - 系统软件 - Linux OS内核以及内核驱动的调试技术

[架构之路-26]:目标系统 - 系统软件 - bootloader uboot使用方法常用命令