Linux运维-网络命令+网络协议

Linux网络相关属性配置管理和应用

一、回顾

  1、计算机网络基础,Linux网络属性配置
    a、TCP/IP协议栈:数据链路层,网络层,传输层,应用层
数据链路层:MAC
      网络层:IP
      传输层:TCP,UDP
      应用层:http,https,ftp...
    b、链接路层:以太网帧
    c、互联网层:IP报文
    d、以太网帧:最大传输单元是MTU,是1500个字节,因为我们以太网帧自己守护还要占据一些内容,比如源mac,目标mac等,因此留给IP报文的只有一千四百多个字节了。这就意味着我们每一个文件就要拆分成大小为一千多个字节的一个又一个报文来分别传送的。

二、Linux网络属性配置

ifconfig 命令

用于配置网卡的IP地址,等网路参数信息或者查看显示网路接口信息,还能配置临时性的IP地址、子网掩码、网关信息等。

查看命令的使用手册,帮助信息
  1. ifconfig --help

  2. man ifconfig #命令的详细手册

ifconfig 使用案例
  1. 查看网络地址信息
  • ifconfig #查看所有的网络接口信息

  • ifconfig ens33 #查看指定的网卡信息

  1. 详细信息解释

第一块网卡的信息,设备名是ens33,网卡的配置文件路径是 /etc/sysconfig/network-scripts/ifcfg-ens_33

[root@localhost network-scripts]# ifconfig ens_33
ens_33: error fetching interface information: Device not found
[root@localhost network-scripts]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
inet 192.168.226.128  netmask 255.255.255.0  broadcast 192.168.226.255
inet6 fe80::642a:10ac:5446:6059  prefixlen 64  scopeid 0x20<link>
ether 00:0c:29:1d:c6:bf  txqueuelen 1000  (Ethernet)
RX packets 228946  bytes 334903682 (319.3 MiB)
RX errors 0  dropped 0  overruns 0  frame 0
TX packets 64773  bytes 3908565 (3.7 MiB)
TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • BROADCAST表示支持广播功能
  • RUNNING表示处于运行中
  • MULTICAST表示支持组播或多播功能
  • mtu 1500表示网卡最大的传输单元不超过1500个字节
  • ipv4 的地址 inet 192.168.226.128
  • 广播地址 broadcast 192.168.226.255
  • 子网掩码地址 netmask 255.255.255.0
  • RX/TX packets 代表网卡收发的数据包大小
  • ipv6 地址 inet 192.168.226.128
  • mac地址 inet 192.168.226.128
  1. 指定开启、或者关闭网卡
    关闭网卡,注意不得在服务器上执行(仅在学习中使用)
    ifconfig 设备名字 up/down 开启网卡/关闭网卡

  2. 修改、设置IP地址

命令方式修改的配置信息会立即送往内核中的TCP/IP协议栈中并立即生效

添加一个新的IP地址:
第一种方式,
`ifconfig ens33:0 192.168.226.100 netmask 255.255.255.0 up`
第二种方式,
`ifconfig ens33:1 192.168.226.101/24 up`
  1. 修改机器的MAC地址信息
    原本的MAC地址信息:ether 00:0c:29:1d:c6:bf
    修改MAC地址:ifconfig ens33 hw ether 00:0c:29:13:10:bf
    修改MAC地址后,查看MAC地址信息

    [root@localhost network-scripts]# ifconfig |grep ether
    ether 00:0c:29:13:10:bf  txqueuelen 1000  (Ethernet)
    ether 00:0c:29:13:10:bf  txqueuelen 1000  (Ethernet)
    ether 00:0c:29:13:10:bf  txqueuelen 1000  (Ethernet)
    ether 52:54:00:49:e2:77  txqueuelen 1000  (Ethernet)
    
  2. 永久修改网络设备信息,ifconfig命令只是临时修改网络配置,要永久修改还得写入到配置文件中

    /etc/sysconfig/network-scripts/ifcfg-ens_33(ifcfg-设备名)


route 路由命令:路由查看及管理

什么是 route 路由命令?

计算机之间的数据传输必须经过的网络,网络可以直接二台计算机,也可以通过一个一个的节点来连接
路由:从源主机到目标主机的转发过程

路由分类学习:

路由分为静态和动态路由

  • Linux机器上配置的都是静态路由,由运维人员通过route命令去管理
  • 动态路由:动态路由无需人为干预,由路由器、交换机自动分配规则而来。
路由命令学习案例
  1. 查看路由表信息

[xieyan@localhost ~]$ route

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.226.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33
  1. 不进行Dns解析的路由表查看

加 -n参数会在相应的路由表中将对应的主机名解析为IP地址,如果不加-n参数则不会解析

[xieyan@localhost ~]$ route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.226.2   0.0.0.0         UG    100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.226.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

参数解析:

Destination  :表示target,network,目标网络。
Gateway :表示网关地址,网络是通过该IP出口,如果显示  0.0.0.0的 IP ,表示该路由信息,是从本机转发出去的
Genmask : 子网掩码地址的表示,IP地址配合子网掩码,才是一个完整的网络信息。目标网络的掩码地址
Flags :路由标记,标记当前的网络状况
U:UP 运行状态 G:表示这是一个网关路由器,网关不一定是默认网关,我们任何一个路由条目只要带有效下一跳地址的都可以认为是一个网关。只有目标网络是0.0.0.0的网关才叫默认网关。
H:表示这个网关是一个主机!:表示当前这个路由已经禁止
Metric:表示度量值,表示到达这个网络我们中间要经过的开销
Iface:表示经过本地的哪一个接口

3. 添加删除网关信息
网卡,就是数据包不经过任何的设定由路由表最后经过的地址关口
网关,网络的关口,就好比家里的门一样,外出就得通过这个门才能出去,数据也是一样,只能通过这个网关出外网。

  • 删除 default 默认
    [root@localhost xieyan]# route del default
  • 添加一个网关地址
    [root@localhost xieyan]# route add default gw 192.168.226.2

IP命令

IP命令,是 iproute 软件包中强大的网络管理工具

[root@localhost xieyan]# ip

Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
where  OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
netns | l2tp | fou | macsec | tcp_metrics | token | netconf | ila |
vrf }
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec |
-f[amily] { inet | inet6 | ipx | dnet | mpls | bridge | link } |
-4 | -6 | -I | -D | -B | -0 |
-l[oops] { maximum-addr-flush-attempts } | -br[ief] |
-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
-rc[vbuf] [size] | -n[etns] name | -a[ll] | -c[olor]}

ip 命令可以操作的对象

OBJECT 对象
   link 网络设备
   address定义ipv4 ipv6 的地址
   neighbour查看ARP缓存地址(ARP用于解析MAC地址)
   route路由表对象
   maddress多播地址
   tunel ip上通道
COMMAND #ip针对对象要操作的动作,一般为增删改查

IP 命令案例学习

  1. 查看,显示网络设备信息
    [root@localhost xieyan]# ip addr show
  2. 查看指定网络设备信息
    [root@localhost xieyan]# ip link show dev ens33
  3. 显示网络设备信息及详细的数据包收发大小
    [root@localhost xieyan]# ip -s link show dev ens33
  4. 关闭、激活网络设备
    [root@localhost xieyan]# ip link set dev ens33 down/up #关闭/开启网卡
  5. 修改网卡MAC地址信息
    [root@localhost xieyan]# ip link set ens33 address 0:0c:29:13:10:11
  6. 显示网卡信息
    [root@localhost xieyan]# ip a #简写,显示网络设备信息
  7. IP命令添加,删除ip信息
  • 添加IP信息
    ip addr add 192.168.226.100/24 dev ens33
  • 删除IP信息
    ip addr del 192.168.226.100/24 dev ens33
  1. ip 命令给网卡添加别名
    ip addr add 192.168.226.100/24 dev ens33 label ens33:1
  2. 通过ip命令检查路由信息
    route/ip route
  3. ip检查arp缓存(显示网络邻居的信息),检查MAC地址信息
    ip neighbour
    arp -n / arp

netstat 命令学习

显示网络连接情况,路由表信息,端口状态,网络连接情况等等信息 。一个进程服务,运行之后,会暴露一个端口号,以及产生相应的进程信息。

  1. 查看所有的网络连接情况

netstat -an # -a (all)显示所有的套接字(socket)信息 -n 显示数字地址信息而非主机名

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN

常见字段解释:

  1. Proto套接字使用的协议是什么
  2. Recv-Q连接这个套接字的用户,还未拷贝的字节数
  3. Send-Q运程主机还未确认的字节数
  4. Local Address套接字(一个连接情况)本地的地址和端口号
  5. Foreign Address 套接字的运程主机地址和端口号
  6. State 套接字的运行情况, LISTEN 监听中

记住一些重要的套接字连接情况的参数

ESTABLISHED:套接字有一个有效连接。
SYN_SENT:套接字尝试建立一个连接。
SYN_RECV:从网络上收到一个连接请求。
FIN_WAIT1:套接字已关闭,连接正在断开。
FIN_WAIT2:连接已关闭,套接字等待远程方中止。
TIME_WAIT:在关闭之后,套接字等待处理仍然在网络中的分组
CLOSED:套接字未用。
CLOSE_WAIT:远程方已关闭,等待套接字关闭。
LAST_ACK:远程方中止,套接字已关闭。等待确认。
LISTEN:套接字监听进来的连接。如果不设置 --listening (-l) 或者 --all (-a) 选项,将不显示出来这些连接。
CLOSING:套接字都已关闭,而还未把所有数据发出。
UNKNOWN:套接字状态未知。

netstat 使用实际案例

常用的参数组合

netstat -tunlp # 查看机器上正在运行的所有端口情况以及他的进程情况
-tan # 查看机器上所有的tcp连接情况
-uan # 查看机器上所有的udp连接情况
-tnl # 查看机器上正在运行的所有tcp连接情况
-unl # 查看机器上正在运行的所有udp连接情况

参数解释如下:

-t 显示出TCP的连接情况
-u 显示出UDP的连接情况
-n 不进行 dns 解析
-l 只显示正在监听中的套接字情况
-p 显示出套接字所属的进程和进程名情况
  • 127.0.0.1 #本地回环地址,用于机器间内部应用通信,外人无法访问此地址,每一个机器都有自己的127.0.0.1```
  • 0.0.0.0 #绑定机器所有的网卡地址

查看端口运行的情况

netstat -tunlp | grep 端口号

netstat -tunlp | grep 3306 #检查服务器是否运行了3306端口(查看是否运行了mysql数据库)

显示系统的路由表情况

[root@localhost xieyan]# netstat -rn 等同于 route -n

显示网络的接口情况

netstat -i # -i 显示出所有网络接口的列表情况
netstat -Iens33 # 注意-I参数后没有空格
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens33            1500    11196      0      0 0           279      0      0      0 BMRU
lo              65536      247      0      0 0           247      0      0      0 LRU
virbr0           1500        0      0      0 0             0      0      0      0 BMU

字段解释:

Iface	网络设备的名字
MTU		最大的传输单元,单位是字节
RX-OK/TX-OK	正确接收了多少数据包/正确发送了多少数据包
RX-ERR/TX-ERR	接收、发送数据包的时候,丢弃了多少数据包(最好为0,否则表示网络情况不健康,有丢包的现象)
RX-OVRTX-OVR	接收、发送数据包的时候,由于错误遗失了多少数据包

FLg标记

L:回环地址的含义
R:网络接口正在运行中的状态
U:接口正在处于活动的状态
B:设置了广播地址
M:接收所有的数据包
O:表示在该接口上禁止arp
P:端对端的连接

查看服务器监听

netstat -tunlp | grep 3306 # 监听数据库是否运行
netstat -tunlp | grep 80 # 监听web服务是否运行
netstat -tunlp | grep 443 # 监听https服务是否运行
  • linux还有一个在centos7之后出现的 网络 查看工具,叫做ss
  • 这个工具如果没有需要安装的,yun install iproute -y
  • 显示所有的socket套接字连接情况:ss -an
  • 显示出所有正在监听中的套接字情况:ss -tunlp
    ss -tunlp | grep 端口号

[root@localhost system]# systemctl start httpd Failed to start httpd.service: Unit not found.

解决方法:

[root@localhost system]# yum -y install httpd

[root@localhost system]# ss -tunlp |grep 80
tcp    LISTEN     0      128    [::]:80                 [::]:*                   users:(("httpd",pid=9698,fd=4),("httpd",pid=9697,fd=4),("httpd",pid=9695,fd=4),("httpd",pid=9692,fd=4),("httpd",pid=9688,fd=4),("httpd",pid=9684,fd=4))

tcp6       0      0 :::80                   :::*                    LISTEN      9684/httpd

ping 命令学习

测试当前主机到目标机器的网络连通性

  1. 可以通过对域名进行ping,查看是否能够通信,也可以来做检测本机是否能够dns解析命令

    [xieyan@localhost ~]$ ping bilibili.com
    PING bilibili.com (47.103.24.173) 56(84) bytes of data.
    64 bytes from 47.103.24.173 (47.103.24.173): icmp_seq=1 ttl=128 time=19.4 ms
    64 bytes from 47.103.24.173 (47.103.24.173): icmp_seq=2 ttl=128 time=25.8 ms
    
  2. ping ip地址,省去了dns解析的过程

    [xieyan@localhost ~]$ ping 47.103.24.173
    PING 47.103.24.173 (47.103.24.173) 56(84) bytes of data.
    64 bytes from 47.103.24.173: icmp_seq=1 ttl=128 time=15.4 ms
    64 bytes from 47.103.24.173: icmp_seq=2 ttl=128 time=19.9 ms
    
  • ping 命令跟着域名或者ip地址,会一直刷新ping命令的结果,windows平台应该刷新4次结束
  • 第二条,ping命令发送给了远程主机56字节的数据
  • 从目标主机收到了64字节的数据,icmp_seq 显示收到的字节数据序列号及协议,ttl 数据包的存活时间,秒为单位。time 是二台机器收发数据的延迟时间。
  1. ping 命令用于检测主机的网络状态
    检测主机是否能够进行dns解析

ping www.pythonav.cn
ping: www.pythonav.cn # 未知的名称或服务
当出现如上情况,可能是机器无法上网了,也可能是无法进行dns域名解析(主机名----IP地址)
验证步骤:

  1. 检查linux的dns客户端配置文件 /etc/resolv.conf

  2. 确保文件中,有dns服务器的地址

    nameserver 114.114.114.114
    nameserver 223.5.5.5

  3. 此时再次验证能进行域名解析,能否发送ping命令

  4. 当ping远程主机的时候,出现如下报错,就是你自己的机器无法上外网了。

  5. ping 123.206.16.61 # ping一个正确存在的公网ip地址,还是出现"Destination Host Unreadable"报错,说明你的网络配置有问题了,得正确配置ip信息,以及路由器网关地址。


telnet 命令

telnet命令在以前是用于登录远程主机的命令,以及检测远程主机的端口是否打卡,但是telnet 命令采用的是明文传输,安全性太低,在远程登录的时候,容易丢失或被黑客截取服务器的密码,因此后来被弃用。
后采用了更安全的ssh远程登录命令。
  • 用来检测远程主机是否打卡了某端口,telnet命令得安装后才能使用 yum install telnet -y
  • 检测远程主机的22端口是否打卡
  • 正确打开了22端口情况
Trying 192.168.226.128...
Connected to 192.168.226.128.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4
Protocol mismatch.
Connection closed by foreign host.

远程机器22端口未打卡或拒绝连接的情况

[root@localhost xieyan]# telnet 123.206.16.61 22
Trying 123.206.16.61...
telnet: connect to address 123.206.16.61: Connection refused

检测远程服务器,是否开放了数据库的3306端口

telnet 123.206.16.61 336


ssh安全的运程连接命令

  • ssh 命令是 openssh 软件包中的一个套件命令,使用ssh加密的协议进行远程登录,并且实现对服务器的远程管理
  • 在windows平台,常用xshell,CRT工具进行远程登录
  • linux、macos,可以直接在命令行终端,输入ssh指令即可
  • ssh 连接的是服务器上运行的sshd这个应用程序,且后台监听的是22端口

语法:ssh 用户名@ip 地址 -p port

  • 默认ssh端口改成了 22489

sshxieyan@123.226.16.61-p 22489 #指定端口远程连接


wget 命令

  1. wget命令用于下载指定的 url 资源文件,比如一个图片的 url 地址
  2. wget 它非常稳定,可以在网速很差情况下,以及网速很强的情况下都很强能够适应网络环境,进行下载资源。
  3. wget 还支持断点续传,让你下载一个大文件,突然失败,下次还可以继续的对该文件下载,直到结束。
  4. wget 在下载普通文件的时候,即使网络问题,它也会不断的尝试下载。
    特点:
    • 支持断点续传
    • 支持ftp以及http协议下载
    • wget支持添加代理

需求1,下载一张王宝强的照片
yum install wget -y # 下载wget

[root@localhost tmp]# wget https://wx4.sinaimg.cn/large/001mSaLwly1h6qxpivps7j60u01hc1kx02.jpg

需求2,下载文件,且指定保存文件名字,通过wget的功能参数 -O 即可,下载url资源后,指定Linux目录保存,且修改文件名
wget -o /tmp/a.jpg(文件地址及名称) https://(图片链接)
[root@localhost tmp]# wget -O /tmp/迪丽热巴.jpg https://wx2.sinaimg.cn/mw2000/001RBNXyly1h5qwa5gopyj678z54b1l102.jpg

需求3,支限制wget的下载速度 通过--limit-rate=,来限制下载速度
wget --limit-rate=1k https://wx1.sinaimg.cn/mw2000/006QWqyKly1h7o8hjp8i1j30u00ho42w.jpg

需求4,支持断点续传的形式-c 小写的-c参数,是支持断点续传的
当下载任务断开之后,可以再次敲打该命令,即可实现断点续传的功能
如果已经下载完毕,使用-c参数就不会进行任何操作
wget -c --limit-rate=2k https://
+表示之前下载的,=表示这次下载的

需求5,让wget命令在后台运行,使用-b参数即可

  • 通过-b参数,让wget命令在后台运行,日志默认输出到wget-log中
    wget -cb -O /tmp/jit.jpg --limit-rate=1k https://wx1.sinaimg.cn/mw2000/006QWqyKly1h7o8hjp8i1j30u00ho42w.jpg
  • 会显示进程号和生成默认wget-log文件
  • 继续在后台运行,pid 为 3327。将把输出写入至 “wget-log.1”。
  • ps -ef|grep PID 查看进程
  • tail -f wget-log 查看日志

需求6,下载不同端的页面

  • 当你需要下载不同的网页,如PC端网页和移动端网页的时候,利用wget命令可以指定客户端的身份(伪装客户端身份)。一般网站,都能够识别客户来源,到底是手机,还是电脑,以返回不同的,更友好的页面。

  • wget不加参数,默认下载PC端页面wget -O /tmp/bilibili.html www.bilibili.com

  • 可以通过--user-agent参数,设置客户端身份,伪装成手机端的信息。

  • F12 进入Network,找到Request Headers当中的user-agent

user-agent: 
Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1 Edg/104.0.5112.102

加入user-agent
wget --user-agent="user-agent: " www.bilibili.com

需求7:利用wget可以检测网站是否存活
利用wget的

-q 安静模式(无信息输出)
-T 设置访问网站的超时时间
-t 表示重试访问网站的次数
--spider 不下载任何文件

wget -q -T 3 -t 1 --spider www.xxx.com

[xieyan@localhost tmp]$ wget -q -T 3 -t 1 --spider www.bilibili.com

  • 输入 echo $?,查看本次命令的结果,为0,表示 www.bilibili.com 是存活的
  • 当你检测一个不存在的网站,特殊符号 $? 就是非0的状态
  • 补充 bash 的特殊变量 $?
  • 当上一次命令执行失败,$?就是非0的错误状态码,上一次命令正确执行,$?就是 0。

网络编程

交换机(mac地址表 开始广播到单播,得到 mac 地址表) 数据链路层 mac地址
路由器(1. 对不同网络隔离,防止广播风暴 2. 不同网络的数据转发) 网络层 ip地址
传输层

IPv4地址构成规则32位,4字节。只要上网都需要IP地址,0.0.0.0 — 255.255.255.255 2 ** 32 = 43亿 ip v4 地址
中国一共 3.38 亿 ipv4地址 IP地址不够

解决方案:

  1. ipv6 128 bit(128位)= 16 字节
  2. 通过NAT端口映射实现了 IP 共享,IP+端口

IP地址 分为 网络位和主机位 192.168.226.128

  • 网络位是用来标识网段的 ===》192.168.226.0 一个网段
  • 主机位是用来具体主机的 128 是主机位 最大位256个 但0 和 255 不可用 ,一个为网段,一个为广播地址。(1-254 主机)

IP地址分类:ABCDE类

  1. 在局域网,只能配置私有地址,要上网,必须有公网地址,除了私有地址之外的,都叫公有地址。多人共享一个IP地址。
  2. 有一个特殊B类地址段是,169.254.x.x dhcp没有给你获取IP地址,给了你一个ip地址,不是合法地址,不能上网。
  3. 属于同一个网段的,就叫本地网络。不在同一个网段,就叫远程网络。

子网掩码的作用&划分
标识一个ip的所处的网段
区分二个网段是否 在一个网段,子网掩码和ip地址与运算,得出就是网段

udp
不可靠传输协议
只管发,不管有没有收到,没有确认机制。
直播
面向报文的协议,不需要提前建立连接,直接给对对方发数据
tcp
可靠传输协议
3次握手 ==》建立连接
四次挥手 ==》断开连接

用户A -> 服务器B: FIN=1 seq=u
服务器B -> 用户A: ACK=1 seq=v ack=u+1
服务器B -> 用户A: FIN=1 ACK=1 seq=w ack=u+1
用户A -> 服务器B: ACK=1 seq=u+1 ack=w+1
posted @ 2022-11-08 23:18  XIE+YAN  阅读(238)  评论(1)    收藏  举报