由于在传统的共享以太网中,所有的节点共享传输介质,所以同一时间只能允许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=: 指定传输速率