网络基础

概念

  • 为实现资源共享,彼此互联的多个计算机设备就形成了网络
  • 为实现通信,设备间必须共同遵守相同的通信协议
    • TCP/IP协议族
    • 标识彼此地址、收发和处理相同约定的数据包
    • 分组交换即包换网络,分层头部、数据
    • 速度由频率决定
  • 网络分层
    • 物理层、网络层、传输层、应用层
    • 将复杂的问题分解为多层的简单的问题,层间遵守相同的接口
1
2
3
# 查看网卡信息
sudo lshw -class network
ifconfig -a

ubuntu18.04网络配置

使用netplan配置

/etc/network/interfaces已经没有这个文件了

使用Rerender

  • NetworkManager 桌面系统
  • systemd-networked 服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sudo vim /etc/netplan/50-cloud-init.yaml

# 自动获取ip,dhcp
network:
ethernets:
enp0s3:
dhcp4: true
version: 2


# 配置如下,使用的是静态IP
network:
version: 2
renderer: networked
ethernets:
enp4s0:
dhcp4: false
dhcp6: false
addresses: [192.168.0.20/24] //IP址
gateway4: 192.168.0.1 // 网关
nameservers:
addresses: [114.114.114.114, 192.168.0.1] //DNS
search: []
optional: true

启用生效,重启网络

1
sudo netplan apply

ip命令

1
2
3
4
5
6
ip link set ens33 up
ip link set ens33 down

ip -s -s -d link ls ens33 # 详细信息
ip link set dev ens33 mtu 1500 # 修改MTU
ip link set dev ens33 address 00:11:22:33:44:55 # 修改mac

ip addr

1
2
3
4
ip addr show
ip addr add dev ens33 192.168.1.1/24
ip addr del dev ens33 192.168.1.1/24
ip addr flush dev ens33 # 删除所有地址

ip route 路由信息

1
2
3
4
ip route show
ip route get 1.1.1.1 # 去往这个ip
ip route add default via 192.168.1.1 # 添加默认路由
ip route add dev wlp3s0 2.0.0.0/8 via 192.168.1.1 # 添加指定路由

ip maddress 多播地址,组播地址

1
2
3
ip maddress ls ens33

ip maddress add 33:33:00:00:00:01 dev ens33

ip neighbor ARP地址表相关

1
2
ip -s -s neighbor show           #  查看ARP表
ip neighbor add dev wlp3s0 10.1.1.1 lladdr 0:0:0:0:0:1 nud permit # 添加一条 ARP 相关表项

DNS配置

主机名解析

1
2
3
4
sudo vim /etc/hosts            # 这里的解析优先级高于resolv.conf

127.0.0.1 localhost
127.0.1.1 u

名称解析顺序配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
sudo vim /etc/nsswitch.conf

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd: compat systemd
group: compat systemd
shadow: compat
gshadow: files

hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis
~
~
~

只需关注:hosts: files mdns4_minimal [NOTFOUND=return] dns myhostname

  • files 在/etc/hosts
  • Resolve systemd-resolved.service(缓存、localhost、本机名)
  • [NOTFOUND=return] mdns结果即权威
  • dns DNS服务器
  • mdns4_minimal Multicast DNS 多播DNS服务器

网桥配置(桥接)

将多个以太网段以 上层协议透明的方式链接在一起

  • 二层转发,对三层协议透明
  • 启用防火墙可与流量过滤
  • 桥接宿主机与虚拟机网络,使虚拟机访问外部网络
  • 桥接有线网与无线网
  • 链路冗余容错(需启用STP)
  • 通过网桥管理工具实现bridge-utils

在vmware虚拟机上设置两块网卡,一个网卡为nat模式,另一个为仅主机模式

网桥桥接

  • 安装网桥管理包
1
sudo apt install bridge-utils

brctl命令来添加网桥

临时配置

  • sudo brctl addbr br0 添加网桥,命名为br0,然后ifconfig -a机会看到多了一块网桥br0
  • sudo brctl addif br0 ens32 ens35 在br0里添加ens32和ens35,架起桥梁。
  • 把加入到网桥的网卡的ip设为0.0.0.0, 可以先把网卡down掉再改ip
1
2
sudo ifconfig ens32 0.0.0.0 up
sudo ifconfig ens35 0.0.0.1 up
  • 给网桥网卡分配ip,这里是静态
1
sudo ifconfig br0 1.1.1.1/24 up
  • 也可以动态分配ip
1
sudo dhclient br0
  • sudo route add default gw 1.1.1.10

持久配置

ubuntu18.04网络配置文件已经不在/etc/network/interface下了,而是在/etc/netplan/的文件中

添加下列配置

这是/etc/network/interface

1
2
3
4
5
6
7
8
auto ens32
iface ens32 inet manual
auto ens35
iface ens35 inet manual
auto br0
iface br0 inet dhcp
bridge_ports ens32 ens35
bridge_stp off

重启服务

  • sudo systemctl restart networking
  • sudo service networking restart
  • sudo /etc/init.d/networking restart

/etc/netplan/目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
network:
ethernets:
ens33:
dhcp4: false
ens38:
dhcp4: false

bridges:
br0:
interfaces: [ens33]
interfaces: [ens38]
dhcp4: true
version: 2

重启网卡: netplan apply

netplan --debug apply 如果网络配置出错了,可以这样查看

查看网桥信息

  • brctl show
  • brctl showmacs br0
  • brctl showstp br0

网卡绑定

作用:

  • 当一个网卡不够用的时候,可以使用两个网卡绑定在一起增加带宽
  • 当一个网卡断的话,另一个网卡可以形成备份,增加链路冗余
  • 主备模式只能做成链路备份,不能负载,负载需要服务器和交换机互相配合
  • 将多个物理网卡组合为一个逻辑网卡,实现高可用、负载均衡、高吞吐量

多网卡绑定

bond的7种模式

  • mode=0 round-robin轮询策略(Round-robin policy)
  • mode=1 active-backup主备策略(Active-backup policy)
  • mode=2 load balancing (xor)异或策略(XOR policy)
  • mode=3 fault-tolerance (broadcast)广播策略(Broadcast policy)
  • mode=4 lacp IEEE 802.3ad 动态链路聚合(IEEE 802.3ad Dynamic link aggregation)
  • mode=5 transmit load balancing适配器传输负载均衡(Adaptive transmit load balancing)
  • mode=6 adaptive load balancing适配器负载均衡(Adaptive load balancing)

主备模式 active-backup:

  • 这个是主备模式,只有一块网卡是active,另一块是备用的standby,所有流量都在active链路上处理。

  • 注意:交换机不能做聚合端口,因为交换机配置的是捆绑的话将不能工作,因为交换机往两块网卡发包,有一半包是丢弃的。

  • 特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。

  • 此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态。

动态链接聚合 802.3ad:

  • 表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy).标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽
  • 特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
  • 必要条件:在交换机和服务器上都需要配置动态链路聚合

主备模式做绑定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
sudo vim /etc/netplan/50-cloud-init.yaml

network:
version: 2
ethernets:
ens33:
dhcp4: no
dhcp6: no
ens38:
dhcp4: no
dhcp6: no
bonds:
bond0:
interfaces:
- ens33
- ens38
addresses: [192.168.19.30/24]
gateway4: 192.168.19.2
nameservers:
addresses: [223.5.5.5,223.6.6.6]
parameters:
mode: active-backup
mii-monitor-interval: 100

双网卡绑定并桥接

先做网络绑定,然后桥接选择接口,选择绑定的网络。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
sudo vim /etc/netplan/50-cloud-init.yaml

network:
version: 2
ethernets:
ens33:
dhcp4: no
dhcp6: no
ens38:
dhcp4: no
dhcp6: no
bonds:
bond0:
interfaces:
- ens33
- ens38
parameters:
mode: active-backup
mii-monitor-interval: 100
bridges:
br0:
dhcp4: no
dhcp6: no
addresses: [192.168.19.30/24]
gateway4: 192.168.19.2
nameservers:
addresses: [223.5.5.5,223.6.6.6]
interfaces:
- bond0

DHCP服务

Dynamic Host Configuration Protocol

介绍

自动分配网络设置

  • 透明的配置网络参数
  • IP/掩码, 网关, DNS, 域名, 主机名, 时间服务器, 打印服务器
  • 通过地址租约循环使用IP地址
  • UDP 67 / 68 基于udp协议之上的一个应用层的协议,使用udp协议的端口67和68 标准的DHCP, 服务器使用67端口, 客户端使用68端口

客户端连上网络,就要获取ip, 就要发送广播, 发送一个叫discover的数据包, 通过二层广播, 喊”谁有ip啊”, 而DHCP服务端一直在监听, 听到后会立即相应, 回给客户端一个称之为offer的数据包. 客户端会再发一个request请求包, 服务端收到后会发送一个确认包, 客户端得到确认后会使用服务端给的ip地址等

安装配置

在虚拟机上做实验,要把虚拟机上的DHCP服务关掉, 避免对ubuntu server造成影响

1
2
3
4
5
6
7
8
sudo apt install isc-dhcp-server   # 安装DHCP服务端

# 配置dhcp服务端
sudo vim /etc/default/isc-dhcp-server # 指定启动DHCP服务的网卡
# 修改配置, 添加网卡名称
INTERFACESv4="ens33"

sudo vim /etc/dhcp/dhcpd.conf # 主配置文件(指定址池)

主配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# Attention: If /etc/ltsp/dhcpd.conf exists, that will be used as
# configuration file instead of this file.
#

# option definitions common to all supported networks...
option domain-name "example.org";
option domain-name-servers 172.16.247.1, 8.8.4.4;

default-lease-time 600; # 租约期限, 用到期限的一半, 客户端就会跟服务端更新租约期限, 有变成了10分钟
max-lease-time 7200; # 到两小时, 又要重新获取ip

# The ddns-updates-style parameter controls whether or not the server will
# attempt to do a DNS update when a lease is confirmed. We default to the
# behavior of the version 2 packages ('none', since DHCP v2 didn't
# have support for DDNS.)
ddns-update-style none;

# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
#authoritative; 授权服务器

有option 的配置是关于ip地址池 作用域的, 没有option的配置是作用于整个服务器的, 全局性的配置

在配置文件中任何位置添加:

1
2
3
4
5
6
7
8
9
10
subnet 172.16.247.0 netmask 255.255.255.0 {
range 172.16.247.100 172.16.247.200; # 申明了地址池
option routers 172.16.247.1; # 网关地址
option domain-name-servers 172.16.247.1, 202.106.0.20; # dns
option domain-name "lab.com"; # 域名
option ntp-servers 172.16.247.1; # 时间服务器

}


重启服务:

1
sudo systemctl restart isc-dhcp-server.service

然后就可以啦

DHCP地址保留

给计算机保留IP地址

1
2
3
4
5
6
7
sudo vim /etc/dhcp/dhcpd.conf 
# 添加配置

host name { # 主机地址保留
hardware ethernet 00:0c:29:33:e3:b1; # 指定网卡mac地址
fixed-address 172.16.247.8; # 子网内地址,可为range外地址
} # 记录mac地址,指定分发ip

日志与状态查看

1
2
3
4
cat /var/lib/dhcp/dhcp.leases   # 服务器地址租约结果
tail -f /var/log/syslog # 日志文件
systemctl status isc-dhcp-server.service # 服务器状态
less /var/lib/dhcp/dhclient.leases # 客户端获得地址

NTP服务

网络时间协议

计时方法

  • 太阳照影、滴水、烧香、电子、石英原子时钟
  • Drift是计时器时间与真实时间之间的偏移量
  • 基于铯133的原子时钟每3亿年误差为1秒

时间标准

  • GMT:格林威治标准时间
  • UTC:世界协调时间
  • CST:China Standard Time UT+8:00

计算机技术对时间非常敏感

  • IPSec、AD、SSL
  • 日志审计
  • 电子元器件相互干扰加大时间偏移

如何保证时间准确

  • 不停地同步时间
  • 永远无法精确同步(网络通信延时影响时间同步精度)

NTP协议的分层结构

  • 从核心向外0-16层
  • 0代表时间源
  • 1-15代表逐级同步的时间服务器(越接近0时间越精确)
  • 16代表尚未同步(不作为时间同步源)
  • 客户端服务器全部使用udp 123端口通信

每个移动设备都运行NTP协议

  • 硬件时钟:RTC(主板电池)
  • 系统时钟:Local time

NTP客户端

NTP客户端

  • 客户端程序从时间服务器同步时间
  • 系统启动时自动同步时间
  • 网口激活时自动同步运行
  • 手动同步时间

客户端命令:

  • timedatectl
1
2
3
4
5
6
7
8
9
cwz@ubuntu_server:~$ timedatectl 
Local time: Fri 2019-10-25 10:20:32 UTC
Universal time: Fri 2019-10-25 10:20:32 UTC
RTC time: Fri 2019-10-25 10:20:32
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

ntp客户端命令

1
2
3
4
5
6
7
8
timedatectrl list-timezones   # 列出所有时区
timedatectrl set-timezone # 设置时区
timedatectrl set-time "2012-10-20 18:10:21" # 设置系统时间
timedatectrl set-ntp true # 开启网络时间同步服务
systemctl status systemd-timesyncd.service # 查看时间同步服务运行状态
sudo hwclock -w # 将系统时间写入硬件时间
sudo hwclock -s # 将硬件时间写入系统时间
hwclock --set--date='2012-08-08 12:01:50'

早期linux客户端程序:ntpdate

先安装

1
2
3
4
5
6
7
8
9
sudo apt install ntpdate          # 安装


sudo ntpdate ntp.ubuntu.com # 向指定服务器发起时间同步
sudo ntpdate -d ntp.ubuntu.com # 显示时间同步详细过程
sudo ntpdate -q ntp.ubuntu.com # 只查询时间,并不本地同步时间
sudo ntpdate -u ntp.ubuntu.com # 随机源端口

# 一旦ntpdate/ntp, timedatectl将被禁用

NTPD 时间服务器

新版本系统使用timesyncd替换ntpd的客户端功能

ntpd: 客户端 + 服务器

1
2
3
4
sudo apt install ntp    # 安装ntp服务
sudo systemctl status ntp # 查询服务状态
sudo systemctl restart ntp # 重启服务
sudo vim /etc/ntp.conf # 配置文件

配置:

1
2
3
4
5
6
7
8
9
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
# 以上是/etc/ntp.conf文件中的官方的时间池

如果不想用官方的时间服务器,可以手动添加服务器
server 1.1.1.1
fudge 127.127.1.1 stratum 10 # 当设置的网络时间服务器不通时,可以使用本机的硬件时间作为备用时间服务器,但是要把层级设置的低一些 stratum 10
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ntpq -p       # 可以详细的查看时间服务器的运行情况


# 显示的信息:
remote # 本机正在连接的上级时间服务器
refid # 上级服务器的上级时间服务器
st # 服务器stratum层级
t # 协议类型:unicast, broadcast,multicast,anycast
when # 上一次查询服务器已过去的时间
poll # 查询服务器的时间间隔
reach # 最近8次查询结果成功,则值为377(8进制数),开始提供时间服务
delay # 请求和响应之间的时间差(毫秒)
offset # 本地时钟与时间服务器的时间偏移
jitter # 与服务器的网络延时,此值应该小于100



# 每行第一个字符表示的意思:
空表示无效主机
x 已不再使用
- 已不再使用
# 状态良好但未使用
+ 良好且优先使用
* 首选主同步主机

时间相关的命令

1
2
3
date --set 2012-01-10      # 设置日期
date --set 21:10:0 # 设置时间
cat /etc/timezone # 查看时区