Linux网络基础和管理

网络基础知识

应用层:
表示层:数据的标识、安全、压缩等—格式有ASCII、加密格式等
会话层:建立、管理、终止会话==对应主机进程、指本地主机与远程管理正在进行的会话
传输层:定义传输数据的协议端口号,以及流量控制和差错校验—TCP、UDP
网络层:建立逻辑寻址,实现不同网络之间的路径选择—协议有ICMP IP arp等
链路层:建立物理寻址,提供差错校验等功能—对比特组成字节合成数据帧,用MAC地址访问介质
物理层:建立、维护、建立物理链路—比特流

封装和解封装的过程:

arp解析过程

通过IP找MAC
同一个局域网下:
广播
跨网络:代理ARP
源mac地址随转发的设备一直在改变,源IP不变

TCP三次握手和四次挥手—进行可靠传输

三次握手

1.client发送SYN包给server(seq序列号)
2.server接收到SYN包之后,返回一个ACK包
3.server发送SYN包给client
4.client接收到server的SYN包之后,返回一个ACK包
ps:2和3将ack包和SYN包同时发送—节省带宽

四次挥手

断开连接的过程:(主动断开连接方位client)
1.client发送FIN包给server
2.server接收到client的FIN包之后,返回一个ACK包
3.server发送FIN包给client
4.client接收到server的FIN包之后,返回一个ACK包
ps:2和3不能同时发送,因为server接收到client的FIN包后可能还没有将数据发送完
Linux网络栈中可以将两个包同时发送,前提是当server发送ACK包的时候,没有数据要进行传输,此时ACK包和FIN可能同时返回,目的是节省带宽

有限状态机的变化过程:

三次握手有限状态机的变化(主动发起方为client,server端初一listen状态)

1.client发送syn包后进入SYN_SENT状态
2.server接收到SYN包之后,发送ACK和SYN包,进入SYN_RECV状态
3.client接收到server端的SYN包和ack包之后发送ACK包,进入enstablish连接状态
4.当server端收到client端的ack包之后,也会进入enstablish连接状态

四次挥手有限状态机的变化:

1.client发送FIN包后给server后,进入FIN_WAIT_1状态
2.server接收到FIN包后发送ACK包,进入CLOSE_WAIT状态,client收到ACK后进入FIN_WAIT_2状态
3.server发送FIN包给client后进入LAST_ACK状态
4.client接收到FIN包后进入TIME_WAIT状态,发送ACK给server(server收到ack后关闭,client等待两倍的报文段寿命后若还没有收到server端的回复则可正常关闭)

mss:最大报文长度
msl:最大报文存活时间

《图解TCP/IP》

Linux网络属性管理

跨网络通信:路由
一般主机上的路由有三种:主机路由、网络路由、默认路由

Linux主机接入到网络中需要配置的信息有
IP/mask
默认网关
DNS服务器
Linux配置网络方式
静态指定
命令:IP系列|ifcfg系列(net-tools工具包提供)
配置文件
nmcli命令
动态分配(DHCP)

ifcfg系列命令

安装:yum install net-tools -y
ipconfig命令:
查看指定网络接口的配置信息
ifconfig 网卡名称
ifconfig -a 查看所有网络接口的配置信息
配置IP地址
ifconfig 网卡名称 IP/mask [up]
ifconfig 网卡名称 IP netmask 掩码 [up]
参数:promisc
启动混杂模式(-表示关闭):关闭混杂模式在抓包时如果收到的报文不是发送给该接口的也可以被抓到
ifconfig [-promisc]

route命令

查看内核路由表信息:route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
目的地址 网关 掩码 路由的表示位 度量值 .. 网卡
flags:路由的标志位路由
U表示启动状态
G表示默认网关
H表示主机路由
如何添加路由
主机路由:必须是255.255.255.255,无法指定
route add -host host.ip gw gw.ip dev
网络路由:
route add -net net.ip(ip/mask) gw gw.ip dev
默认路由(特殊的网络路由):
route add default gw gw.ip

删除路由
route del [-host][-net] target gw gw,ip dev

DNS服务器指定

配置文件:/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2

dig命令

dig -t 域名 正向解析
dig -x ip 反向解析

netstat—网络连接较多的情况下使用ss命令替代netstat命令

Print network connections, routing tables, interface sta‐tistics, masquerade connections, and multicast memberships
显示网络连接,路由表信息,接口统计,伪装链接,组播成员关系

显示网络连接

常用选项
-t:显示TCP协议相关
-u:显示UDP协议相关
-w:显示raw socket相关
-l:显示所有处于LISTEN状态
-a:显示所有连接状态
-n:以数字显示IP和端口号(不进行反向解析)
-p:显示相关进程及PID号
-e:扩展模式

显示路由表

-r:显示内核路由表
-n:数字形式显示

显示接口统计数据

-i:显示所有接口统计
-I:显示指定接口的通信

ifup/ifdown :用来启用/禁用一个接口

ethtool :显示接口设备属性

ethtool -S :显示接口设备的统计数据

IP 系列命令

IP命令

[root@localhost ~]# ip —help
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
ip address 查看网络地址信息
ip address help 查看帮助
ip address add 配置设备的IP
ip address add op/mask dev
ip address add op/mask dev broadcast b.ip 指定网络地址
ip address add op/mask dev label 配置地址时指明网卡标签
ip address add op/mask dev scope (global | link | host)
global:全局可用(如果从另外一个网卡进来的数据也可以与该地址通信)
link:仅链接可用(只能是该网卡直连的设备通信,同一个广播域中)
host:仅本机可用(只能自己通信,不能与其他任何地址通信)
ip address 查看所有设备的IP
ip address show 查看所有设备的IP
ip address show 查看指定设备的IP地址
ip address label 查看指定标签设备的IP地址
ip address show dev primary 查看指定设备的主IP地址

ip address flush dev 清空指定设备的所有IP地址
ip link
ip link help 显示配置帮助信息
ip link set [up|down] 激活或禁用指定接口
ip link set multicast [off|on] 开启或关闭接口的组播功能
ip link set name 重命名接口(需要接口状态为down)
ip link set mtu 设置接口的MTU(最大传输单元)值 1500
ip link set netns [PID|NAMESPACE] 将接口移动到指定的网络名称空间中
名称空间namespace:docker 资源隔离—网络资源的隔离
生成虚拟网卡,与namespace成为一个veth-pair
ip link show 显示所有接口状态
ip link show 显示指定接口状态
ip link show ip 仅显示处于激活状态的接口
ip route
ip route add host.ip via g.ip dev 添加主机路由
ip route add net.ip/mask via g.ip dev 添加网络路由
ip route add default via g.ip dev 添加默认路由
sec s.ip —>添加路由是由指定发送报文的源地址
ip route del 删除指定路由
ip route show 查看路由表
ip route get 查看指定路由的详细信息
ip route flush [dev] 清空所有路由,也可以通过dev参数指定设备
ip route flush [host.ip net.ip/mask] 清空指定路由

ip route change 修改路由(如果路由不存在则提示:不存在)
ip route repalce 修改路由(如果路由不存在则创建)

ss命令 —- netstat命令

[root@node1 ~]# ss —help
Usage: ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
常用选项
-t:显示TCP协议相关
-u:显示UDP协议相关
-w:显示套接字相关
-x:显示unix socket相关连接
-l:显示listen状态的连接
-a:显示所有状态的连接
-n:以数字形式显示IP和port
-p:显示对应的程序名和PID
-e:以扩展格式显示
-m:显示内存用量
-o:显示计时器信息
TCP常见状态—tcp有限状态机
LISTEN 监听
SYN_SENT
SYN_RECV
ESTABLISHED 已建立的连接
FIN_WAIT_1
FIN_WAIT_2
CLOSE_WAIT
LAST_ACK
TIME_WAIT
CLOSED
建议: 能够去看linux socket编程当中涉及到的函数调用
listen() send() recv() accept() close() …

ss可以通过指定过滤来查看TCP相关的状态
ss state 状态
[root@localhost ~]# ss -ta state LISTENING
指定表达式过滤网络信息
ss -tan sport = 22 显示源端口为22的连接
ss -tan dport = 22 显示目的端口为22的连接
or
and
man手册中的示例:
ss state fin-wait-1 ‘( sport = :http or sport = :https )’ dst 193.233.7/24
ss state established ‘( dport = :ssh or sport = :ssh )’

Linux网络配置—修改配置文件

IP/mask/gw/dns相关配置:/etc/sysconfig/network-scripts/ifcfg-

路由相关配置文件

/etc/sysconfig/network-scripts/route-
默认没有需要手动创建

/etc/sysconfig/network-scripts/ifcfg-中的配置项:
DEVICE=ens33 此配置文件对应哪个网络接口设备
TYPE=Ethernet 接口类型:Ethernet/Bridge等
HWADDR=00:0a:0c:0d:0e:0f 对应设备的MAC地址
BOOTPROTO=[static|none|dhcp] 对应设备使用的地址配置协议
static|none 手动配置
dhcp 自动获取配置
IPADDR=192.168.10.10 手动配置下:指定IP地址
NETMASK=255.255.255.0 手动配置下:指定子网掩码
GATEWAY=192.168.10.254 手动配置下:指定默认网关
DNS1=114.114.114.114
DNS2=8.8.4.4 指定DNS服务器(这里配置会写入到/etc/reslov.conf文件中)
UUID=xxxx 设备的唯一标识
NM_CONTROLLED=[no|yes] NM是NetworkManager的简写,此网卡是否
被NM控制
ONBOOT=[yes|no] 在系统引导的过程中是否激活此设备

USERCTl=[yes|no] 普通用户是否可控制该设备
PEERDNS=[yes|no] 如果BOOTPROTO为dhcp,是否允许dhcpserver分配的dns
服务器信息直接覆盖至/etc/reslov.conf文件中

最简单的配置:
[root@node1 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=dhcp
DEVICE=ens33
ONBOOT=yes

/etc/sysconfig/network-scripts/route-

两种风格的写法:两种不能够混用,只能固定使用其中一种
第一种: Target via GW
192.168.10.10 via 192.168.10.254 -> host
172.16.0.0/16 via 172.16.0.254 -> network
default via 10.10.10.254 -> default

第二种:每三行定义一条路由
ADDRESS#=Target
NETMASK#=netmask
GATEWAY#=gw

ADDRESS0=172.16.0.0
NETMASK0=255.255.0.0
GATEWAY0=172.16.0.254

ADDRESS1=0.0.0.0
NETMASK1=0.0.0.0
GATEWAY1=10.10.10.254

让配置文件生效:重启网络服务

systemctl restart network — centos7
/etc/init.d/network restart — init方式
service network restart — centos6

给网卡配置多地址

ifconfig ens33:0 ip/mask
ip address add ip/mask dev label
配置文件中定义多地址
DEVICE=
DEVICE=ens33:1
注意:网卡别名不能够使用DHCP协议引导

修改当前主机的主机名

hostnamectl set-hostname
/etc/sysconfig/network-scripts/network
HOSTNAME=

/etc/host文件: 主机名解析
主机名 - IP 地址进行解析

ip地址配置工具—centos7

nmcli命令- command-line tool for controlling NetworkManager
nmcli device status 查看所有网卡状态
nmcli device show 查看所有网卡状态
nmcli device show 查看指定网卡状态
nmcli device connect 连接指定网卡
nmcli device disconnect 断开指定网卡
nmcli connection show 查看所有设备的连接信息
nmcli connection show 查看指定设备的连接信息
nmcli connection modify 修改指定设备的连接信息

修改设备IP地址的属性:
nmcli connection modify ens33
ipv4.addresses=x.x.x.x/mask
ipv4.gateway=x.x.x.x
ipv4.method: manual # 表名该网卡设备是手动指定的
ipv4.dns: —
ipv4.dns-search: —
ipv4.dns-options: “”
ipv4.dns-priority: 0
ipv4.addresses: 192.168.10.10/24
ipv4.gateway: —
ipv4.routes: —
ipv4.route-metric: -1
ipv4.route-table: 0 (unspec)

DHCP服务原理

动态主机控制协议 是一个局域网的网络协议,使用UDP协议工作
两个用途
1.用于内部网或网络服务提供自动分配IP地址
2.用于提供给网络管理员对网络的集中管理
优点:
1.减少管理员的工作量
2.避免IP地址冲突
3.提高IP地址的利用率
4.移动计算机后不用重新配置网络信息,可以方便更改错误的可能性

DHCP相关概念:

1.DHCP客户端:获取网络配置参数
2.DHCP服务端:提供网络配置参数
3.DHCP中继代理:服务端和客户端之间转发DHCP的设备(主机或路由器)
4.作用域:一个网络中的所有可分配的IP地址连续范围
主要用来定义物理子网的单一IP地址范围
5.超级作用域:一组作用域的集合,实现一个物理子网中多个逻辑IP地址
6.排除范围:排除作用域中有限的IP地址序列(不使用DHCP服务)
7.地址池:定义作用域+排除范围之后,剩余的真正可用地址
8.保留DHCP服务端提供永久地址租约,确保客户端始终使用同一个IP地址
9.租用:客户端从服务端上获得占用某个IP地址的过程
10.租约:获得IP地址的使用时间
获得IP地址时租约被激活并更新其地址租约,当租约到期的时候可以进行续约或者停止租约

*DHCP运行过程

1.客户端在局域网中发送一个DHCP discover包,主要用于发现服务端
2.服务端收到discover包后,会回应客户端offer包,主要用于告诉客户端我能提供IP地址
3.客户端接收到服务端offer包之后,发送一个request包,用于请求网络配置信息
4.服务端收到request包后,发送ack包,用于确认信息

DHCP租约更新

自动更新租约
当租期>=50% 自动尝试更新租约
当租期>=87.5% 发出广播再次更新
当租期 >= 100% 客户端停止使用当前IP地址,只能更新DHCP租约过程

手动更新租约:
Linux: dhclient -r
Window: ipconfig /revew 和 /release

DNS服务原理

域名解析协议,是一个分布式数据库系统,其作用将域名解析成IP地址
域名系统允许用户使用友好的名字而不是IP地址
dns是基于客户/服务器模型设计的

DNS系统组成

域名空间:表示一组主机并提供他们的有关信息的树结构的详细说明
域名服务器:保持和维护域名空间中的数据
stub解析器:解析器是简单的程序或子程序,他从服务器中提取信息以响应对域名空间中主机的查询,用于DNS客户

DNS分层结构

根域名./
顶级域名.com .cn …
子域名 baidu.com
主机名www.baidu.com

DNS服务器类型

权威性服务器
主域名服务器
辅助域名服务器:用作于主域名服务器冗余服务
残根域名服务器
秘密域名服务器
非权威性服务器
高速缓存服务器
转发服务器

1.所有服务器均设置了高速缓存服务器来提供名字的解析
2.一些域的主域名服务器可以是另一个域的辅助域名服务器
3.一个域只能创建一个主域名服务器,另外至少创建两个辅助域名服务器
4.在网络上设置高速缓冲服务器可以减少主服务器和辅助服务器的负载量,减少网络传输压力
5.转发服务器一般用于用户不希望zhan站点内的服务器能够直接和外部服务器通信

DNS区域

方便根据实际情况来分散域名管理工作的负载,将DNS域名空间划分为区域来进行管理
区域是DNS服务器的管辖范围
DNS服务器以区域为单位来管理域名空间的
一台DNS服务器可以管理1个或多个域名区域,而一个区域也可以由多个DNS服务器来管理
将DNS域名空间分为几个,他存储着有关一个或多个DNS域的名称信息

域的委托管理
管理是分布式的,DNS将子域授权给其他组织进行管理
优点
工作负载分散
提高域名服务器的响应速度
提高了网络带宽的利用率

*DNS记录类型

域名和IP地址的对应关系,称之为”记录record“,根据使用场景,可以分为不同类型
常见的DNS记录类型
A:记录地址,返回域名所指向的IPV4地址
NS:域名服务器,返回保存下一级域名信息的服务器地址,该记录只能设置为域名,不能设置为IP地址
MX:邮箱记录,返回接收电子邮箱的服务器地址
CNAME:规范名称记录,返回另外一个域名,即当前查询的域名是另一个域名的跳转
PTR:逆查域名,用于IP地址查询域名
扩展:
TXT:用于做SPF(反垃圾邮箱)
AAA:记录地址,返回域名所指向的IPv6地址
SRV:记录哪台计算机提供哪个服务
格式:服务名字 点 协议类型
显性URL:从一个地址301重定向到另一个地址的时候
隐性URL:类似显性URL,区别在于隐性URL不会改变地址中的域名
dig命令:
dig www.baidu.com
dig -x 反向解析
dig [type] FQDN 查询指定的记录类型

*DNS查询类型

本地解析:通过以前查询获得缓存信息就地应答查询
递归查询:DNS服务器代表请求客户机练习其他DNS服务器,以完全解析,返回给客户机
迭代查询,客户机自己不断请求DNS服务来解析名称,典型的就是DNS之间的交互

*DNS解析过程

1.浏览器缓存
2.系统缓存(host文件中)
3.路由器缓存———-以上均为DNS客户端的缓存
4.ISOP DNS缓存
5.根域名服务器
6.顶级域名服务器
7.主机名服务器
8.查询到解析记录,保存结果并缓存

Linux客户端

stub解析器
[root@localhost ~]# cat /etc/nsswitch.conf | grep host
#hosts: db files nisplus nis dns
hosts: files dns myhostname

hosts:决定DNS客户端的查询顺序
files————>hosts
dns———>dns过程
myhostname————->主机名
客户端解析测试工具:dig host nslookup

8读取的配置文件:

控制文件: /etc/hosts.conf /etc/hosts
配置文件: /etc/resolv.conf

/etc/hosts.conf 配置文件;

  1. Order: 指定使用不同的解析机制的顺序<br /> hosts /etc/hosts文件<br /> bind: 使用DNS服务器<br /> nis 使用NIS服务器<br /> Alter on 表示任何试图骗取IP地址的行为都会被记录<br /> nulti on 表示是否运行/etc/hosts文件允许主机指定多个地址 on表示运行<br /> Nosoopf 反向解析后,找到主机名对应的IP地址时,再进行一个正向解析,防止欺骗的“ip”地址<br /> rccorder:如果设置为on 那么所有查询将被重新排序<br />

*/etc/resolv.conf配置文件:

nameserver x.x.x.x
domain: 定义默认的域名(主机的本地域名)
options:
rotate: 打开客户端,轮询查询,当nameserver有多个的时候,进行轮询查询
nochecknames: 当使用带有”_”的域名的时候,需要设置该选项