Linux——网络属性管理

由于在传统的共享以太网中,所有的节点共享传输介质,所以同一时间只能允许2台计算机之间通信,如果多台计算机想要同时通信,就会导致数据“粘包”或堵塞。于是以太网采用了: CSMA/CD协议(基带冲突检测的载波监听多路访问技术)

这个协议的作用是:证传输介质有序、高效地为许多节点提供传输服务,换句话说,就是每个主机发送信息前要先进行载波监听(看这个网络有没有人用),有人用就等待,没人用就立即发信号并监听,一旦发生了冲突,就后退一段随机时间,然后在检测。

交换机:

这样就又有一个问题了,在网络负载增大时,发送时间增长,发送效率急剧下降(就是在同一时刻发生了冲突,大家都不发送了)。那么,我们就需要一个新的解决方案了,将一个大网络切割成小网络,这样就可以使小网络内部之间的通信就相对流畅了。

小网络之间通过交换机/网桥进行通信,交换机/网桥中有一个mac地址表(存放着网络上的节点的网卡MAC地址),通过mac表实现小网络之间的通信

MAC地址表动态生成的过程:

1)主机A将一个源MAC地址(一共48位:前24bits由IEEE的注册管理机构RA分配给不同厂家,后24bits:厂商自己定)为自己,目标MAC地址主机C的数据帧发送给交换机

2)交换机1收到此数据帧后,会学习源MAC地址,并检查MAC地址表,发现没有目标MAC地址的记录,则会将数据帧广播(发送每一个主机一份)出去,主机B和交换机2都会收到此数据帧。

3)交换机2收到此数据帧后也会将数据帧中的源MAC地址和对应的接口记录到MAC地址表中,并检查自己的MAC地址表,发现没有目标MAC地址的记录,则会广播此数据帧。

4)主机C收到数据帧后,会响应这个数据帧,并回复一个源MAC地址为自己的数据帧,这时交换机1和交换机1都会将主机C的MAC地址记录到自己的MAC地址表中,并且以单播的形式将此数据帧发送给主机A。

5)这时,主机A和主机C通信就是一单播的形式传输数据帧了,主机B和主机C通信如上述过程一样,因此交换机2的MAC地址表中记录着主机A和主机B的MAC地址都对应接口f 0/1。

路由器:

以上这种方法解决了冲突域的问题,但是会产生广播域的问题(广播过于频繁,会导致广播过多,引起主机之间不发送数据了,光广播了)

所以我们通过路由器来解决广播域的问题,路由系统连接着交换机

相比于交换机,路由器并不通过MAC地址来确定转发数据的目的地址。路由器工作在网络层,利用不同网络的ID号(IP地址+子网掩码)来确定数据转发的目的地址,路由器通过IP地址将连接到其端口的设备划分为不同的网络(子网),每个端口下连接的网络即为一个广播域,广播数据不会扩散到该端口以外,因此我们说路由器隔离了广播域

进程之间的通信:

由于真正通信的是进程之间进行通信,所以我们是通过套接字(ip:port),这种方式使进程之间进行通信的。

应用层协议(url):

由于我们访问网站的时候,只会获得相应网址的内容,所以url是标记套接字上哪个资源的位置

网络7层协议

应用层

表示层    前三个是:资源子网

会话层

传输层:源port --> 目标port(tcp,udp,sctp协议)

网络层:源IP --> 目标IP    后4个是通信子网

数据链路层:本地通信

物理层:物理电缆

ip协议

IPv4 地址分类:

ipv4地址采用的是点分十进制(8位2进制)

每一位的范围:0000 0000 - 1111 1111(0-255)

0.0.0.0-255.255.255.255

A类:前1位表示网络地址,最后一位表示主机地址

  • 第一位范围:0 000 0000 - 0 111 1111(1-127)
  • 网络数:126, 127(本地回环)
  • 每个网络中的主机数:2^24-2;全为0(网络地址),全为1(广播地址)
  • 默认子网掩码:255.0.0.0
  • 私网地址:10.0.0.0/8(表示1的个数 )

B类:前2位表示网络地址,最后一位表示主机地址

  • 第一位范围:10 00 0000 - 10 11 1111(128-191)
  • 网络数:2^14
  • 每个网络中的主机数:2^16-2
  • 默认子网掩码:255.255.0.0
  • 私网地址:172.16.0.0/16-172.31.0.0/16

C类:前3位表示网络地址,最后一位表示主机地址

  • 110 0 0000 - 110 1 1111: 192-223
  • 网络数:2^21
  • 每个网络中的主机数:2^8-2
  • 默认子网掩码:255.255.255.0
  • 私网地址:192.168.0.0/24-192.168.255.0/24

D类:组播

  • 1110 0000 - 1110 1111: 224-239

E类:

  • 240-255

子网掩码有什么用:

源地址:172.16.100.100/255.255.0.0,

目标地址:172.17.1.1

源ip地址与源子网掩码做“与”运算,目标ip地址与源子网掩码做“与”运算,看相不相同,相同就是本地网络,不同就要跨网络通信

跨网络通信:要靠路由来实现

  • 主机路由:x.x.x.x/32,意思是仅仅到x.x.x.x的报文听我的。
  • 网络路由:x.x.x.x/n,意思是到x.x.x.x/n的报文听我的。
  • 默认路由:0.0.0.0/0,意思是实在没人要的报文听我的。

Linux配置连入网络

连入网络需要知道以下三个东西:

  • IP/mask
  • 路由:默认网关
  • DNS服务器:将域名解析成ip地址
    • 主DNS服务器
    • 次DNS服务器(备胎们)
    • 第三DNS服务器

Linux主要有两种配置方式,动态分配(DHCP,动态主机配置协议)和静态指定(ifcfg系,ip系,编辑配置文件)

一、ifcfg系列

配置网络接口:

接口命名方式(centos6):

  • 以太网:eth[0,1,2,...]
  • ppp(拨号网络):ppp[0,1,2,...]

ifconfig命令

实现查看本机的网络信息,和修改ip地址、子网掩码的功能

用法1:ifconfig [interface]:

  • # ifconfig:显示本机所有处于活动状态接口的地址
  • # ifconfig -a:显示本机所有的接口
  • # ifconfig IFACE(接口名) [up|down](启用/禁用接口)

用法2:ifconfig interface [aftype] options | address ...

  • # ifconfig IFACE IP/(mask长度) [up]:修改接口的ip和子网掩码
  • # ifconfig IFACE IP netmask MASK:修改接口的ip和子网掩码
ifconfig ens33 192.168.37.130/24 up

# 将ens33端口的ip地址修改为192.168.37.130,子网掩码改为255.255.255.0,如果想要恢复之间的状态,可以使用service network restart命令重启网络

注意:ifconfig命令配置后立即生效;但不会永久有效。

启用混杂模式:[-]promisc("-"表示禁用,不加表示启用。我也不知道它是干啥的)

route命令

路由管理命令,用来配置,查看,删除路由信息。

查看当前路由的ip,网关:route -n

添加:route add

配置路由就是告诉系统从哪个路由网关连接网络

命令格式:route add [-net|-host](指明网络路由还是主机路由) target [netmask Nm(经由哪个路由网关)] [gw Gw] [[dev] If]

示例:目标:192.168.1.3 网关:192.168.37.2

# route add -host 192.168.1.3 gw 192.168.37.2 dev ens33
添加一个主机路由(ip:192.168.1.3),经由路由网关(192.168.37.2),从ens33接口发出,子网掩码会自动判断,主机路由是255.255.0

目标:192.168.0.0 网关:192.168.37.2

route add -net 192.167.0.0 netmask 255.255.255.0 gw 192.168.37.2 dev ens33

# route add -net 192.168.0.0/24 gw 192.168.37.2 dev ens33

添加网络路由的时候,必须要加上子网掩码

默认路由,网关:192.168.37.2

~]# route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.37.2

~]# route add default gw 192.168.37.2

删除:route del

命令格式:route del [-net|-host] target [gw Gw] [netmask Nm] [[dev] If]

示例:

删除刚刚添加的主机路由的ip:# route del -host 192.168.1.3

删除刚刚添加的网络路由的ip:# route del -net 192.168.0.0 netmask 255.255.255.0 或 # route del -net 192.168.0.0/24

DNS服务器指定

修改配置文件/etc/resolv.conf,三个DNS地址

  • nameserver DNS_SERVER_IP1
  • nameserver DNS_SERVER_IP2
  • nameserver DNS_SERVER_IP3

正解:FQDN(完全限定域名 www.xxx.com)-->IP:从域名 --> ip

  • # dig -t A FQDN(解析测试)
  • # host -t A FQDN

反解:IP-->FQDN: ip --> 域名

  • # dig -x IP
  • # host -t PTR IP

netstat命令:

网络状态查看命令

显示网络连接:

命令格式:netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]

  • -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接口名(大写i,没有空格):显示指定接口网络状态的统计数据

二、ip系列

命令格式:ip [ OPTIONS ]  { link | addr | route } { COMMAND | help }

ip link - network device configuration

set(改变设备属性)

  • dev IFACE { up | down }:激活或禁用指定接口;

show(显示设备属性)

  • [dev IFACE]:查看指定接口信息
  • [up]:仅显示处于激活状态的接口

ip address - protocol address management

ip addr { add | del } IFADDR(ip地址/掩码位数) dev IFACE(接口名):为网卡配置多个ip地址

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

添加

删除

ip addr show :显示所有设备的信息

  • [dev DEVICE]:显示指定设备的信息
  • [label PATTERN]:只显示指定别名的设备信息
  • [primary | secondary]:主地址和辅助地址

ip addr flush :删除所有地址

使用格式同show

ip route - routing table management

添加路由(ip route add)

命令格式:ip route add TARGET via GW dev IFACE src SOURCE_IP

TARGET:

  • 主机路由:IP
  • 网络路由:NETWORK/MASK

示例:ip route add 192.168.1.3(主机路由) via 192.168.37.2 dev eth0

示例:ip route add 192.168.0.0/24(网络路由) via 192.168.37.2 dev eth0

添加网关:ip route add defalt via GW dev IFACE

删除路由:ip route del TARGET

显示路由:ip route show

清除路由:ip route flush

  • [dev IFACE]:删除指定借口的所有路由
  • [via PREFIX]:删除指定网关的所有路由

ss命令:

网络状态查看工具(取代netstat命令的,网络繁忙时比netstat牛逼)

格式:ss [OPTION]... [FILTER]

选项:

  • -t: tcp协议相关
  • -u: udp协议相关
  • -w: 裸套接字相关
  • -x:unix sock相关
  • -l: listen状态的连接
  • -a: 所有
  • -n: 数字格式
  • -p: 相关的程序及PID
  • -e: 扩展的信息
  • -m:内存用量
  • -o:计时器信息
    • 常用组合:
    • -tan, -tanl, -tanlp, -uan

FILTER := [ state TCP-STATE ] [ EXPRESSION ]:指明TCP的状态/表达式

TCP的常见状态(tcp有限状态集)

  • LISTEN: 监听
  • ESTABLISHED:已建立的连接
  • FIN_WAIT_1:等待
  • FIN_WAIT_2
  • SYN_SENT:SYN已发送
  • SYN_RECV:SYN已接收
  • CLOSED:已关闭

EXPRESSION(表达式):

  • dport = 源端口
  • sport = 目标端口
    • 示例:’( dport = :ssh or sport = :ssh )’

三、修改配置文件

注:修改配置文件不会立即生效,要重启网络服务(service network restart)

IP、MASK、GW、DNS相关配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE(接口名称)

  • DEVICE:此配置文件应用到的设备;
  • HWADDR:对应的设备的MAC地址;
  • BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static, none, bootp;
  • NM_CONTROLLED:NM是NetworkManager的简写;此网卡是否接受NM控制;CentOS6建议为“no”;
  • ONBOOT:在系统引导时是否激活此设备;
  • TYPE:接口类型;常见有的Ethernet, Bridge;
  • UUID:设备的惟一标识;
  • IPADDR:指明IP地址;
  • NETMASK:子网掩码;
  • GATEWAY: 默认网关;
  • DNS1:第一个DNS服务器指向;
  • DNS2:第二个DNS服务器指向;
  • USERCTL:普通用户是否可控制此设备;
  • PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向信息直接覆盖至/etc/resolv.conf文件中;

路由相关的配置文件:/etc/sysconfig/network-scripts/route-IFACE(路由名称,默认不存在)

两种风格:

(1) TARGET(目标ip/mask位数) via GW

(2) 每三行定义一条路由

ADDRESS#=TARGET(目标ip)

NETMASK#=mask(子网掩码)

GATEWAY#=GW(默认网关)

小Tips:

给网卡配置多地址:

ifconfig:ifconfig IFACE_ALIAS(别名) ip/mask位数 up(激活)
ip:ip addr add 
配置文件:cp一份改一改就好了

注意:网关别名不能使用dhcp协议引导;

注:也可以使用可视化界面修改:system-config-network-tui,这个也要重启网络服务方能生效;

配置当前主机的主机名:

(1)hostname [HOSTNAME]

(2)修改配置文件/etc/sysconfig/network中:HOSTNAME=xxx

网络接口识别并命名相关的udev配置文件:

/etc/udev/rules.d/70-persistent-net.rules

卸载网卡驱动:

  • modprobe -r e1000

装载网卡驱动:

  • modprobe e1000

四、centos7的网络属性配置

传统命名:以太网eth[0,1,2,...], wlan[0,1,2,...]

centos7改为了,前后一致的可预测功能的接口命名机制;

(1) 网卡命名机制

systemd对网络设备的命名方式:

(a) 如果Firmware或BIOS为主板上集成的设备提供的索引信息可用,且可预测则根据此索引进行命名,例如eno1;

(b) 如果Firmware或BIOS为PCI-E扩展槽所提供的索引信息可用,且可预测,则根据此索引进行命名,例如ens1;

(c) 如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如enp2s0;

(d) 如果用户显式启动,也可根据MAC地址进行命名,enx2387a1dc56;

(e) 上述均不可用时,则使用传统命名机制;

上述命名机制中,有的需要biosdevname程序的参与;

(2) 名称组成格式

  • en: ethernet以太网接口
  • wl: wlan无线局域网设备
  • ww: wwan无线广域网设备

名称类型:

  • o<index>: 集成设备的设备索引号;
  • s<slot>: 扩展槽的索引号;
  • x<MAC>: 基于MAC地址的命名;
  • p<bus>s<slot>: enp2s1

(3)网卡设备的命名过程:
第一步:
udev, 辅助工具程序/lib/udev/rename_device, /usr/lib/udev/rules.d/60-net.rules

第二步:
biosdevname 会根据/usr/lib/udev/rules.d/71-biosdevname.rules

第三步:
通过检测网络接口设备,根据/usr/lib/udev/rules.d/75-net-description中的ID_NET_NAME_ONBOARD, ID_NET_NAME_SLOT, ID_NET_NAME_PATH

(4)回归传统命名方法:

(a) 编辑/etc/default/grub配置文件

GRUB_CMDLINE_LINUX="net.ifnames=0 rhgb quiet"

(b) 为grub2生成其配置文件

grub2-mkconfig -o /etc/grub2.cfg

(c) 重启系统

(5)地址配置工具:nmcli

命令格式:nmcli [ OPTIONS ] OBJECT { COMMAND | help }

device - show and manage network interfaces(管理网络接口,相当于ip的link)

  • # nmcli d show ens33:查看某个接口的当前状态信息

connection - start, stop, and manage network connections(启动停止配置网络连接,相当于ip的addr)

  • # nmcli c show:显示当前所有可用状态的连接
  • # nmcli connection modify IFACE [+|-]setting.property value:修改IP地址等属性
    • setting.property:
    • ipv4.addresses
    • ipv4.gateway
    • ipv4.dns1
    • ipv4.method
    • manual

示例:

# nmcli c modify ens33 +ipv4.addresses 172.16.100.12/16:为接口添加ip地址

# nmcli c modify ens33 -ipv4.addresses 172.16.100.12/16:为接口删除ip地址

# nmcli c modify ens33 +ipv4.dns 8.8.8.8:为端口添加DNS服务器

以上操作都需要手动禁用接口再启用才会生效:# nmcli c down ens33;nmcli c up ens33

# nmcli d show ens33:查看接口信息

nmcli的图形文本编辑菜单:nmtui

主机名称配置工具:

hostnamectl status(交互式)

hostnamectl set-hostname + 主机名

五、网络客户端工具:

# lftp:

命令格式:lftp [-p port] [-u user[,password]] SERVER

子命令:

  • get:获取一个
  • mget:获取一堆
  • ls
  • help

# lftpget URL:获取某个(ftp的)URL的文件到指定位置

# ftp

# wget:

非交互式文件下载工具

命令格式:wget [option]... [URL]...

  • -q: 静默模式
  • -c: 续传
  • -O: 保存位置
  • --limit-rates=: 指定传输速率
原文地址:https://www.cnblogs.com/x54256/p/8167398.html