Linux基础_网络协议和管理

讲师_@王晓春

本章内容

  • 网络基础
    • OSI 模型
    • 冲突域和广播域
    • TCP/IP协议栈
      • TCP的三次握手和四次挥手
      • UDP
      • Internet层协议
  • 基本网络配置
    • 命令:ethtool
    • 命令:ifconfig
    • 命令:route
    • 命令:netstat
    • 命令:ip
    • 命令:ss
    • 网卡配置
    • Bonding 工作模式
    • 命令:nmcli
    • nmcli实现bond0
    • 网络组Network Teaming
    • nmcli创建网络组
    • 实现网桥
    • 命令brctl(工具yum install bridge-utils)
    • 测试网络工具

本章命令:ip ifconfig route nmcli ifup ifdown ss

网络基础

以下为个人简单的笔记,如需详细了解网络相关的知识,推荐计算机专业教材:《计算机网络(第7版)-谢希仁》

OSI 模型

Linux基础_网络协议和管理_第1张图片

冲突域和广播域

Linux基础_网络协议和管理_第2张图片

TCP/IP协议栈

Linux基础_网络协议和管理_第3张图片

TCP的三次握手和四次挥手

Linux基础_网络协议和管理_第4张图片

有限状态机FSM 注释
CLOSED 没有任何连接状态
LISTEN 侦听状态
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已改善关闭连接请求,挂靠对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被支关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认
  • TCP协议中相关的文件:
    /proc/sys/net/ipv4/tcp_max_orphans指定内核能接管的孤儿连接数
    /proc/sys/net/ipv4/tcp_fin_timeout指定孤儿连接在内核中的生存时间
    /proc/sys/net/ipv4/ip_local_port_range动态端口使用范围
    /proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,建议调整大小为1024以上
    /proc/sys/net/core/somaxconn 完成连接队列大小,建议调整大小为1024以上
    /proc/sys/net/ipv4/tcp_retries1 指定在底层IP接管之前TCP最少执行的重传次数,默认值是3
    /proc/sys/net/ipv4/tcp_retries2 指定连接放弃前TCP最多可以执行的重传次数,默认值15(一般对应13~30min)
    /proc/sys/net/ipv4/tcp_congestion_control 当前所使用的拥塞控制算法

tcpdump 抓包工具

UDP

  • UDP包头
    Linux基础_网络协议和管理_第5张图片

Internet层协议

  1. IP协议
  2. ICMP协议
    /proc/sys/net/ipv4/icmp_echo_ignore_all 关闭ICMP回应
  3. ARP协议
  4. RARP协议

基本网络配置

  • 将Linux主机接入到网络,需要配置网络相关设置。一般包括如下内容:
  1. 主机名(hostname)
  2. IP地址和子网掩码(IP/netmask)
  3. 路由(默认网关gateway)
  4. 主DNS服务器(dns)
  5. 次DNS服务器

CentOS 6 网卡名称

  1. 以太网:eth[0-9]
  2. ppp:ppp[0-9]
  • 网络接口识别并命名相关的udev配置文件:
    /etc/udev/rules.d/70-persistent-net.rules

  • ARP表
    arp -n

命令:ethtool

  • 查看网卡驱动:
    dmesg |grep –i eth
    ethtool -i eth0

    • 卸载网卡驱动:
      modprobe -r e1000
      rmmod e1000
    • 装载网卡驱动:
      modprobe e1000
  • 网络配置方式

  1. 静态指定:static 相关命令:ifconfig, route, netstat,ip, ss, tc
  2. 动态分配:DHCP
  3. 配置文件:/etc/sysconfig/network-scripts/ifcfg-
  • mii-tool 查看/操作接口状态

命令:ifconfig

#查看指定网卡状态
ifconfig [interface]

#查看所有网卡状态
ifconfig -a

#启用/禁用网卡
ifconfig IFACE [up|down]
ifdown eth1 (禁用网络)
ifup eth1 (启用网络)

#设置网卡IP
ifconfig IFACE IP/netmask [up]

命令:route

路由管理命令
查看:route -n
添加:route add
route add [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]

#目标: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

#默认路由,网关:172.16.0.1
route add -net 0.0.0.0 netmask 0.0.0.0 gw 172.16.0.1
route add default gw 172.16.0.1

#删除:route del
route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]

#目标:192.168.1.3 网关:172.16.0.1
route del -host 192.168.1.3

#目标:192.168.0.0 网关:172.16.0.1
route del -net 192.168.0.0 netmask 255.255.255.0
  • 配置动态路由
    通过守护进程获取动态路由
    •安装quagga包
    •支持多种路由协议:RIP、OSPF和BGP
    •命令vtysh配置

命令:netstat

  • 显示网络连接:
    netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e]] [--program|-p]
[OPTION] 注释
-t tcp协议相关
-u udp协议相关
-w raw socket相关
-l 处于监听状态
-a 所有状态
-n 以数字显示IP和端口
-e 扩展格式
-p 显示相关进程及PID
  • 常用组合:
    -tan, -uan, -tnl, -unl
  • 显示路由表:
    netstat {–route|-r} [–numeric|-n]
    -r: 显示内核路由表
    -n: 数字格式
  • 显示接口统计数据:
    netstat {–interfaces|-I|-i} [iface] [–all|-a] [–extend|-e] [–program|-p] [–numeric|-n]
    netstat -i
    netstat –I=IFACE
    ifconfig -s eth0

命令:ip

配置Linux网络属性:ip 命令(显示、操作路由,设备,路由策略和隧道)

ip [ OPTIONS ] OBJECT { COMMAND | help }

OBJECT ={ link | address | addrlabel | route | rule | neigh | 
		ntable | tunnel | tuntap | maddress | mroute | mrule |
		 monitor | xfrm | netns |  | tcp_metrics | token | macsec }

 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 link - 网卡配置
	set dev/IFACE
		up and down:激活或禁用指定接口(也可以ifup/ifdown)
		name NETNAME(修改网卡名)
	show [dev IFACE]:指定接口

ip addr - IP地址配置
	add/del IP/mask dev DEVICE   (添加/删除IP)
		[scope {global|link|host}] - 指明作用域(全局/仅链接/本机)
		[label LABEL] - 指明网卡别名
		[broadcast ADDRESS]:指明广播地址
	show - 查看网络
		[dev DEVICE]
		[label PATTERN]
		[primary and secondary]
	flush - 刷新网卡,使用格式同show
ip route - 路由配置
	add/del NET/MASK via GATEWAY_IP [dev IFACE] [src SOURCE_IP]
		default - 默认路由
	flush [dev IFACE] [via GATEWAY_IP] - 清空路由表
	show/list - 显示路由

命令:ss

ss [OPTION]... [FILTER]
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取socket信息

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

FILTER : [ state TCP-STATE ] [ EXPRESSION ]

  • 常用选项组合:
    -tan, -tanl, -tanlp, -uan
  • 常见用法
# 显示本地打开的所有端口
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 )' 

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

网卡配置

  1. 路由配置文件:/etc/sysconfig/network-scripts/route-ens33
•注意:需service network restart生效
•两种风格:
(1) TARGET via GW
如:10.0.0.0/8 via 172.16.0.1`
(2) 每三行定义一条路由
ADDRESS#=TARGET
NETMASK#=mask
GATEWAY#=GW
  1. 主机名配置文件:/etc/sysconfig/network

  2. 配置文件帮助文档:/usr/share/doc/initcripts-*/sysconfig.txt

  3. 网卡配置文件:/etc/sysconfig/network-scripts/ifcfg-ens33

网卡配置文件格式:

TYPE:接口类型;常见有的Ethernet, Bridge
DEVICE:此配置文件应用到的设备
HWADDR:对应的设备的MAC地址
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp
NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受NM控制;建议CentOS6为“no”
网络配置文件
ONBOOT:在系统引导时是否激活此设备
UUID:设备的惟一标识
IPADDR:指明IP地址
PREFIX:子网掩码
NETMASK:子网掩码
GATEWAY: 默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,YES将允许dhcp server分配的dns服务器信息直接覆盖至/etc/resolv.conf文件,NO不允许修改resolv.conf
配置范例
动态配置 静态配置
DEVICE=eth#
HWADDR=00:11:22:33:44:55
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
DEVICE=eth#
HWADDR=00:11:22:33:44:55
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
ONBOOT=yes
TYPE=Ethernet
  • DNS
    本地地址解析:/etc/hosts
    DNS域名解析:/etc/resolv.conf
    域名服务切换配置文件:/etc/nsswitch.conf

  • 相关命令:
    dig -t A NAME
    dig -x IP
    host -t A NAME
    host -t PTR IP

  • 网卡别名
    ifconfig eth0:0 192.168.0.1/24 up
    ifconfig eth0:0 down
    ip addr add 192.168.0.1/24 dev eth0 label eth0:0
    ip addr del 192.168.0.1/24 dev eth0 label eth0:0
    ip addr flush dev eth0 label eth0:0

为每个网卡别名生成配置文件(ifcfg-eth#:#)

#只能使用静态ip
DEVICE=eth0:0
IPADDR=192.168.0.1
NETMASK=255.255.255.0
ONPARENT=yes
  • 网卡名称
    基于BIOS支持启用biosdevname软件
    内置网卡:em1,em2
    pci卡:pYpX Y:slot ,X:port
    (2) 名称组成格式
    en: Ethernet 有线局域网
    wl: wlan 无线局域网
    ww: wwan无线广域网

  • 名称类型:
    o: 集成设备的设备索引号
    s: 扩展槽的索引号
    x: 基于MAC地址的命名
    ps: enp2s1

  • 传统命名方式(修改成eth0)

    1. 修改文件/etc/default/grub
      GRUB_CMDLINE_LINUX=“rhgb quiet net.ifnames=0”
    2. 执行命令:grub2-mkconfig -o /etc/grub2.cfg
  • 主机名:
    设置主机名:hostnamectl set-hostname centos
    显示主机名:hostname

  • 其它工具:
    图形工具:nm-connection-editor
    字符工具:nmtui
    命令行工具:nmcli

Bonding 工作模式

  1. Mode 0 (balance-rr)
    轮转(Round-robin)策略:本模式提供负载均衡和容错的能力
  2. Mode 1 (active-backup)
    活动-备份(主备)策略:只有一个slave被激活,当且仅当活动的slave接口失败时才会激活其他slave.
  3. Mode 2 (balance-xor)
    平衡策略:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力
  4. Mode 3 (broadcast)
    广播策略:在所有的slave接口上传送所有的报文,提供容错能力
  5. Mode 4 (802.3ad) IEEE 802.3ad Dynamic link aggregation
    IEEE 802.3ad 动态链接聚合:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
    条件:
    条件1:ethtool支持获取每个slave的速率和双工设定
    条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
    条件3:switch(交换机)配置了堆叠模式才能支持
  6. Mode 5 (balance-tlb) Adaptive transmit load balancing
    适配器传输负载均衡:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
    该模式的必要条件:ethtool支持获取每个slave的速率
  7. mode=6 (balance-alb):平衡负载模式,有自动备援,不必”Switch”支援及设定。
  • 帮助文档:https://www.kernel.org/doc/Documentation/networking/bonding.txt

  • 显示状态-bond0:/proc/net/bonding/bond0

  • 配置文件-bond0:/etc/sysconfig/network-scripts/ifcfg-bond0

(/etc/sysconfig/network-scripts/ifcfg-bond0)
DEVICE=bond0
BOOTPROTO=none
BONDING_OPTS="miimon=100 mode=0 fail_over_mac=1"
#miimon 系统每100ms 监测一次链路连接状态,如果有一条线路不通就转入另一条线路
(/etc/sysconfig/network-scripts/ifcfg-eth0)
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
  • 删除bond0
    ifconfig bond0 down
    rmmod bonding

命令:nmcli

nmcli [OPTIONS] OBJECT {COMMAND|help}
命令+选项+对象+命令

OBJECT COMMNAD
connect {show | up | down | modify | add | edit | clone | delete | monitor | reload | load | import | export} [ARGUMENTS...]
device {status | show | set | connect | reapply | modify | disconnect | delete | monitor | wifi | lldp} [ARGUMENTS...]
nmcli OBJECT COMMAND 注释
connect
"con"
show 显示所有连接
--active 显示所有活动的连接
NAME 显示网卡的配置
add con-name
ifname
type
autoconnect
ipv4.addresses
ipv4.gateway
连接名
网卡名
类型{ethernet/bond/team}
是否自动连接(no/yes)
ip地址{ip/mask [gw]}
网关
mod CON_NAME connection-autoconnect {no/yes}
connection.id {CON_NAME}
[±]ipv4.dns {IP}
[±]ipv4.addresses {IP/MASK [GW]}
ipv4.methon {manual/auto}
ipv4.dns {IP}
ipv4.dns-search {example.com}
ipv4.ignore-auto-dns {no/yes}
connection.interface-name {DEV}
802-3-ethernet.mac-address {MAC}
down NAME 关闭网卡
up NAME 开启网卡
reload 重新加载配置
delete(del) NAME 删除连接
device
"dev"
status 显示设备状态
show ens33 显示网络接口属性
disconnect
"dis"
DEV_NAME 临时关闭网络
network
"net"
off / on 关闭/开启所有网络接口
#创建新连接default,IP自动通过dhcp获取
nmcli con add ==con-name== default ==type== Ethernet ==ifname== eth0

#创建新连接static ,指定静态IP,不自动连接
nmcli con add ==con-name== static ==ifname== eth0 ==autoconnect== no =type== Ethernet ==ipv4.addresses== 172.25.X.10/24 ==ipv4.gateway== 172.25.X.254

nmcli实现bond0

#创建bond0
nmcli connection add type bond con-name mybond0 ifname bond0 mode active-backup
#添加从属网卡
nmcli connection add type bond-slave ifname ens33 master bond0
nmcli connection add type bond-slave ifname ens37 master bond0
#启动从属接口
nmcli connection up bond-slave-eth0
nmcli connection up bond-slave-eth1
#启动bond0
nmcli connection up mybond0

网络组Network Teaming

METHOD:

  1. runner
  2. broadcast
  3. roundrobin
  4. activebackup
  5. loadbalance
  6. LACP

nmcli创建网络组

#创建网络组
nmcli con add `type` team `con-name` Myteam `ifname` ens33 `config` '{"runner": {"name": "METHOD"}}'

#创建port口
nmcli con add `type` team-slave`con-name` Myteam `ifname` INAME `master` TEAM

创建网络组示例

#创建team
nmcli con add type team con-name Myteam0 ifname team0 config '{"runner":{"name":"activebackup"}}' ipv4.addresses 192.168.0.100/24 ipv4.method manual

#创建port
nmcli con add type team-slave con-name myteam0-eth0 ifname ens33 master team0
nmcli con add type team-slave con-name myteam0-eth1 ifname ens37 master team0

#启用
nmcli con up team0
nmcli con up team0-eth0
nmcli con up team0-eth1

#查看状态
teamdctl team0 state

#测试
ping -I team0 192.168.0.1

#关闭
nmcli dev dis ens33
nmcli dev dis ens37

  1. 配置文件:/etc/sysconfig/network-scripts/ifcfg-team0
DEVICE=team0
DEVICETYPE=Team
TEAM_CONFIG="{\"runner\":{\"name\":\"activebackup\"}}"
BOOTPROTO=none
IPADDR0=192.168.0.100
PREFIX0=24
NAME=Myteam0
ONBOOT=yes
DEVICE=team0
  1. 配置文件:/etc/sysconfig/network-scripts/ifcfg-team0-eth0
DEVICE=ens33
DEVICETYPE=TeamPort
TEAM_MASTER=team0
NAME=team0-eth0
ONBOOT=yes

##删除网络组

nmcli con down team0
nmcli con del team0-eth0
nmcli con del team0-eth1

teamdctl team0 state
nmcli con show

实现网桥

#创建网桥
nmcli con add type bridge con-name mybr0 ifname br0 ipv4.addresses 192.168.0.100/24 ipv4.method manual

#创建从属接口
nmcli con add type bridge-slave con-name mybr0-eth0 ifname ens33 master br0

#查看网桥
brctl show

命令brctl(工具yum install bridge-utils)

#添加网桥
brctl addbr br0
#删除网桥
brctl delbr br0
#查看网桥
brctl show 
#查看MAC表
brctl showmacs br0

#添加网卡
brctl addif eth0
#删除网卡
brctl delif eth0

测试网络工具

  • 显示主机名
    hostname
  • n测试网络连通性
    ping
    **显示正确的路由表
    ip route
  • 跟踪路由
    traceroute
    tracepath
    mtr
  • 确定名称服务器使用
    nslookup
    host
    dig

你可能感兴趣的:(Linux入门基础)