网络基础
网络通信
1.什么是网络?
网络=物质连接介质+互联网通信协议(计算机界的英语)
互联网协议的功能:定义计算机如何连接internet,以及接入internet的计算机通信的标准。
为什么要有网络?
打破地域的限制,提高传输数据的效率
单机架构
client--------网络-------server #(cs架构)
cs架构:客户端--->服务端
browser-------网络-------server #(bs架构)
bs架构:客户端---->浏览器---->服务端
OSI七层协议
互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层
每层运行常见的物理设备
OSI七层协议数据传输的封包与解包过程
五层模型
`1、物理层 基于电信号 01010101`
光缆/网线:传输信号,连接两台计算机,如果有一根网线能够从中国连接到美国,那么只要一根网线就够了
物理层由来:两个孤立的计算机之间想要一起玩耍,就必须接入internet,言外之意就是两个计算机之间必须完成组网
物理层的功能:主要是基于电器特性发送高低电压信号,高电压对应的数字1,低电压对应的数字为0
`2、数据链路层(数据帧):ethernet以太网协议`
以太网的数据称之为数据帧,分为head+data两部分 ,其中head长度固定
凡是接入互联网必须有一块网卡,网卡上有一个mac地址,全世界唯一(12位16进制数)
以太网 协议的通信采用的是广播的通信方式=》计算机通信靠吼
`3、网络层(数据包):ARP协议获得mac地址 IP协议---》(head+data:head放源IP地址 ) IP地址的通信=》路由协议 目标IP地址`(和子网掩码连用 子网用来标识所在的局域网)
IPv4地址 IP地址的范围0.0.0.0~255.255.255.255(32位2进制)
让不同局域网下面的计算机连接在一起
叫做IP地址,只知道mac地址,无法连接其他局域网内的计算机,因为mac地址只被交换机识别,然后不同局域网的交换机不一样,所以现在定义一个新的地址表明是哪个局域网,通过路由器
在数据链路层的基础上再包一层IP头
已经知道了淘宝的ip和mac地址,你会把自己的mac地址和ip地址一起发送出去,路由会接收淘宝的ip地址,路由发送淘宝的ip地址和mac地址,自带mac地址(路由器的)和ip地址(路由器的ip地址)
mac地址(局域网)+ip地址+子网(互联网)就能找到世界上独一无二的电脑
`4、传输层(数据段):tcp(三次握手四次挥手)/udp 查询 时间同步`
组织网络带来的数据,
端口号,找到一个固定的应用程序,一个端口号对应一个应用程序
mac地址 + ip + port(端口号)——>独一无二的应用程序
数据0和1发给应用程序,TCP和UDP协议
head+data head放的源端口 目标端口
(端口范围0~65535 0~1024系统保留)
`5、应用层:http ftp 可以自定义协议`
#socket(套接字) 是对传输层以下的封装(开发应用直接调用)
#交换机处理2层的设备 局域网(mac地址仅限于局域网)
#交换机自带mac地址学习功能:有mac地址表
#路由器(3层的设备) (网关相当于国家的海关)一头连接交换机 一头连接外面的光纤设备(两个地址一个对内 一个对外走 ---》经过路由转发的不是osi协议 而是基于路由对外IP的路由协议)
ARP协议(两类)把IP解析成mac地址
arp协议功能:广播的方式发送数据包,获取目标主机的mac地址
协议工作方式:每台主机ip都是已知的
#局域网内(内网)
前提:在一个局域网vlan内,靠的是目标MAC地址找到对方在哪里,即只要目标MAC地址是谁,数据包就送给谁
172.16.10.11/24 172.16.10.10/24
ARP协议(地址解析协议)---》子网一样的情况下 获取目标mac地址
1.自己的MAC地址 FF-FF-FF-FF-FF-FF 自己的IP地址 目标IP地址 数据部分
所有计算机都收到ARP包
碰到 FF-FF-FF-FF-FF-FF 大家都知道对方想要自己的mac地址
如果目标IP是自己的IP 就返回mac地址
发真正的数据
自己的mac地址 目标的mac地址 自己的IP地址 目标IP地址 数据部分
#总结:如果两台计算机在同一局域网内,IP地址作用只是用来获取对方mac地址的 而mac地址才是真正用来通信的
#跨局域网(外网)
ARP协议---》获取网关mac 尝试拿到网关的mac地址
1.自己的MAC地址 FF-FF-FF-FF-FF-FF 自己的IP地址 网关(电脑上配的有)IP地址 数据部分
所有计算机都收到ARP包
碰到 FF-FF-FF-FF-FF-FF 大家都知道对方想要自己的mac地址
如果目标IP是自己的IP 就返回mac地址(返回网关mac地址)
发真正的数据
自己的mac地址 网关的mac地址 自己的IP地址 目标IP地址 数据部分
IP地址+mac地址=》全世界唯一一台计算机
ARP会将IP地址转换成mac地址(要么是局域网的一台计算机的mac地址,要么就是网关的mac地址 不能是公网计算机的mac地址)
--------------------------------------------------------------
#局域网流程:
局域网内通信 一层一层封装好--》交换机--》解到2层--》包上2的mac地址--》发到局域网
#出局域网流程:
数据包(开始时二进制位)到达路由器(路由器就是网关)以后解到数据层在解到网络层--》把原IP转换到对外的IP地址--》封路由协议--》转成2进制往外发
LVS--四层 nginx--七层
#为什么要封装很多层 不直接发给对方?
因为在互联网的世界里要经过很多设备层层转发
例如:主机172.16.10.10/24访问172.16.10.11/24
一:首先通过ip地址和子网掩码区分出自己所处的子网
场景 | 数据包地址 |
---|---|
同一子网 | 目标主机mac,目标主机ip |
不同子网 | 网关mac,目标主机ip |
二:分析172.16.10.10/24与172.16.10.11/24处于同一网络(如果不是同一网络,那么下表中目标ip为172.16.10.1,通过arp获取的是网关的mac)
源mac | 目标mac | 源ip | 目标ip | 数据部分 | |
---|---|---|---|---|---|
发送端主机 | 发送端mac | FF:FF:FF:FF:FF:FF | 172.16.10.10/24 | 172.16.10.11/24 | 数据 |
三:这个包会以广播的方式在发送端所处的自网内传输,所有主机接收后拆开包,发现目标ip为自己的,就响应,返回自己的mac
tcp协议(三次握手、四次挥手)
tcp建立虚拟双相通路 可靠:等到对方回复确认才会把自己发的内容删除 如果没回复 就在发一次
三次握手建立连接:
- 客户端会像服务端发起一个请求,如下载视频,会有一个syn报头
- 服务端会接收到客户端的请求,然后会响应客户端,并且把syn报头改装好后又返回客户端,会有ack的报头
- 客户端开始进入连接状态,再发一条请求,请求带上ACK给服务端,让服务端也进入连接状态
四次挥手关闭连接:
- 客户端就会发送请求带上FIN报头给服务端说我够了,要断开连接
- 服务端接收到客户端的请求后,返回一个带有ACK报头的请求说确认了,1、FIN报头并没有返回,2、但是服务端此时可能还有数据传输
- 服务端数据传输结束之后,服务端又会发送一次报头FIN的请求,告诉客户端,我发完了,结束吧.
- 所以必须得有第四次确认,客户端向服务端进行一次确认,我收到了,否则第二次传入的数据有丢失的风险.
UDP协议:传输数据不需要建连接,不可靠是指发数据不需要等回复,传输速度快。基于端口工作
不需要先启动服务端,时间同步,查询dns
socket套接字
socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信
封装了传输层以及传输层以下的协议
应用程序但凡想要向外发送数据,只需要调用socket的功能即可
dhcp
dhcp也是套接字软件 电脑里自带客户端 ,服务端集成在路由器上 (IP地址池配置到路由器上面)
上网的过程:就是上传下载的过程,浏览器是客户端软件 ,通过浏览器发请求给服务端,把数据下载到本地在浏览器中打印出来
但凡想上网 要有什么?
- 本机的IP地址
- 本机子网掩码
- 网关的IP地址 网关子网掩码
- DNS的IP地址
获取这四要素分两种方式
1.静态获取
即手动配置
电脑一开机只有网卡上的mac地址 是怎么得到dhcp ?
2.动态获取
通过dhcp获取
以太网头 | ip头 | udp头 | dhcp数据包 |
---|---|---|---|
封dhcp数据包-----》传输层(udp 协议规定发出方是68端口,接收方是67端口 )-----》自己特殊IP地址0.0.0.0
接收方的IP地址设为255.255.255.255-----》自己mac地址 目标mac地址FF-FF-FF-FF-FF-FF -----》
交换机广播 局域网都收到包 只有路由器dhcp读出内容 解析IP地址 解析到端口知道给那个软件
(dhcp) 从IP地址池里取出IP 地址 返回
于是就知道了自己的IP地址、子网掩码、网关地址、DNS服务器等等参数
端口号
说明以下服务对应的端口号 或者端口对应的服务 | |
---|---|
dhcp | 客户端 68 服务端 67 |
dns | 53 |
ssh(linux) | 22 |
telnet | 23 |
http | 80 |
https | 443 |
ftp | 20 21 |
RDP(windows) | 3389 |
mysql | 3306 |
redis | 6379 |
zabbix | 10050 10051 |
elasticsearch | 9200 9300 |
rsync | 873 |
rpcbind | 111 |
DNS域名解析服务
作用:在互联网中,用www.xxx.com替代IP地址,方便记忆。dns的出现,就是把IP解析成域名,登陆的时候直接输入域名就可以了
dns查询走udp协议 (递归 迭代)最大传输512字节
dns主从同步走的是tcp协议
DNS查询顺序----/etc/hosts文件
DNS查询顺序:浏览器DNS缓存-》操作系统DNC缓存-》本地hosts文件(C:\Windows\System32\drivers\etc\hosts)-》ISP 本地dns服务-》递归or迭代查询
#vim /etc/hosts
#例如 : 1.1.1.1 www.baidu.com
注:本地的/etc/hosts 文件充当dns解析功能
做集群(左边是IP 右边是域名)写到本地/etc/hosts文件里面 优先级最高
把文件远程传输各个机器scp、rsync 这样每台机器都用hosts文件作为dns解析 配置就可以用域名了
某一台机器的IP变了 不用修改配置文件---》因为大家用的是域名 把hosts文件更新一下 给每台机器再发一份
中小型公司
域名
www.baidu.com.
www 主机名
baidu 二级域名
com 顶级域名
. 根域名
全国有13台根dns服务器(数据都是一样的) 只存顶级域名地址 顶级存二级 二级存主机名
好处:分担了数据量 数据同步问题解决了
#集群的思想:
为什么要用集群?
软件开发性能高 操作系统性能高 硬件性能有极限
垂直扩展:加内存 加固态硬盘 有极限
横向扩展:找一群差不多性能的机器,做成集群,10台计算机10个cpu 横向扩展无极限
#集群的优点:效率提升 防止单点故障
网络通信的流程与数据包发送
-
uri :统一资源标识符(一种概念,标识全世界所有资源的地址)
-
url : 统一资源定位符,https:// home.cnblogs.com/u/linhaifeng/
https://(应用层协议) home.cnblogs.com:80(域名和端口) /u/linhaifeng/(软件管理的虚拟路径) 软件端应用软件规定:客户端要下载的数据都在/var/www/html文件夹内找,/var/www/html就是软件管理的根目录 /u/linhaifeng/ ====> /var/www/html/u/linhaifeng/
CRC校验
网卡丢包问题
- 缓冲区的大小是有限的,如果我们缓冲区接收数据包的速度比发送数据包的速度慢,那么我们可能会出现丢包问题,那么我们可以通过调整缓存的大小来解决网卡丢包的问题。
- 查看网卡是否丢包的命令
查看网卡调整缓冲区的最大值和当前缓冲区的值
调整网卡缓冲区大小的命令
封装好数据帧丢给网卡之后,加上crc校验才能发 送给对方
对方网卡驱动程序会校验crc值 保证数据完整 然后把crc丢掉 送给网卡缓冲区
网卡:全双工--》可以互相发数据 电话
半双工--》只能单独发数据 对讲机
# ethtool ens33
[root@lianshouji ~]# ethtool -S ens33 | grep crc 查看网卡丢包情况
rx_crc_errors: 0
RX errors 0 dropped 0 overruns 0 frame 0
收包得错误数 丢包 溢出
# ethtool -g ens33 查看缓冲区大小
ethtool -S eth0 | grep crc
rx_crc_errors: 0
# ethtool -G ens33 2048 修改缓冲区大小
ethtool -G eth0 rx 2048 接收端的缓存区调整为2048
ethtool -G eth0 tx 2048 发送端的缓存区调整为2048
======================================================================================
IP地址十进制转换成二进制计算器
IP : 172.16.10.2
python
>>> bin(172)
'0b10101100'
>>> bin(16)
'0b10000'
>>> bin(10)
'0b1010'
>>> bin(2)
'0b10'
换算成二进制等于:10101100.00010000.00001010.00000010
子网掩码
IP:
10101100.00010000.00001010.00000010 ==> IP地址 : 172.16.10.2/24
11111111.11111111.11111111.00000000 ==> 子网掩码 : 255.255.255.0
10101100.00010000.00001010 ==> 网络地址 : 172.16.10.0
00000010 ==> 主机号: 2
- 子网掩码 : 用来标识一个IP地址的网络号个数。从左到右,属于网络号,子网掩码标记为1;属于主机号,子网掩码标记为0。
- 网络地址的计算方式,IP地址与子网掩码都转换成二进制,然后按位运算。
- 网络号主要是用来标识不同的局域网,网络号不同,代表不在同一个局域网。
IP:
10101100.00010000.00001010.00000010 ==> IP地址 : 172.16.10.2/16
11111111.11111111.00000000.00000000 ==> 子网掩码 : 255.255.0.0
10101100.00010000 ==> 网络地址 : 172.16.0.0
00000010 ==> 主机号: 2
- 结论 : 同一个IP地址,子网掩码不一样,按位运算可以得到不同的网络地址,那就说明两个IP地址不在同一个局域网,也就直接决定了两台计算机的通信方式。
ip地址的结构和分类
网络地址占位越少,代表可以划分的局域网越少,那么主机号的占位就越多。例如A类的网络地址,主机只有126个。
一般中小型企业,都是用的C类的IP地址,可以划分多个局域网,每一个局域网都可以配一个IP地址,但是每一个局域网内包含的主机个数较少。
C类的IP地址(192.168.4.125/24),一般网络地址为192.168.4.0,网关地址为192.168.4.1,本网段的广播地址为:192.168.4.255。真正可以用的IP地址只有253个。
特殊的IP地址:255.255.255.255(全网广播地址),127.0.0.1(本地回环地址)。
ip中特殊的ip地址
1>.网络地址:表示网络本身,具有正常的网络号部分,而主机号部分全部为0的ip地址称之为网络地址,如 172.16.45.0就是一个B类网络地址
2>.广播地址:用于局域网中进行广播所有的设备的广播地址,具有正常的网络号部分,对于主机号部分全为1(即255)的ip 地址称之为广播地址,如172.16.45.255就是一个B类的网络地址
3>.有限广播地址:指的是32位全位1(即255.255.255.255)的ip地址,用于本网广播
4>.回送地址:网络地址不能以十进制的127作为开头,在地址中数字127保留给系统作为诊断用,称为欢送地址,如 127.0.0.1用于回路测试
5>.私有地址:只能在局域网内使用,不能在internet上使用的ip地址称为私有ip地址,私有ip地址有:
10.0.0.0~10.255.255.255 -------表示一个A类地址
172.16.0.0~172.31.255.255 -------表示16个B类地址
192.168.0.0~192.168.255.255 -------表示256个C类地址
#注意!:这些地址是不会被Internet分配的,因此它们在Internet上也从来不会被路由,虽然它们不能直接和Internet网连接,但仍旧可以被用来和Internet通讯,我们可以根据需要来选用适当的地址类,在内部局域网中大胆地将这些地址当作公用IP地址一样地使用。在Internet上,那些不需要与Internet通讯的设备,如打印机、可管理集线器等也可以使用这些地址,以节省IP地址资源
6>.0.0.0.0:指已经不是真正意义上的ip地址,它表示的是所有不清楚主机和目的网络,这里的不清楚指的是在本机路由 表里没有特定条目指明如何到达
#网站就是一个软件 web应用程序
255.255.255.255 : 全网广播地址
127.0.0.1 : 本地回环地址,一般用于测试,客户端和服务端会用不同的端口号进行连接,通过这样的方式进行测试可以先排除网络问题。
公网IP与私网IP,客户端在访问服务端的时候,只能访问到服务端的公网IP。公网IP在公网中是独一无二的,服务端的公网IP与私网IP存在一个映射关系,一个公网IP对应一个私网IP,客户端可以通过公网IP找到服务器的私网IP。(我们在服务端是看不见公网IP地址的)
0.0.0.0 : 不是真正意义上的IP地址。我们在部署服务的时候,服务端部署的IP地址应该监听0.0.0.0(默认子网掩码为/24)。任何客户端只要能够跟我的网络连通,都可以直接访问到我的服务端IP地址。如果我们使用的是阿里云进行部署,我们在服务端部署的IP为0.0.0.0,那么阿里云服务器会自动帮我们绑定一个公网IP。
子网划分
什么是子网划分?
-
通过子网掩码,网络号占用主机号,把同一个网段的IP地址划分成不同的局域网。
-
为什么要有子网划分?
优点 :缩小广播域,提升数据传输效率
减少IP地址的浪费
压缩主机个数 做集群不压缩 还要横向扩展
子网划分运算
IP:
11000000.00010000.00001010.10001011 ==> IP地址 : 192.16.10.139/24 # /24代表子网掩码连续24个1
11111111.11111111.11111111.00000000 ==> 子网掩码换 : 255.255.255.0
11000000.00010000.00001010 ==> 网络地址 : 192.16.10.0
10001011 ==> 主机号: 139
IP:
11000000.00010000.00001010.10001011 ==> IP地址 : 192.16.10.139/25 # /25代表子网掩码连续25个1
11111111.11111111.11111111.10000000 ==> 子网掩码 : 255.255.255.128
11000000.00010000.00001010.10000000 ==> 网络地址 : 192.16.10.128
10001011 ==> 主机号: 139
结论:两台IP地址一样的计算机,子网掩码不一样,并不在同一个局域网内。
- 正常情况下,C类子网掩码默认为 /24,不考虑网关的情况下,除去网络地址和广播地址。我们一共可以划分出254个IP地址。
我们把子网掩码换成 /25个,测试一下,IP地址是如何划分的。
192.168.10.1/25
......
192.169.10.255/25
11000000.10101001.00001010.00000001 IP地址:192.168.10.1/25
11111111.11111111.11111111.10000000 子网掩码:255.255.255.128
11000000.10101001.00001010.00000000 网络地址:192.168.10.0
....
11000000.10101001.00001010.01111111 IP地址:192.168.10.127/25
11111111.11111111.11111111.10000000 子网掩码:255.255.255.128
11000000.10101001.00001010.00000000 网络地址:192.168.10.0
- 除去子网地址和广播地址。主机位在1-127之间的IP地址,网络地址为192.168.10.0
11000000.10101001.00001010.10000000 IP地址:192.168.10.128/25
11111111.11111111.11111111.10000000 子网掩码:255.255.255.128
11000000.10101001.00001010.10000000 网络地址:192.168.10.1
...
11000000.10101001.00001010.11111110 IP地址:192.168.10.254/25
11111111.11111111.11111111.10000000 子网掩码:255.255.255.128
11000000.10101001.00001010.10000000 网络地址:192.168.10.1
- 除去子网地址和广播地址。主机位在128-254之间IP地址,网络地址为192.168.10.1
- 我们通过以上运算,可以发现,同一个网段的IP地址被子网掩码划分成了2个不同的网络地址。
- 也是说子网划分技术,就是通过把主机位借给网络位的方式,把IP地址划分成了不同的局域网。
注意
我们通过子网划分技术把IP地址进行划分之后,一般情况下,一个网段的最小的IP地址默认为网络地址,最大的IP地址默认为广播地址。
如上所示,我们第一次划分的时候,并没有使用192.168.10.0和192.168.10.255进行划分。
主机位在128-254之间IP地址,默认的网络地址为192.168.10.128,广播地址为128.168.10.254。**划分多个
子网的算法
- 我们用网络位占用3个主机位做验证
192.168.10.1/27
......
192.169.10.255/27
11000000.10101001.00001010.000 00000 IP地址:192.168.10.0/27
11111111.11111111.11111111.111 00000 子网掩码:255.255.255.224
11000000.10101001.00001010.000 00000 网络地址:192.168.10.0
......
11000000.10101001.00001010.000 11111 IP地址:192.168.10.31/27
11111111.11111111.11111111.111 00000 子网掩码:255.255.255.224
11000000.10101001.00001010.000 00000 网络地址:192.168.10.0
我们发现子网掩码是固定的,IP地址的前24位都是固定的,所以我们只需要对比IP地址的25,26,27这三位的网络地址就可以了。
假设网络位占用3个主机位,一共可以分多少个可用网段呢?
# 二进制算法: 比如 11 111==>再加一个二进制位为100 000
11000000.10101001.00001010.000 00000 192.168.10.0 ~ 192.168.10.31 整个网段子网地址 (一般情况下会保留)
# 一般情况下,会保留下来当作网关地址,广播地址,还有网络地址
子网地址 广播地址
11000000.10101001.00001010.001 00000 192.168.10.32 ~ 192.168.10.63 可用IP的主机号为33~62
11000000.10101001.00001010.010 00000 192.168.10.64 ~ 192.168.10.95 可用IP的主机号为65~94
11000000.10101001.00001010.011 00000 192.168.10.96 ~ 192.168.10.127 可用IP的主机号为97~126
11000000.10101001.00001010.100 00000 192.168.10.128 ~ 192.168.10.159 可用IP的主机号为129~158
11000000.10101001.00001010.101 00000 192.168.10.160 ~ 192.168.10.195 可用IP的主机号为161~194
11000000.10101001.00001010.110 00000 192.168.10.196 ~ 192.168.10.223 可用IP的主机号为197~222
11000000.10101001.00001010.111 00000 192.168.10.224 ~ 192.168.10.255 整个网段的广播地址 (一般情况下会保留)
# 一般情况下,会保留下来当作网关地址,广播地址,还有网络地址
常用的c类子网划
我们整理了一下C类网络中,网络位占用不同的主机位个数,分别可以划分多少个子网,每个子网的主机个数。
子网划分案列
#列:给C类网络211.168.10.0划分5个子网
2**2-2<5<2**3-2所以需要3位网络号,主机号为8-3=5
子网掩码为255.255.255.224
每个子网可容纳2**5-2=30台主机
子网划分与vlan关系
子网划分完毕后,链接在同一台交换机上的不同子网的计算机,站在三层的角度属于不同的局域网,但是他们都是连接在同一台交互机上,站在二层的角度,就是同一个局域网,说白了一个数据包的广播还是会广播到该交互机所有的端口,所以,子网划分通常与vlan配合使用,减少数据延迟,提高数据传输的效率
vlan的作用
- 针对一个物理交换机可以划分出多个虚拟的局域网,可以隔离广播域。
- vlan是二层的隔离,IP的子网是三层的隔离, 二层的隔离应该与三层的隔离保持一致
- 802.1Q协议规定了Vlan的格式,会在数据帧中源mac与目标mac之后加4个Byte的Vlan tag(Vlan标签)一个物理交换机划分出多个局域网,每个局域网都会有一个12bits 位的来表示vlanID(0-4095)。
- VLAN ID 最大值为4096,但是有效值范围是 1 - 4094。也就是说,vlan最多可以把一个交换机划分成4094个局域网
VLAN 的交换机的端口分为两类:
-
Access 口 : 主要用来连接个人计算机的(一个access口只能划分给一个vlan)
1. 收到计算机发来数据包时会加上4byte的vlan tag(标记) 2. 发送包给计算机时,会去掉4byte的vlan tag(标记)
2. Trunk 口 : 主要用来进行交换机与交换机之间互联(一个trunk口可以同时划分给多个vlan)
1. 发送包时带着4byte的vlan tag(标记)
2. 收到包时带着4byte的vlan tag(标记)
VLAN 的类型
1. 基于端口的 VLAN(数据包不动)
连接两个交换机的同一个 VLAN 中的两个计算机需要通信的话,需要在两个交换机之间连两根线:
一根从 交换机 A 端口4 到 交换机 B 端口 4 (VLAN 1)
一根从交换机 A 端口8 到 交换机 B 端口 8 (VLAN 2)
1) 交换机接收到计算机传输的数据时,交换机先封装vlan编号,确认同一个vlan的计算机端口有哪些。(VLAN 在交换机端口上 ,不在个人电脑上)
2)端口上有VLAN标记, 进行广播发送数据的时候,交换机去掉vlan编号,直接以广播的形式进行数据包的发送。
2.Tagged VLANs(改动了数据包)
两个交换机上的端口8 支持 VLAN 1 和 VLAN 2, 因此一根线就可以了实现跨交换机的同VLAN 内的计算机互相通信
1) 交换机接收到计算机传输的数据时,交换机先封装vlan编号,确认同一个vlan的计算机端口有哪些。
2) 进行广播发送数据的时候,通过 交换机A的8号端口再将数据传输给 交换机B的8号端口,发送给相匹配的vlan编号端口(发送到计算机之前会先拆除对应的vlan编号,计算机是无法识别vlan编号的)。
3) 交换机 A的8号端口和交换机 B的8号端口,同属于vlan1和vlan2,也就是说无论是vlan1的数据包还是vlan2的数据包都会经过这连个Trunk口进行数据传递。
#### vlan的缺点
VLAN 使用 12-bit 的 VLAN ID,所以 VLAN 的第一个不足之处就是它最多只支持 4096 个 VLAN 网络(当然这还要除去几个预留的),对于大型数据中心的来说,这个数量是远远不够的。
VLAN 是基于 L2 的,所以很难跨越 L2 的边界,在很大程度上限制了网络的灵活性。
VLAN 操作需手工介入较多,这对于管理成千上万台机器的管理员来说是难以接受的
配置网卡命名的方式
修改网卡配置文件名称
cd /etc/sysconfig/network-scripts/
mv ifcfg-ens33 ifcfg-eth0
修改网卡配置文件设备名称
sed -i "#ens33#eth0#g" ifcfg-etho
GRUB添加kernel参数
vim /etc/sysconfig/grub
GRUB_CMDLINE_LINUX="rhgb quiet 'net.ifnames=0 biosdevname=0'"
加载到引导分区
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统生效
reboot
#ifconfig -eth1 up激活网卡
3.配置网卡命名的方式
修改网卡配置文件名称
⛅为了方便先进到目录,改成你想要的名字
[root@shawn ~]#cd /etc/sysconfig/network-scripts/
[root@shawn network-scripts]#mv ifcfg-ens32 ifcfg-eth100
修改网卡配置文件
⛅直接使用"sed"查找后替换掉
[root@shawn network-scripts]#sed -i "s/ens32/eth100/g" ifcfg-eth100
⛅或者进配置文件进行修改
[root@shawn network-scripts]#vim ifcfg-eth100
GRUB添加 kernel 参数
⛅进入内核参数文件
[root@shawn network-scripts]#vim /etc/sysconfig/grub
⛅修改这一行,"100"
GRUB_CMDLINE_LINUX="rhgb quiet 'net.ifnames=100 biosdevname=100'"
⛅加载到引导分区,生成菜单
[root@shawn network-scripts]#grub2-mkconfig -o /boot/grub2/grub.cfg
⛅重启系统生效,再查看是否成功
[root@shawn network-scripts]#reboot
[root@shawn ~]#ifconfig
eth100: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #发现已经改变
基本网络配置
[root@egon ~]# lspci |grep -i eth 查看网卡
[root@egon ~]# mii-tool eth0 查看网线
eth0:negotiated 1000baseT-FD flow-control,link ok
#ifconfig命令需要装 yum install -y net-tools
#ifconfig eth1 down 停止某一块网卡
#ifconfig -a 查看激活没激活的网卡(激活的前面有up)
#systemctl restart network 重启网络服务
#systemctl stop network 关闭网络服务
#systemctl status network 查看网络状态
#hostnamecl set-hostname xxx 永久设置主机名
# yum install -y bash-completion tab补全键
#vim /etc/resolv.conf DNS解析文件(网关配置文件)
#vim /etc/fstab 开机挂载
#netstat -nutlp 查看端口信息
#ifconfig eth0 查看某一块网卡信息
#ifup eth0 重新开启
#ifdown eth0 关闭网卡 -----更改了配置文件
#ifcofig eth1 mtu 2000 修改最大输出单元
#本地名称解析文件 vim /etc/hosts
while true;echo 123;echo 456;echo 789;done 循环语句
#网卡配置文件信息
vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet 类型=以太网协议
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none 网卡获取IP地址的方式:static(手动配置指定IP) dhcp(动态获取IP) none(根据其他选项决定是动态还是静态)
NM_CONTROLLED=no 如果NetworkManager服务启用,该网卡配置文件也不受该服务管理。通常我们会直接关闭
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=86ad5d60-7c01-4ee5-a7aa-1957e64335a1
DEVICE=eth0
ONBOOT=yes 网络服务启动的时候,网卡是否被激活
IPADDR=192.168.80.100 IP地址
PREFIX=24 子网掩码
GATEWAY=192.168.80.2 网关IP地址
PEERDNS=yes 网卡配置文件的DNS信息是否同步到/etc/resolv.conf
DNS1=114.114.114.114 指定DNS服务器IP
NM_CONTROLLED=no 如果NetworkManager服务启用,该网卡配置文件也不受该服务管理。通常我们会直接关闭
systemctl stop NetworkMangaer 关闭NetworkMangaer服务
systemctl disable NetworkMangaer 设置NetworkMangaer服务为开机不启动
#ifconfig 的详细信息
UP(激活状态) BROADCAST(支持广播) RUNNING(正在运行) MULTICAST(支持多播)
ether 00:0c:29:ca:a8:27(网卡的mac地址) txqueuelen 1000(网卡的传输队列为1000个包)
RX packets 1087(开机之后累积收了多少个包) bytes 85710 (83.7 KiB)(收的包总共多少个字节和大小)
errors 0(错误的包)
dropped 0(丢弃的包(crc校验))
overruns 0(溢出的包(缓冲区))
;和&&区别
ls;aaaaaa;pwd ;多个命令一起运行,一个命令执行完成不管会不会报错,都会运行下一个命令
# anaconda-ks.cfg
# -bash: aaaaaa: command not found
# /root
ls && aaaaaa && pwd &&多个命令一起运行,前面一个命令运行完,如果没有报错,继续运行下一个命令,报错即停止
# anaconda-ks.cfg
# -bash: aaaaaa: command not found
什么是广播域的隔离
- 三层隔离:ip地址与子网掩码运算得到网络地址不一样,即网段不一样,这就是三层隔离
- 二层隔离:两台计算机的网线只要接在不同的vlan里(一个vlan就是一个广播域)里,就是二层隔离
二层隔离应该与三层隔离保持一致
如果不一致会有什么问题?
会出现三层是隔离的,但是数据包发到了交换机之后,因其是二层设备
所以直接基于二层就开始广播,这就导致了一些不必要的广播包
计算机做路由转发
交换指的是网络访问, 几台计算机连在同一个交换机上, 配置同一个网段的不同 IP 就可以直接通信了(这不不谈及三层交换机)
一台linux主机如何才能被当成路由器去用,必须具备三个前提
- 1、必须开启路由转发功能
- 2、对方必须把自己当成网关(把网关指向我)
- 3、该linux主机必须有对应的路由转发条目
1.当数据通过网卡CRC校验进入网卡缓存,操作系统产生硬件中断送到内核空间,做路由决策,目标地址是本机(有IP有端口,分析到3层)就送到用户空间,送给应用程序。应用程序处理好往外发数据,通知操作系统,调用内核往外发,先送入内核空间,再次做路由决策,会匹配本机的路由策略,再往外发
[root@vmnet1 ~]# route -n
Destination Gateway Genmask Flags Metric Ref Use Iface
目标地址 网关 子网掩码 经过的设备数(跳数) 端口
1.1.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
2.当数据通过网卡CRC校验进入网卡缓存,操作系统产生硬件中断送到内核空间,做路由决策,发现数据不是给本机的,直接从内核层转发出去,前提是要先开启linux内核的路由转发功能,默认是没有开启的
[root@vmnet1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward 临时开启
"/etc/sysctl.conf"
[root@vmnet1 ~]# vim "/etc/sysctl.d/*.conf 写配置文件 永久开启
net.ipv4.ip_forward = 0
[root@vmnet1 ~]# sysctl -p 立即生效
[root@vmnet1 ~]# sysctl -a | grep ip_forward 查看是否开启了转发功能
不在一个网段也能ping通接收数据,一切取决于路由策略
路由的优先级:
主机范围越小, 越精确, 优先级越高 (而决定主机范围的就是子网掩码,子网掩码越大越精确)
所以掩码越长, 越精确, 优先级越高
1. 主机路由 #最高
2. 网络路由 #第二
3. 默认路由 #最低
主机路由>网络路由>默认路由
路由分为三种
-
1、主机路由:子网掩码为32位,直接把范围缩小到最小,就一个地址(精确到某一台主机)
添加 [root@vmnet1 ~]# route add -host 172.16.13.11/32 dev eth0 删除 [root@vmnet1 ~]# route del -host 172.16.13.11/32
-
2、网络路由:子网掩码不足32位,所包含的地址是一个范围,子网掩码越大容纳的范围越小 (精确某一网段的主机)
添加 [root@vmnet1 ~]# route add -net 172.16.11.0/24 dev eth0 删除 [root@vmnet1 ~]# route del -net 172.16.11.0/24
-
3、默认路由:目标地址为0.0.0.0/0,所包含的范围是最大的
添加 [root@vmnet1 ~]# route add default dev eth0 删除 [root@vmnet1 ~]# route del default
指定网关,让网关帮我们做后续的转发,不指定则在局域网内发送
route add -host 172.16.13.11/32 gw 192.168.15.2 dev eth0
route add -net 172.16.11.0/24 gw 192.168.15.2 dev eth0
route add default gw 192.168.15.2 dev eth0
路由配置命令(临时)
route 命令
常用命令及选项
route [add / del] [-host / -net / default] [ip地址/及掩码] [gw] [dev]
add / del 添加或删除路由条目
-host 主机路由
-net 网络路由
default 默认路由
gw 指定下一跳
dev 强制将路由条目关联到指定接口, 一般内核会自动判断
route -n 查看路由表
Flags 列所代表的的含义
U (route is up)开启
H (target is a host) 是一个主机路由
G (user gateway) 设置了下一跳
IP地址是属于内核的(不仅如此,整个tcp/ip协议栈都属于内核,包括端口号) 只要能和其中一个地址通信,就能和另一个地址通信,而不需要开启数据包转发功能
实验
根据图片拓扑结构,依次在虚拟机1中ping通
2.2.2.2
2.2.2.3
3.3.3.3
3.3.3.4
4.4.4.3
环境准备
#创建虚拟交换机
打开虚拟网络编辑器,添加4个仅主机模式
#创建4个虚拟机,虚拟机1添加一个仅主机网卡,其余两个
#配置好网络
#个人编写的小脚本,更改起来快一点
#!bin/bash
#baimo
#配置虚拟机网卡与关闭服务
cat >/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=$1
NETMASK=255.255.255.0
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
EOF
cat >/etc/sysconfig/network-scripts/ifcfg-eth1<<EOF
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=$2
NETMASK=255.255.255.0
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
NM_CONTROLLED="no"
EOF
systemctl restart network
setenforce=0
iptables -F
ping 2.2.2.2
#查看路由条目
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
#添加2.2.2.0/24条目并查看
[root@test1 ~]# route add -net 2.2.2.0/24 dev eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
#测试
[root@test1 ~]# ping 2.2.2.2
PING 2.2.2.2 (2.2.2.2) 56(84) bytes of data.
64 bytes from 2.2.2.2: icmp_seq=1 ttl=64 time=0.885 ms
64 bytes from 2.2.2.2: icmp_seq=2 ttl=64 time=0.726 ms
64 bytes from 2.2.2.2: icmp_seq=3 ttl=64 time=0.610 ms
64 bytes from 2.2.2.2: icmp_seq=4 ttl=64 time=0.735 ms
ping 2.2.2.3
#查看虚拟机1与虚拟机2
route -n
#2.2.2.3需要将1.1.1.2当做网关再次转发,这是过去的路
#虚拟机1
[root@test1 ~]# route add -net 2.2.2.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
#开启路由功能并检测
#虚拟机2
[root@test1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@test1 ~]# cat /proc/sys/net/ipv4/ip_forward
1
#ping是一个发包和收包的相互过程,接下来是回去的路,也要将2.2.2.2当作网关转发
#虚拟机3
[root@test1 ~]# route add -net 1.1.1.0/24 gw 2.2.2.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 2.2.2.2 255.255.255.0 UG 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
#测试
[root@test1 ~]# ping 2.2.2.3
PING 2.2.2.3 (2.2.2.3) 56(84) bytes of data.
64 bytes from 2.2.2.3: icmp_seq=1 ttl=63 time=2.81 ms
64 bytes from 2.2.2.3: icmp_seq=2 ttl=63 time=1.14 ms
64 bytes from 2.2.2.3: icmp_seq=3 ttl=63 time=1.13 ms
64 bytes from 2.2.2.3: icmp_seq=4 ttl=63 time=1.15 ms
ping 3.3.3.3
#各虚拟机查看
route -n
#虚拟机1增加3.3.3.0条目并指定网关发送
[root@test1 ~]# route add -net 3.3.3.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
3.3.3.0 1.1.1.2 255.255.255.0 UG 0 0 0 eth0
#虚拟机2增加3.3.3.0条目发送
[root@test1 ~]# route add -net 3.3.3.0/24 dev eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
#虚拟机3增加一条回给1.1.1.0/24的条目,由eth0回去
#因为ping2.2.2.3的时候已经做过了,这里免
#测试
[root@test1 ~]# ping 3.3.3.3
PING 3.3.3.3 (3.3.3.3) 56(84) bytes of data.
64 bytes from 3.3.3.3: icmp_seq=1 ttl=63 time=1.91 ms
64 bytes from 3.3.3.3: icmp_seq=2 ttl=63 time=1.99 ms
64 bytes from 3.3.3.3: icmp_seq=3 ttl=63 time=1.45 ms
64 bytes from 3.3.3.3: icmp_seq=4 ttl=63 time=1.16 ms
ping 3.3.3.4
#查看各机的路由条目
route -n
#虚拟机1增加给3.3.3.0的条目
#由于ping3.3.3.3的时候增加了,这里免
#虚拟机2增加3.3.3.0/24条目,并指定网关2.2.2.3去转发
[root@test1 ~]# route add -net 3.3.3.0/24 gw 2.2.2.3 eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
3.3.3.0 2.2.2.3 255.255.255.0 UG 0 0 0 eth1
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
#开启虚拟机3的路由功能并检查
[root@test1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@test1 ~]# cat /proc/sys/net/ipv4/ip_forward
1
#测试
[root@test1 ~]# ping 3.3.3.4
PING 3.3.3.4 (3.3.3.4) 56(84) bytes of data.
64 bytes from 3.3.3.4: icmp_seq=1 ttl=64 time=1.00 ms
64 bytes from 3.3.3.4: icmp_seq=2 ttl=64 time=0.415 ms
64 bytes from 3.3.3.4: icmp_seq=3 ttl=64 time=0.510 ms
64 bytes from 3.3.3.4: icmp_seq=4 ttl=64 time=0.593 ms
ping 4.4.4.3
#查看各虚拟机
route -n
#虚拟机1增加4.4.4.0/24并指定1.1.1.2网关转发
[root@test1 ~]# route add -net 4.4.4.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 1.1.1.2 255.255.255.0 UG 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
3.3.3.0 1.1.1.2 255.255.255.0 UG 0 0 0 eth0
4.4.4.0 1.1.1.2 255.255.255.0 UG 0 0 0 eth0
#虚拟机2增加4.4.4.0/24并指定2.2.2.3网关转发
[root@test1 ~]# route add -net 4.4.4.0/24 gw 2.2.2.3 eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
3.3.3.0 2.2.2.3 255.255.255.0 UG 0 0 0 eth1
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
4.4.4.0 2.2.2.3 255.255.255.0 UG 0 0 0 eth1
#虚拟机3开启路由功能,由于ping3.3.3.4的时候开过,这里省略
#虚拟机3增加到4.4.4.0/24的条款
[root@test1 ~]# route add -net 4.4.4.0/24 eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 2.2.2.2 255.255.255.0 UG 0 0 0 eth0
2.2.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
4.4.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
#虚拟机4增加回1.1.1.0/24的条款,并指定3.3.3.3网关转发
[root@test1 ~]# route add -net 1.1.1.0/24 gw 3.3.3.3 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
1.1.1.0 3.3.3.3 255.255.255.0 UG 0 0 0 eth0
3.3.3.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
4.4.4.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1003 0 0 eth1
#虚拟机3回去也要指定去1.1.1.0的由2.2.2.2网关转发,由于上面做过,这里省略
#测试
[root@test1 ~]# ping 4.4.4.3
PING 4.4.4.3 (4.4.4.3) 56(84) bytes of data.
64 bytes from 4.4.4.3: icmp_seq=1 ttl=62 time=3.08 ms
64 bytes from 4.4.4.3: icmp_seq=2 ttl=62 time=1.60 ms
64 bytes from 4.4.4.3: icmp_seq=3 ttl=62 time=1.60 ms
64 bytes from 4.4.4.3: icmp_seq=4 ttl=62 time=1.70 ms