11.网络管理和配置

1.计算机网络体系结构和参考模型

1.1 计算机网络分层结构及基本概念

层次划分的必要性:

两个系统中计算机的通信是一个很复杂的过程,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机的网络体系结构以分层的方式进行建模。

分层的基本原则:

  • 每层都实现一种相对独立的功能,降低大系统的复杂度
  • 各层之间界面自然清晰,易于理解,互相交流尽可能少
  • 各层功能精确定义独立于具体实现的方法,可以采用最合适的技术来实现
  • 保持下层对上层的独立性,上层单向使用下层提供的服务
  • 整个分层结构应能促进标准化工作

协议:交换数据规则的集合,它是平行的。

接口:同一结点内相邻两层间交换信息的连接点,每层只能为紧邻的层次之间定义接口

服务:下层为紧邻的上层提供的功能调用,它是垂直的。

1.2 OSI参考模型

国际标准化组织(OSI)提出的网络体系结构模型,称为开放系统互连参考模型,通常简称为OSI参考模型。OSI的层次结构和通信过程如图所示。
1

  • 第一层 物理层

    物理传输层的单位是比特,任务是透明的传输比特流,它负责管理电脑通信设备和网 络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机接口卡等

  • 第二层 数据链路层

    数据链路层的传输单位是帧,任务是将网络层传来的IP数据报组成帧。功能可以概括为成帧、差错控制、流量控制和传输管理等,实现点到点的通信。

  • 第三层 网络层

    网络层的传输单位是数据报,主要任务是吧网络层的协议数据单元(分组)从源端传到目的端,为分组交换网上的不同主机提供通信服务。关键是对分组进行路由选择,并实现流量控制、拥塞控制、差错控制和网际互连等功能

  • 第四层 传输层

    传输层的传输单位是报文段(TCP)或用户数据报(UDP),传输层负责主机中两个进程之间的通信。

  • 第五层 会话层

    管理主机间的会话进程,包括建立、管理及终止进程间的会话

  • 第六层 表示层

    数据格式交换、数据加密解密和数据压缩恢复。

  • 第七层 应用层

    应用层(Application Layer)提供为应用软件而设的接口,以设置与另一应用软件之间的通信。例如: HTTP、HTTPS、FTP、TELNET、SSH、SMTP、POP3、MySQL等

在高层次中如:会话层、表示层和应用层的协议数据单元 (PDU:Protocol Data Unit)都是消息 message

范例:

#查看网卡是否启用
[root@centos8 data]# mii-tool -v eth0
SIOCGMIIPHY on 'eth0' failed: Operation not supported
[root@centos8 data]# ethtool eth0
Settings for eth0:
	Supported ports: [ ]
	Supported link modes:   Not reported
	Supported pause frame use: No
	Supports auto-negotiation: No
	Supported FEC modes: Not reported
	Advertised link modes:  Not reported
	Advertised pause frame use: No
	Advertised auto-negotiation: No
	Advertised FEC modes: Not reported
	Speed: Unknown!
	Duplex: Unknown! (255)
	Port: Other
	PHYAD: 0
	Transceiver: internal
	Auto-negotiation: off
	Link detected: yes
[root@centos8 data]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 00:16:3e:12:a3:c2 brd ff:ff:ff:ff:ff:ff

1.3 TCP/IP模型

OSI参考模型与TCP/IP参考模型如图:
2

  • 面向连接

    分为三个阶段:1.建立连接;2.传输数据;3.释放连接

  • 面向无连接

    直接进行数据传输

  • OSI先有模型;TCP/IP先有协议,后有模型

5层参考模型:综合了OSI和TCP/IP的优点3

2.传输层协议

2.1 传输层介绍

2.1.1传输层功能
  • 提供进程与进程之间的逻辑通信

  • 复用和分用

    复用:应用层所有的应用进程都可以通过传输层再传输到网络层

    分用:传输层从网络层接收到数据后交付指明的应用进程

  • 对收到的报文进行差错检测

  • 传输层的两种协议

2.1.2 传输层的寻址与端口

端口是传输层的接口,用于标识主机中的应用进程

端口长度为16bit,能表示65536个不同的端口号

  • 0-1023:系统端口或特权端口(仅管理员可用) ,众所周知,永久的分配给固定的系统应用使用, 22/tcp(ssh), 80/tcp(http), 443/tcp(https)
  • 1024-49151:用户端口或注册端口,但要求并不严格,分配给程序注册为某应用使用, 1433/tcp(SqlServer), 1521/tcp(oracle),3306/tcp(mysql),11211/tcp/udp (memcached)
  • 49152-65535:动态或私有端口,客户端随机使用端口,范围定 义:/proc/sys/net/ipv4/ip_local_port_range

套接字Socket=主机IP地址+端口号

范例:

#调整客户端的动态端口范围
[root@centos8 data]# cat /proc/sys/net/ipv4/ip_local_port_range 
32768	60999
[root@centos8 data]# echo 20000 62000 > /proc/sys/net/ipv4/ip_local_port_range
[root@centos8 data]# cat /proc/sys/net/ipv4/ip_local_port_range 
20000 62000

#找到端口冲突的应用程序
[root@centos8 data]# nc -l 22
Ncat: bind to 0.0.0.0:22: Address already in use. QUITTING.
[root@centos8 data]# ss -ntlp
State   Recv-Q  Send-Q   Local Address:Port   Peer Address:Port                                                                
LISTEN  0       128            0.0.0.0:5355        0.0.0.0:*      users:(("systemd-resolve",pid=910,fd=13))                    
LISTEN  0       128            0.0.0.0:80          0.0.0.0:*      users:(("nginx",pid=133609,fd=8),("nginx",pid=133608,fd=8))  
LISTEN  0       128            0.0.0.0:22          0.0.0.0:*      users:(("sshd",pid=976,fd=5))                                
LISTEN  0       100          127.0.0.1:25          0.0.0.0:*      users:(("master",pid=113712,fd=16))                          
LISTEN  0       128               [::]:5355           [::]:*      users:(("systemd-resolve",pid=910,fd=15))                    
LISTEN  0       128               [::]:80             [::]:*      users:(("nginx",pid=133609,fd=9),("nginx",pid=133608,fd=9))  
LISTEN  0       100              [::1]:25             [::]:*      users:(("master",pid=113712,fd=17))
[root@centos8 data]# lsof -i :22
COMMAND    PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd       976 root    5u  IPv4   24095      0t0  TCP *:ssh (LISTEN)
sshd    261372 root    5u  IPv4 3935567      0t0  TCP centos8.2:ssh->49.118.65.208:7218 (ESTABLISHED)
sshd    261386 root    5u  IPv4 3935567      0t0  TCP centos8.2:ssh->49.118.65.208:7218 (ESTABLISHED)

#判断端口是否正在打开
[root@centos8 data]# < /dev/tcp/127.0.0.1/80
[root@centos8 data]# echo $?
0
[root@centos8 data]# < /dev/tcp/127.0.0.1/8090
-bash: connect: Connection refused
-bash: /dev/tcp/127.0.0.1/8090: Connection refused
[root@centos8 data]# echo $?
1

2.2 TCP协议

2.2.1 TCP协议特性
  • TCP是面向连接的传输层协议

  • 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点

  • TCP提供可靠的服务

  • TCP提供全双工通信。

    发送缓存:准备发送的数据和已发送但尚未收到确认的数据

    接收缓存:按序到达但尚未被接受应用程序的读取的数据和不按序到达的数据

  • TCP面向字节流:TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流

1

2.2.2 TCP报文段首部格式

2

  • URG:URG=1时,标明此报文段中有紧急数据,是高优先级的数据,应尽快传送,不用在缓存里排队,配合紧急指针字段使用。
  • ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规 定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
  • PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如 果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来。
  • 复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立传输链接。
  • 同步位SYN:SYN=1时,表明是一个连接请求/连接接受报文。
  • 终止位FIN:FIN=1时,表明此报文段发送方数据已发完,要求释放连接。
  • 窗口:指的是发送本报文段的一方的接收窗口,即现在允许对方发送的数据量。
  • 检验和:检验首部+数据,检验时要加上12B伪首部,第四个字段为6。
  • 紧急指针:URG=1时才有意义,指出本报文段中紧急数据的字节数。
  • 选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认…
2.2.3 TCP的连接管理

TCP连接传输三个阶段:

​ 连接建立→数据传送→连接释放

TCP连接建立:1

seq为序号段数值为随机,ACK与ack应是同时存在,ack为确认号段。

TCP连接释放:

2

内核TCP参数优化

参看帮助: 使用man tcp 、也可以访问官网查看 /proc/sys/net目录中对应网络相关文档https://man7.org/linux/man-pages/man5/proc.5.html

2.3 UDP协议

2.3.1 UDP协议特性

无连接,减少开销和发送数据之前的时延

不保证可靠交付

面向报文,适合一次性传输少量数据的网络应用

无拥塞控制

首部开销小,8B,TCP20B

2.3.2 UDP首部格式

3

3.网络层

3.5 IP地址

3.5.1 IP地址组成

IP地址:全世界唯一的32位/4字节标识符,标识路由器主机的接口。

IP地址={<网络号>,<主机号>}

3.5.2 IP地址分类1

私有IP地址

  • A类:10.0.0.0~10.255.255.255
  • B类:172.16.0.0~172.31.255.255
  • C类:192.168.0.0~192.168.255.255
3.5.3 特殊地址
  • 0.0.0.0

    0.0.0.0不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络

  • 255.255.255.255

    限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机

  • 127.0.0.1~127.255.255.254

    本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为“127.0.0.1”的 数据包

  • 224.0.0.0到239.255.255.255

    组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF 路由器,地址 多用于一些特定的程序以及多媒体程序

  • 169.254.x.x

    如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地址,系统会为主 机分配这样地址

2

3.5.5 子网掩码

无分类域间路由选择CIDR:

1.消除了传统的A类,B类和C类地址以及划分子网的概念。

​ CIDR:无类域间路由,目前的网络已不再按A,B,C类划分网段,可以任意指定网段的范围

​ CIDR记法:IP地址后加上“/”,然后写上网络前缀(可以任意长度)的位数。 e.g. 128.14.32.0/20

2.融合子网地址与子网掩码,方便子网划分。

​ CIDR把网络前缀都相同的连续的IP地址组成一个 “CIDR地址块”。

范例:

一个主机:172.16.1.100/28

1、此主机所在的网段最多有多少主机?主机数=2^(32-28)-2=14

2、网络ID? IP和子网掩码相与,172.16.1.96

  • 10101100 00010000 00000001 01100100

  • 11111111 11111111 11111111 11110000

  • 10101100 00010000 00000000 01100000

    ​ 172 16 1 96

3、此网段的主机中最小的IP:172.16.1.97,最大的IP?172.16.1.110

  • 10101100 00010000 00000000 01100001
  • 10101100 00010000 00000000 01111110
3.5.6 子网划分和超网划分

划分子网:将一个大的网络(主机数多)划分成多个小的网络(主机数少),主机ID位数变少,网络ID 位数变多,网络ID位向主机ID位借位

合并超网:将多个小网络合并成一个大网,主机ID位向网络ID位借位

范例:

中国电信10.0.0.0/8 给32个各省公司划分对应的子网
1)每个省公司的子网的netmask?
2^5>=32 借5位网络ID
8+5=13
255.248.0.0

2)每个省公司的子网的主机数有多少?
2^(32-13)-2=524286

3)河南省得到第10个子网,网络ID?
10.00000 000.0.0/13
10.01001 000.0.0/13
10.72.0.0/13

4)河南省得到第10个子网的最小IP和最大的IP?
10.01001 000.0.1
10.01001 111.11111111.11111110
10.72.0.1---10.79.255.254

5)所有子网中最大,最小的子网的netid?
10.00000 000.0.0/13 10.0.0.0/13
10.11111 000.0.0/13 10.248.0.0/13

4.网络配置

4.1 网络配置命令

4.1.1 ip命令

来自于iproute包,可用于代替ifconfig

格式:

ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT := { link | addr | route }
ip link - network device configuration
set dev IFACE,可设置属性:up and down:激活或禁用指定接口,相当于 ifup/ifdown
show [dev IFACE] [up]::指定接口 ,up 仅显示处于激活状态的接口

ip 地址管理

ip addr { add | del } IFADDR dev STRING [label LABEL] [scope {global|link|host}]
[broadcast ADDRESS]

[label LABEL]:添加地址时指明网卡别名
[scope {global|link|host}]:指明作用域,global: 全局可用.link: 仅链接可用,host: 本机可
用
[broadcast ADDRESS]:指明广播地址

ip address show
ip addr flush 

范例:

#禁用网卡
ip link set eth1 down

#网卡改名
ip link set eth1 name wangnet  

#启用网卡
ip link set wangnet up

#网卡别名
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

#清除网络地址
ip addr flush dev eth0 
4.1.2 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 -pl

#显示所有tcp socket
ss -t -a

#显示所有的UDP Socekt
ss -u -a

#显示所有已建立的ssh连接
ss -o state established '( dport = :ssh or sport = :ssh )'

#显示所有已建立的HTTP连接
ss -o state established '( dport = :http or sport = :http )'
[root@centos8 ~]#ss -no state established '( dport = :21 or sport = :21 )'
Netid               Recv-Q               Send-Q                                
  Local Address:Port                                   Peer Address:Port      
         
tcp                 0                     0                                    
[::ffff:10.0.0.8]:21                                 [::ffff:10.0.0.7]:46638    
            timer:(keepalive,119min,0)

#列出当前socket详细信息
ss -s

4.2 网络配置文件

4.2.1 网络基本配置文件

IP、MASK、GW、DNS相关的配置文件:

/etc/sysconfig/network-scripts/ifcfg-IFACE
/usr/share/doc/initcripts-*/sysconfig.txt
4.2.2 配置当前主机的主机名
#centos6 之前版本
/etc/sysconfig/network
HOSTNAME=

#centos7 以后版
/etc/hostname
HOSTNAME
4.2.3 路由相关的配置文件
/etc/sysconfig/network-scripts/route-IFACE
两种风格:
(1) TARGET via GW
如:10.0.0.0/8 via 172.16.0.1

(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW

4.3 多网卡 bonding

将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。直接给两块网卡设置同一IP 地址是不可以的。通过 bonding,虚拟一块网卡对外提供连接,物理网卡的被修改为相同的MAC地址

4.3.1 nmcli实现bonding
#创建名位bond0的绑定
[root@centos8 ~]# nmcli con add type bond con-name bond0 ifname bond0 mode active-backup
Connection 'mybond0' (9301ff97-abbc-4432-aad1-246d7faea7fb) successfully added.

#添加从属接口
[root@centos8 ~]#nmcli con add type bond-slave ifname ens160 master bond0
[root@centos8 ~]#nmcli con add type bond-slave ifname ens192 master bond0

#先启动从属接口
[root@centos8 ~]# nmcli con up bond-slave-ens160
[root@centos8 ~]# nmcli con up bond-slave-ens192

#启动绑定网卡
[root@centos8 ~]# nmcli con up bond0

#生成的相关配置文件
[root@centos8 ~]# ls /etc/sysconfig/network-scripts/
ifcfg-bond0-1  ifcfg-bond-slave-ens160  ifcfg-bond-slave-ens192

#注意:本次是在Vmware虚拟机中进行,还需将ifcfg-bond0-1配置文件中fail_over_mac设定为1,若使用默认选项0,由于mac地址相同,会出现断开一个网卡无法,另一个网卡不能发挥作用情况
[root@centos8 ~]# cat !*ifcfg-bond0-1
cat /etc/sysconfig/network-scripts/ifcfg-bond0-1
BONDING_OPTS="mode=active-backup fail_over_mac=1"
...

5 Ubuntu网络配置

ubuntu在线帮助文档(部分版本支持中文)http://manpages.ubuntu.com/manpages/

ubuntu:focal版本中文帮助文档http://manpages.ubuntu.com/manpages/focal/zh_CN/

5.1主机名

hostnamectl

hostnamectl [OPTIONS...] {COMMAND}

设置主机名

root@ubuntu:~# cat /etc/hostname 
ubuntu
root@ubuntu:~# hostnamectl set-hostname ubuntu20
root@ubuntu:~# exit
logout
user1@ubuntu:~$ su - root
Password: 
root@ubuntu20:~# 

5.2 网卡名称

默认ubuntu的网卡名称和 CentOS 7 类似

设备节点的名字,可以通过"/etc/udev/rules.d/"里的 udev 文件来配置,规则设置可以参考/usr/share/doc/udev/writing_udev_rules/index.html

更多详细信息可以查看https://www.debian.org/doc/manuals/debian-reference/index.zh-cn.html中文在线文档

#修改配置文件为下面形式
root@ubuntu1804:~#vi /etc/default/grub
GRUB_CMDLINE_LINUX="net.ifnames=0"
#或者sed修改
root@ubuntu1804:~# sed -i.bak '/^GRUB_CMDLINE_LINUX=/s#"$#net.ifnames=0"#'
/etc/default/grub
#生效新的grub.cfg文件
root@ubuntu1804:~# grub-mkconfig -o /boot/grub/grub.cfg
#或者
root@ubuntu1804:~# update-grub
root@ubuntu1804:~# grep net.ifnames /boot/grub/grub.cfg
       linux /vmlinuz-4.15.0-96-generic root=UUID=51517b88-7e2b-4d4a-8c14-
fe1a48ba153c ro net.ifnames=0
       linux /vmlinuz-4.15.0-96-generic root=UUID=51517b88-7e2b-4d4a8c14-fe1a48ba153c
ro net.ifnames=0
       linux /vmlinuz-4.15.0-96-generic root=UUID=51517b88-7e2b-4d4a8c14-fe1a48ba153c
ro recovery nomodeset net.ifnames=0
       linux /vmlinuz-4.15.0-76-generic root=UUID=51517b88-7e2b-4d4a8c14-fe1a48ba153c
ro net.ifnames=0
       linux /vmlinuz-4.15.0-76-generic root=UUID=51517b88-7e2b-4d4a8c14-fe1a48ba153c
ro recovery nomodeset net.ifnames=0

#重启生效
root@ubuntu1804:~# reboot 

5.3 Ubuntu网卡配置

https://ubuntu.com/server/docs/network-configuration

5.3.1 配置自动获取IP
root@ubuntu20:~# man 5 netplan
root@ubuntu20:~# cat /etc/netplan/00-installer-config.yaml 
# This is the network config written by 'subiquity'
network:
  ethernets:
    ens33:
      dhcp4: true
  version: 2
  
#使用netplan命令使配置生效
root@ubuntu20:~# netplan apply
5.2.2 配置静态IP
root@ubuntu1804:~#vim /etc/netplan/01-netcfg.yaml
network:
 version: 2
 renderer: networkd
 ethernets:
   eth0:
     addresses: [192.168.8.10/24,10.0.0.10/8]  #或者用下面两行,两种格式不能混用
  - 192.168.8.10/24
      - 10.0.0.10/8
     gateway4: 192.168.8.1
     nameservers:
   search: [google.com]
   addresses: [180.76.76.76, 8.8.8.8, 1.1.1.1]

原文地址:https://www.cnblogs.com/bestvae/p/14398309.html