zoukankan      html  css  js  c++  java
  • 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]
    
    
  • 相关阅读:
    Intellij idea安装
    c# .net 我的Application_Error 全局异常抓取处理
    c# .net Global.asax文件的作用
    ASP.NET机制详细的管道事件流程(转)
    正则表达式_学习笔记
    c# .net获取随机字符串!
    c# 动态调用WCF方法笔记!
    Web Service和WCF的区别。其实二者不属于一个范畴!!!
    c# .net获取文件夹下的所有文件(多层递归),并获取区间数据(Jsion,xml等数据)写出到处理文件,学习分享~
    c#.net单例模式的学习记录!
  • 原文地址:https://www.cnblogs.com/bestvae/p/14398309.html
Copyright © 2011-2022 走看看