一. 基础知识
1. 网络的组成
-
组成部分:硬件、软件、协议
硬件主要由主机(也称端系统)、通信链路(如双绞线、光纤)、交换设备(如路由器、交换机等)和通信处理机(如网卡)等组成。软件主要包括各种实现资源共享的软件和方便用户使用的各种工具软件(如网络操作系统、邮件收发程序、FTP程序、聊天程序等)。软件部分多属于应用层。协议是计算机网络的核心,如同交通规则制约汽车驾驶一样,协议规定了网络传输数据时所遵循的规范。
-
工作方式:边缘部分、核心部分
边缘部分由所有连接到因特网上、供用户直接使用的主机组成,用来进行通信(如传输数据、音频或视频)和资源共享
核心部分由大量的网络和连接这些网络的路由器组成,它为边缘部分提供连通性和交换服务
2. OSI-7层协议
3. 五层协议
4.tcp/ip四层协议
5.三种协议对比
6.HTTP面试题
在浏览器里输入http://www.baidu.com回车到浏览器显示出网页的内容,背后发生了什么,在网络中是如何传输的?
概括:输入URL后,先找浏览器缓存,没有找host,没有就用dns递归查询本地域名服务器,本地域名服务器迭代查询根域名服务器,得到ip地址之后,3次握手建立tcp连接,之后服务器收到http请求,返回http响应,客户端加载,4次挥手断开连接
二. 物理层
物理层是计算机网络体系结构的底层,它是数据通信过程的基础,提供了网络通信的最基本的硬件和电气特性。
数据单元:比特 透明的传送比特流
1.网线
1.1 双绞线:是一种采用两根细铜线双向绞合在一起的传输线。常用于以太网中,包括Cat5、Cat5e、Cat6等规格。
1.2 同轴电缆:是一种采用导体和屏蔽层相互包裹的传输线。常用于有线电视、局域网等领域。
1.3 光纤:是一种采用光信号传输的传输线,具有速度快、距离远、抗干扰性好等优点,常用于长距离高速数据传输和互联网骨干网等领域。
2. 线序
网线线序EIA/TIA:
T568A:绿白线、绿线、橙白线、蓝线、蓝白线、橙线、棕白线、棕线
T568B:白橙、橙、白绿、蓝、白蓝、绿、白棕、棕 -->推荐
网线分类:
1.直通线 标准网线 2边的线序是一样 -->推荐
交换机与路由器,交换机与pc
2.交叉线: 一边是T568A 另外一边是T568B
交换机与交换机,路由器与pc
三. 数据链路层
1. 概述
数据链路层是工作在局域网中的,以帧为单位进行传输和处理数据。在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
2. 三个重要问题
2.1 封装成帧
将上层的数据包加上帧头帧尾实现在链路中的传输,其中帧头主要包括目的地址和源地址,帧尾主要包括校验码
2.2 透明传输
不管所传数据是什么样的比特组合,都应当能够在链路上传送;简单来说就是发送什么的是什么,最后接收到的就是什么内容
-
点对点传输(单播)->主机之间一对一的通讯模式
单工:两个数据站之间只能沿单一方向传输数据
半双工:两个数据站之间可以双向数据传输,但不能同时进行
双工(也称全双工):两个数据站之间可双向且同时进行数据传输
-
点对多传输
- 组播->主机之间一对一组的通讯模式
- 广播->主机之间一对所有的通讯模式
2.3 差错检测
定义:检测数据在传输过程中是否发生了比特差错
方法:奇偶检验,海明校验,CRC循环冗余检验
3. 媒体接入控制
如何协调多个发送和接收站点对一个共享传输媒体的占用
3.1 静态划分信道
- 频分复用FDM
- 时分复用TDM
- 波分复用WDM
- 码分复用CDM
3.2 动态划分信道
- CSMA/CD协议(载波监听多址接入/碰撞检测)
4. MAC地址
-
以太网地址(物理地址/MAC地址):用来识别一个以太网上的某个单独的设备或一组设备
-
MAC地址是嵌入到网卡芯片里的,一般情况下不需要配置,操作系统自动会获取到
-
48位的MAC地址是全球唯一的(第8位如果是1表示这个mac地址是一个组播地址,如果是0表示一个单播地址)
5.交换机
5.1 交换机作用
组建局域网,就是将多台电脑连接起来,形成一个局域网,互相之间可以通信
5.2 交换机的工作原理
交换机在接收到数据帧以后,首先、会记录数据帧中的源 MAC 地址和对应的接口到 MAC 表中,接着、会检查自己的 MAC 表中是否有数据帧中目标 MAC 地址的信息,如果有则会根据 MAC 表中记录的对应接口将数据帧发送出去 (也就是单播),如果没有,则会将该数据帧从非接受接口发送出去 (也就是广播,或者泛洪 Flood)。
-
学习:以太网交换机了解每一端口相连设备的 MAC 地址,并将地址同相应的端口映射起来存放在交换机缓存中的 MAC 地址表中(最开始为空)
mac地址表: 记录那台电脑连接的是哪个接口 电脑的mac地址和交换机的接口编号
mac地址表示存放在交换机的内存里的,交换机刚刚启动的时候,mac地址表里没有内容,是空的 -
转发:根据数据帧里的目的mac地址进行转发,如果mac地址在mac地址表里有,就单播转发,如果mac地址表里没有就广播
mac地址表里有就单播,没有就广播
广播就是交换机复制一份数据帧,每个接口都转发一份,进来的接口不发送 -
消除回路:当交换机包括一个冗余回路时,以太网交换机通过生成树协议避免回路的产生,同时允许存在后备路径。
5.3 思科交换机命令
Switch>enable 进入特权模式
Switch#configure terminal 进入全局配置模式
Switch(config)#interface fastethernet 0/1 进入接口模式
Switch(config)#interface vlan 1 进入vlan1接口
show mac-address-table 查看mac地址表
Switch(config)#ip routing 开启路由功能
Switch#show ip route 查看路由器里的路由表
Switch(config-if)#no switchport 启用接口称为路由口,就可以配置ip地址了
Switch(config-if)#no shutdown 激活网卡
5.4 arp协议
-
ARP(Address Resolution Protocol)即地址解析协议,我们已知ip地址通过ARP协议获取对方的MAC地址,PC机发送ARP协议包,通过交换机,到达目标IP地址的PC机,从而获取对方的MAC地址
-
数据包类型
-
请求报文(广播) arp request
-
响应报文(单播) arp reponse
-
-
arping 命令
arping IP地址 ->获取该IP地址的mac地址
-
ARP必须在同一个网段内,也就是说交互地址信息的PC机是在一个局域网内
ip地址是全球范围内使用的
mac地址其实就是在局域网里使用的–》arp广播,广播只能在交换机范围里扩散(传播),路由器不会转发广播包 -
查看所有的arp缓存表:arp -a 删除arp条目:arp -d 绑定IP到对应MAC:arp -s 查看IP是否冲突,IP对应的MAC地址: arping 192.186.78.1 指定从那个接口上发生arp广播:arping -I ens33 192.168.0.1
-
arp协议拓展
RARP协议即逆地址解析协议,通过MAC地址获得对方的IP地址;
DHCP协议,就是用来自动分配IP地址的,它分配地址的原理,就是根据RARP协议,将MAC地址转成IP地址。
-
arp欺骗(arp欺骗/arp攻击)
基于ARP协议的这一工作特性,黑客向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。
-
防范措施
安装arp防火墙(如火绒,电脑管家),pc机静态绑定正确的网关的mac地址
-
5.5 广播风暴
指在计算机网络中,由于网络中某些设备不断地发送广播数据包,导致网络中的所有设备都不断地接收和转发广播数据包,从而使网络性能急剧下降,甚至导致网络瘫痪的现象。
5.5 VLAN和Trunk
-
VALN
- VLAN虚拟局域网技术,它可以将一个物理网络划分成多个逻辑网络,从而提高网络的安全性和灵活性。
- 每个交换机里都有vlan,默认所有的接口都属于vlan1;一个vlan一个网段,相同vlan里的机器默认是可以通信的,不同vlan里的机器不能通信,如果需要通信需要经过路由器(三层交换机)进行转发
- vlan的好处:
1.隔离广播域
2.提升网络安全
-
Trunk中继链路
-
Trunk是一种用于连接不同交换机之间VLAN的特殊连接方式,它可以传输多个VLAN的数据,并将这些数据在传输过程中进行区分和隔离。
-
Trunk连接可以通过多种协议实现,其中最常用的是IEEE 802.1Q、ISL。
-
5.6 STP生成树协议
-
定义:防止交换机冗余链路产生的环路,用于确保以太网中无环路的逻辑拓扑结构,从而避免了广播风暴,大量占用交换机的资源
-
工作原理:任意一交换机中如果到达根网桥有二条或者二条以上的链路,生成树协议都根据算法把其中一条切断,仅保留一条,从而保证任意二个交换机之间只有一条单一的活动链路。
-
生成树协议是一种二层管理协议,它通过有选择性地阻塞网络冗余链路来达到消除二层环路地目的,同时具备链路备份功能。
四. 网络层
网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输;实现两个不同网络系统之间的数据透明传送,具体包括路由选择,拥塞控制和网际互连等
;负责在不同的网络之间(基于数据包的IP地址)尽力转发数据包,不负责丢包重传和接收顺序
。
- 网络层提供两种服务,分别是虚电路服务和数据报服务
- 虚电路服务主要在于通信,需要先建立连接,属于同一条虚电路的分组均按照同一路由转发,为可靠传输
- 数据报服务在于互联网,不需要先建立连接,每个分组独立寻找转发表进行转发,为不可靠传输
1.IP地址
在IPv4中IP地址由32位二进制数表示,分为四个8位字节,以点分开,十进制表示
在IPv6中IP地址由128位二进制数表示,分为八个16位字节,以冒号分隔的十六进制表示。
IP地址由网络部分(NETWORK)和主机部分(HOST)两部分组成
1.1 共有IP地址
A类:1~127 真正使用的范围:1~126
127开头的地址127.0.0.1,给本地回环地址使用了,主要用于测试tcp/ip协议 loopback --》任何一台电脑都有(windows、linux、mac os等)代表本地地址
B类: 128~191
C类: 192~223
D类: 224~239 属于组播地址
2层的组播: mac地址里的第8位为1的地址,交换机收到2层组播地址,会每个接口都转发
3层的组播:ip地址里的E类地址
E类:240~255保留的用于科学研究
127.0.0.1 是本地回环地址,只接受本地机器发起的连接请求。
0.0.0.0 代表本机上所有的 IP 地址,监听所有相应的网络请求。
1.2 私有IP地址
在一个局域网中,lan口使用的是私有IP,wan口是公有IP;私有IP不能在Internet上使用
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
NAT (Network Address Translation) 即网络地址转换,是一种在IPv4网络中实现内部网络与外部网络之间通信的技术;通过将内部网络中的私有IP地址转换为公网IP地址,实现内部设备与外部网络的通信。
1.3 子网掩码
子网掩码的作用:就是用来确定一个ip地址的网络部分(网段)
子网掩码和ip地址进行与运算可以得到ip地址的网段号(网络部分)
A、B、C类的网络默认子网掩码:
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
1.4 网关
gateway,又叫做网间连接器、协议转换器。网关(Gateway)就是一个网络连接到另一个网络的关口
-
只是一个概念,不是一个实质性的产品
-
不同网段的相互通信需要经过网关,相同网段不需要;本质上网关其实就是路由器的LAN口
-
既可以用于广域网互连,也可以用于局域网互连
-
网关地址即默认网关,如路由器、交换机等设备的IP地址;网关的ip地址,可以是有效ip地址段里的任意一个ip,但是我们一般会使用第1个ip或者最后一个ip地址,这是默认的规矩
-
路由器,三层交换机,防火墙都是一个网关设备
2.子网划分
网络部分向主机部分借位,借位后主机部分减少,容纳的主机数量就会减少
首先先确定主机位(2^n-2>=设备数),然后可以推出子网掩码进而划分
-
均匀划分
题目1:
计算172.64.125.178/26地址的子网地址和广播地址,子网掩码,整个子网有效的ip地址范围 提示:先算出网段号 + 子网容纳的主机数 —》ip地址段 和广播地址 子网掩码
题目2:
计算172.64.125.178/18 地址的子网地址和广播地址,子网掩码,整个子网有效的ip地址范围 -
不均匀划分
将192.168.120.0/24 划分出4个子网,一个子网需要容纳110台电脑,另外的一个子网容纳60,另外的2个子网容纳30台;写出每个子网的网段号 子网掩码,有效ip地址段,广播地址
-
案例题目
将10.0.0.0/24网段进行子网划分,分成一、二、三、四、五、六个部门,其中一、三、五部分别需要两个局域网,每个局域网各需10个可⽤IP地址,二、四、六部分别需要三个局域网,每个局域网各需5个IP地址
- 部门一:
- 需要两个局域网,每个局域网需要10个可用IP地址。
- 子网1:10.0.0.0/28
- 子网2:10.0.0.16/28 (开始网段都是2^n的倍数,n表示主机位)
- 部门二:
- 需要三个局域网,每个局域网需要5个可用IP地址。
- 子网3:10.0.0.32/29
- 子网4:10.0.0.40/29
- 子网5:10.0.0.48/29
- 部门三:
- 需要两个局域网,每个局域网需要10个可用IP地址。
- 子网6:10.0.0.64/28
- 子网7:10.0.0.80/28
- 部门四:
- 需要三个局域网,每个局域网需要5个可用IP地址。
- 子网8:10.0.0.96/29
- 子网9:10.0.0.104/29
- 子网10:10.0.0.112/29
- 部门五:
- 需要两个局域网,每个局域网需要10个可用IP地址。
- 子网11:10.0.0.128/28
- 子网12:10.0.0.144/28
- 部门六:
- 需要三个局域网,每个局域网需要5个可用IP地址。
- 子网13:10.0.0.160/29
- 子网14:10.0.0.168/29
- 子网15:10.0.0.176/29
- 部门一:
3.IP数据报的首部格式
优先级与服务类型,提供3层Qos(服务质量 Quality of Service)
TTL: 生命周期 time to live ip包可以在网络上生存多久
ip包每经过一个路由器ttl值就要减1,防止数据包一直在网络上传输,消耗网络带宽
路由器收到ttl值为0的数据包的时候,就会丢弃这个数据包
协议字段,用来标识封装的上层数据是UDP还是TCP,UDP是17,TCP是6
4.路由器 router
4.1 路由 route
从一个地方到另外一个地方,可能有很多条路,接下来我们需要选择最快最好的路,如何判断那条路好内,就需要很多的理由,根据合理的理由选择最好最快的路的设备–》路由器
4.2 路由表
路由器里有个表叫路由表,路由表里有目标网段,从路由器的那个接口送出去
路由表里的一条记录就是一个条目
如果在路由表里没有找到合适的路由条目,丢失数据,不进行转发
-
路由器中维护的路由条目的集合
-
路由器根据路由表做路径选择
Linux查看路由表
[root@lb2 ~]# ip route
windows里查看路由表
C:\Users\admin>route print
4.3 路由类型
1.直连路由: 直接连接的路由(同一个路由器上面) connected
1.1 给路由器的接口需要配置ip
1.2 接口链路需要up,接口需要激活
链路: up(起来了,连接上了,通了) shutdown(关闭)
非直连路由(不在同一个路由器上)
2.静态路由: 需要人(管理员)手工添加的 static,是单向的
适合于比较小的网络
不直连的网络,都需要添加
Router(config)#ip route 192.168.10.0 255.255.255.0 192.168.20.1
目标网段 目标网段的子网掩码 下一跳地址
下一跳地址:是对方路由器的接口的ip地址,对方的ip地址和自己的路由器接口的ip地址是相同网段
3.默认路由: 属于特殊的静态路由,在路由表找不到合适的路由的时候,就走默认路由
也是需要人配置的,在电脑里添加默认网关,其实就是添加一条默认路由
4.动态路由: 是路由器互相之间学习路由条目,自动在路由表里生成,不需要人去添加
适合于比较大的网络
内部网关协议 IGP
rip 度量标准:跳数 小型网络,最大15跳
ospf 度量标准:带宽,速度,时延 大型网络
外部网关协议 EGP
路由的优先级:
直连路由--->静态路由--->动态路由--->默认路由
如果没有默认路由,找不到合适的路由条目,路由器会丢失数据,不转发
4.4 Linux相关IP命令
ip add 查看ip地址
直连路由 ip address(可简写add) add 192.168.227.144/24 dev ens33
静态路由 ip route add 192.168.227.144/24 via 192.168.88.2
删除静态路由 ip route del 192.168.200.0/24 via 192.168.88.2
删除默认路由 ip route del default via 192.168.88.88
4.5 ping命令
-
选项
-s 数据包大小 size
-c 数量 count
-i 时间间隔 interval 默认1秒
-w 超时 deadline
发送四个包,中间间隔时间0.1秒 [root@localhost ~]# time 114.114.114.114 -c 5 -i 0.1 发送四个包,超时时间1秒 [root@localhost ~]# time 114.114.114.114 -c 5 -w 1
-
过程
1.A主机会拿B主机的ip地址和自己的子网掩码进行与运算得到网段号192.168.2.0
2.A主机会到自己的路由表里查询是否可以到达192.168.2.0 网段,发现有一条默认路由可以走,于是就选择走默认路由
0.0.0.0 0.0.0.0 192.168.1.1
192.168.1.03.查询默认默认的下一条地址(网关)的ip地址,然后就到arp缓存表里查询网关192.168.1.1的mac地址,如果有就直接使用,如果没有,就发arp广播
4.先封装ip包,源ip是192.168.1.2,目的ip是192.168.2.2
5.封装帧的时候,源mac地址使用自己的,目的mac使用网关的
6.非常巧妙的将数据送给了网关
4.6 ping不通的原因
- 请求超时(time out)
1.对方开启了防火墙,不允许icmp协议包通过
2.中间路由器丢弃了我们的ping包- 目标主机不可达(Destination Host Unreachable)
1.一般是ip地址没有人使用- 网络不可达(Network is Unreachable)
1.没有填写默认网关- 未知的名称或服务
1.没有填写dns服务器地址
4.7 tracert
路由追踪->追踪从自己的ip到百度的ip中间经过了多少个路由器
centos7/8
[root@localhost ~]# tracepath www.baidu.com
centos6
[root@localhost ~]# traceroute www.baidu.com
windows命令
C:\Users\admin>tracert www.baidu.com
5.tcpdump
5.1 理解
-
tcpdump 抓包工具->像警察一样蹲点守株待兔 dump导出
-
-i 指定监听网络接口 interface
理解为指定抓取那个网络接口(网卡)的数据包
5.2 关键字
-
类型的关键字
host: 主机
src: 源 source
dst: 目的地 destination
port: 端口
src: 源 source
dst: 目的地 destination
net: 网段
src: 源 source
dst: 目的地 destination -
数据类型的关键字:
包括host、port、net,例如host 192.168.1.1表示这是一台主机,net 192.168.0.0表示这是一个网络地址,port 22指明端口号是22,如果没有指明类型,则默认的类型是host。
- 数据传输方向的关键字:
包括src、dst、dst or src、dst and src,这些关键字指明了传输的方向,比如src 192.168.1.1说明数据包源地址是192.168.1.1,dst net 192.168.0.0指明目的网络地址是192.168.0.0,默认是监控主机对主机的src和dst,即默认监听本机和目标主机的所有数据。
- 协议关键字:
包括ip、arp、rarp、tcp、udp、icmp等, - 其他关键字:
运算类型的:or、and、not、!
or 或 :满足一个条件
and 与: 都要满足
not 取反(非)
! 取反(非)
6.ICMP协议
6.1 互联网控制报文协议
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
6.2 用途
- 用在主机和路由器之间传递控制消息->可以理解为用来探路的,用来侦查,如ping命令
- 协议号是 1
6.3 数据包
- icmp 请求包 icmp-echo-request
- icmp 响应包 icmp-echo-reply
6.4 攻击
攻击方式->ping死(失效!现在数据包太大已经不回复了)
很多的机器同时给某一台机器发送携带大量数据的ping包
消耗对方服务器的网络带宽和cpu,内存资源,导致服务器崩溃
7.管理网络
7.1 ip地址的配置
1.手工配置ip
2.dhcp动态获得
如何修改了配置文件,需要刷新服务,生效
提醒:网关和dns服务器一定要配置正确,不然后导致客户机获得错误的网关和dns会不能上网
7.2 NetworkManager和nmcli
-
NetworkManager 为系统提供检测和配置功能以便自动连接到网络的程序,是管理和监控网络设置的守护进程
- 查看状态:systemctl status NetworkManager
- 启动:systemctl start NetworkManager
- 重启:systemctl restart NetworkManager
- 关闭:systemctl stop NetworkManager
- 查看是否开机启动:systemctl is-enabled NetworkManager
- 开机启动:systemctl enable NetworkManager
- 禁止开机启动:systemctl disable NetworkManager
- **注意:**NetworkManager 中开头的 N 和中间的 M 必须大写。
-
nmcli 是NetworkManager系统中的管理工具
-
功能
1.激活和禁用网卡
2.查看/修改网络的IP地址,dns,网关
-
使用
查看网络是否启用:nmcli network 简写:nmcli n
[root@localhost ~]# nmcli network enabled
查看有哪些网络设备:nmcli device 简写:nmcli d
[root@localhost ~]# nmcli device DEVICE TYPE STATE CONNECTION ens34 ethernet 已连接 ens34 ens33 ethernet 已连接 ens33 lo loopback 未托管 --
查看哪些网络是连接在使用的:nmcli connection 简写:nmcli c
[root@localhost ~]# nmcli connection NAME UUID TYPE DEVICE ens34 94aea789-efb3-ef4c-81b0-e8b18ecc9797 ethernet ens34 ens33 c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33
开启网络连接:nmcli n on
关闭网络连接:nmcli n off
[root@localhost ~]# nmcli connection show 查看网卡信息 [root@localhost ~]# nmcli device status 查看网卡的状态
-
7.3 nslookup
-
nslookup命令用于查询域名的IP地址
格式: nslookup domain [dns-server]
如果没指定dns-server,用系统默认的dns服务器
[root@localhost ~]# nslookup www.baidu.com Server: 192.168.98.2 Address: 192.168.98.2#53 Non-authoritative answer: www.baidu.com canonical name = www.a.shifen.com. Name: www.a.shifen.com Address: 14.119.104.254 Name: www.a.shifen.com Address: 14.119.104.189
-
查询域名服务器
格式:nslookup -qt=type domain [dns-server]
[root@localhost ~]# nslookup -qt=mx baidu.com 8.8.8.8 *** Invalid option: qt=mx Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: baidu.com Address: 110.242.68.66 Name: baidu.com Address: 39.156.66.10
8.虚拟网卡的3种模式
桥接模式:虚拟机通过vmnet0网卡直接连接路由器,与物理机是对等地位
仅主机模式(Host Only):过vmnet1网卡连接,不能联网,只能Ping通虚拟机
NAT模式:虚拟机通过vmnet8网卡借助物理机进行路由器联网
8.1 桥接模式
通过vmnet0网卡直接连接到物理网络,其实就是虚拟机和真实机器在同一个局域网里,利用真实机器的网卡连接到真实的交换机上并且使用路由器的网关,虚拟机和真实机器在同一个网段,地位是平等的
-
物理网络:就是真实的网络
-
wlan: 代表无线网络 wireless LAN
-
network adapter :网络适配器(网卡)
8.2 NAT模式
虚拟机通过虚拟网络适配器连接在vmnet8网卡上面,由虚拟DHCP服务器分配私有ip,私有地址经过NAT设备转换为物理机的IP地址,共享主机的ip地址
-
虚拟机可以发送DHCP请求以动态获取到IP地址。在默认配置中,DHCP服务器分配192.168.x.128到192.168.x.254范围内的地址,其中192.168.x是对应的网段。预留192.168.x.3到192.168.x.127用作静态IP;IP地址192.168.x.1是为真实主机的虚拟适配器vmnet8网卡预留的,192.168.x.2是为虚拟NAT设备预留的,作为虚拟机的网关使用。
-
NAT模式网络上的虚拟DHCP服务器还会发出虚拟机正常运行所需的配置信息,这些信息包括默认网关和DNS服务器信息。在DHCP响应中,NAT设备通知虚拟机使用IP地址192.168.x.2作为默认网关和DNS服务器,意味着虚拟机的网关都是指向NAT设备。这种路由方式将导致所有发往外部网络的IP数据包和DNS请求先转发到NAT设备。
8.3 仅主机模式
仅主机模式(host only)网络连接是完全限制在主机内部的一种网络连接模式,物理机上有一快虚拟适配器VMnet1连接到VMnet1虚拟交换机,借助该虚拟适配器,虚拟机和主机系统进行通信。默认配置中,仅主机模式网络中的虚拟机无法连接到Internet;虚拟机只能和真实机器通信,处于一个封闭的网络里。
dhcp服务器给仅主机模式的虚拟机分配ip地址的时候,没有告诉虚拟机网关的ip,没有配置网关,导致虚拟机不能进行跨网段通信,只能和真实机器通信。
9.NAT
9.1 NAT的工作原理
Network Address Translation,网络地址转换->公网私网地址转换
1.nat功能,它将什么地址转换为什么地址?
公网私网地址转换
公网ip–》nat—》私网ip
私网ip–》nat–》公网ip
2.为什么需要nat功能?
因为ipv4地址不足,不能做到每个设备都有一个公网ip
3.NAT转换表(NAT映射表)
记录了公网和私网之间转换的条目,是在路由器的内存里
9.2 SNAT
-
linux系统里的概念
-
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源IP地址–>局域网里的用户出去上网 —》用户角度
家庭上网、公司上网–》电信只给一个公网ip -
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
-
MASQUERADE地址伪装
有着和SNAT相近的效果,二者不同的地方是SNAT是指定转发的ip地址;而MASQUERADE是指定转发的网卡
[root@scrouter ~]#iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens33 -j MASQUERADE 表示将192.168.99.0/24网段的数据包的报头的源IP地址都改为ens33网卡的ip地址0.0.0.0/0,然后发出。
9.3 DNAT
-
DNAT策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标IP地址–>互联网上的人访问局域网里的电脑 --》公司角度
公司内部的业务服务器发布到公网上,让别人访问 -
DNAT策略的典型应用环境
在Internet中发布位于企业局域网内的服务器
9.4 SNAT实验
-
步骤
1.准备一台局域网里的主机做客户机,配置好ip、子网掩码,网关,dns服务器地址
2.准备一台Linux主机做网关服务器;配置两个网络适配器,其中lan口使用ens33,可以是hostonly或者nat或者桥接,配置ip、子网掩码,另一个wan口使用桥接模式,配置好ip、子网掩码,网关,dns服务器地址
-
相关配置介绍
配置文件位置:/etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet # 网络类型 Ethernet 以太网 PROXY_METHOD=none # 代理方式 BROWSER_ONLY=no # 只是浏览器:否 BOOTPROTO=dhcp # boot 是启动 protocol 协议 启动网卡协议 获取网卡IP的方式(dhcp:动态主机配置协议;static:手动配置固定IP;none:手动配置固定IP) DEFROUTE=yes # 默认路由:是 IPV4_FAILURE_FATAL=no # 是否开启IPV4致命错误检测:否 IPV6INIT=yes # IPV6初始化: 是 IPV6_AUTOCONF=yes # IPV6是否自动配置:是 IPV6_DEFROUTE=yes # IPV6 默认路由:是 IPV6_FAILURE_FATAL=no # 是否开启IPV6致命错误检测:否 IPV6_ADDR_GEN_MODE=stable-privacy # IPV6地址生成模型 stable-privacy:一种生成IPV6的策略 NAME=ens33 # 网卡名称 UUID=65bba8c2-8842-414e-9d61-e1a9e52211e6 # 唯一标识码 DEVICE=ens33 # 网卡设备名称 ONBOOT=yes # 在开机或重启时是否启动网卡
-
具体操作
- 在linux客户机在仅主机模式下配置ip地址(此时XShell无法连接,需要将仅主机模式下vmnet0的网段改成和ip同网段)
[root@lb-1 ~]# cd /etc/sysconfig/network-scripts/ [root@lb-1 network-scripts]# vim ifcfg-ens33 BOOTPROTO="none" NAME="ens33" DEVICE="ens33" ONBOOT="yes" IPADDR1=192.168.88.131 # 手动配置静态ip地址 PREFIX=24 # 子网掩码 DNS1=114.114.114.114 # dns域名解析服务器 GATEWAY=192.168.88.254 # 默认网关 #刷新网络服务 [root@lb-1 network-scripts]# service network restart #查看dns服务器地址 [root@lb-1 network-scripts]# cat /etc/resolv.conf nameserver 114.114.114.114 #在客户机测试能否和网关通信 [root@lb-1 ~]# ping 192.168.99.254
-
linux网关服务器的配置
2.1 配置LAN口的ip地址和子网掩码,不配置网关和dns服务器地址[root@scrouter ~]# cd /etc/sysconfig/network-scripts/ [root@scrouter network-scripts]# vim ifcfg-ens33 BOOTPROTO="none" NAME="ens33" DEVICE="ens33" ONBOOT="yes" IPADDR=192.168.88.254 PREFIX=24 [root@scrouter network-scripts]# service network restart 刷新服务
2.2 配置WAN口的ip地址、子网掩码、网关和dns服务器地址
[root@scrouter network-scripts]# vim ifcfg-ens34 BOOTPROTO="none" NAME="ens34" DEVICE="ens34" ONBOOT="yes" IPADDR=192.168.1.88 PREFIX=24 GATEWAY=192.168.1.1 DNS1=114.114.114.114 #刷新网络服务 [root@scrouter network-scripts]# service network restart #查看路由表 [root@scrouter network-scripts]# ip route
-
在linux网关服务器上
3.1 开启网关主机的路由转发功能
临时开启路由功能 echo 1 >/proc/sys/net/ipv4/ip_forward root@scrouter ~]# echo 1 >/proc/sys/net/ipv4/ip_forward 永久开启路由功能 #修改内核参数文件/etc/sysctl.conf [root@scrouter ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #更新配置,开启路由功能 [root@scrouter ~]# sysctl -p net.ipv4.ip_forward = 1
3.2 添加使用SNAT策略的防火墙规则
[root@scrouter ~]#iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens34 -j SNAT --to-source 192.168.1.88
9.5 DNAT实验
-
步骤
-
在web服务器上进行的配置
局域网的Web服务器正确设置IP地址/子网掩码,默认网关地址 -
在linux网关服务器上进行的配置
2.1 开启网关的路由转发功能
2.2 添加使用DNAT策略的防火墙规则
[root@scrouter ~]#iptables -t nat -A PREROUTING -d 192.168.1.88 -i ens36 -p tcp --dport 80 -j DNAT --to-destination 192.168.99.21 -p tcp --dport 80 协议是tcp的,目的端口是80的 destination port
-
-
具体操作
1.对web服务器和linux网关服务器进行网络配置,同SNAT
2.使用脚本开启linux网关服务器的路由功能和DNAT功能
[root@scrouter ~]# cat snat_dnat.sh #!/bin/bash #清除filter和nat表里的防火墙规则 iptables -t filter -F iptables -t nat -F #开启路由功能 echo 1 >/proc/sys/net/ipv4/ip_forward #添加SNAT策略 iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o ens34 -j SNAT --to-source 192.168.31.88 #添加DNAT策略 iptables -t nat -A PREROUTING -d 192.168.31.88 -i ens34 -j DNAT --to-destination 192.168.88.131
3.在web服务器上操作,检查nginx服务是否运行,是否有防火墙开启
如果没有安装nginx,需要自己安装[root@web1 ~]# ps aux|grep nginx root 1124 0.0 0.0 46240 964 ? Ss 10:14 0:00 nginx: master process /usr/local/scnginx88/sbin/nginx tiankai 1125 0.0 0.0 46704 3556 ? S 10:14 0:00 nginx: worker process root 1533 0.0 0.0 112832 2392 pts/0 S+ 10:35 0:00 grep --color=auto nginx [root@web1 ~]# netstat -anplut|grep nginx tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1124/nginx: master [root@web1 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
10.iptables
10.1 查看内核版本
-
uname -r 查看内核版本
-
netfilter 位于Linux内核中的包过滤防火墙功能体系
netfilter是内核kernel的一个模块,对来自网卡的数据进行过滤->内核态
-
iptables 位于/sbin/iptables,是用来管理防火墙的命令工具
iptables是一个应用软件,和netfilter打交道,给netfilter传参,同时获取内核里的数据,展示给外面的用户看 ->用户态
-
firewalld也是一个应用软件,和netfilter打交道,给netfilter传参(底层是调用iptables),同时获取内核里的数据,展示给外面的用户看
人–>iptables或firewalld–>netfilter–>内核
-
10.2 4表5链
-
规则:对数据包进行过滤或处理
-
规则链–》集中存放规则的地方,防火墙规则/策略的集合
默认的5种规则链
PREROUTING链:在进行路由选择前处理数据包
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包 -
规则表->规则链的集合
具有某一类相似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的“表”中
默认的4个规则表
raw表:确定是否对该数据包进行状态跟踪
检查是新的数据,还是旧的数据 mangle表:为数据包设置标记
修改数据包,可以在数据包里插入内容 nat表:修改数据包中的源、目标IP地址或端口
snat
dnat
filter表:确定是否放行该数据包(过滤)–》进入皇宫的数据进行过滤 --》默认的表检查顺序:raw–》mangle–》nat–》filte
-
数据包过滤匹配流程
10.3 常见命令
-
设置规则内容
iptables [-t 表名] 管理选项 [链名] [匹配条件] [ -j 目标动作或跳转]
[root@localhost ~]#iptables -t filter -A INPUT -p tcp -j ACCEPT [root@localhost ~]#iptables -t filter -I INPUT -p udp -j ACCEPT [root@localhost ~]# iptables -I INPUT 3 -s 192.168.0.3 -p tcp --dport 80 -j ACCEPT [root@master iptables]# iptables -t filter -P INPUT DROP 设置filter表INPUT链的状态为DROP [root@localhost ~]#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 不指定表,默认filter表
- 不指定链名,默认该表里面的所有链
- iptables严格区分大小写
[root@master iptables]# iptables -I INPUT -p --icmp-type 8 -j DROP 禁止别人ping自己的服务器,自己可以ping别人 icmp: 请求报文 8 响应报文 0
-
查看规则列表
-
iptables -L 查看防火墙规则
[root@master iptables]# iptables -L --line -n 显示行号并以数字的形式显示ip来查看防火墙规则
-
-
清除规则
-
iptables -F 清除filter表里面的所有的链的规则,不指定表就是filter表
[root@BOBO ~]# iptables -t nat -F 清空nat表里面的规则
-
-
删除规则
iptables -t filter -D INPUT 1
-
规则保存iptables-save
#保存至/etc/sysconfig/iptables [root@master iptables]# iptables-save >/etc/sysconfig/iptables #导入保存的规则 [root@router nat]# iptables-restore </etc/sysconfig/iptables
11.无法上网
问题:用户反馈访问不了服务器,访问不了界面,上不了网
1.服务端
tcpdump抓包分析数据是否到达,查看nginx服务是否启动,检查防火墙是否阻拦,检查服务器网络是否正常,web页面是否正常开启
2.链路
检查电脑的物理链路是否正常联通
3.客户端
查看IP、网关,路由、DNS、防火墙设置是否配置正常
ping网关,如果能够ping通说明能够正常到达服务器;ping路由器,查看是否ping通;测试ping公网IP的通畅情况,测试DNS的通畅,ping对应IP;检查网络管理员的路由器
五.传输层
1. 特点
-
IP层提供点到点的连接,传输层提供端到端的连接
-
16位端口号的范围:0~65535
0~1023 给一些经典的端口—》很出名的服务已经使用了
1024~65535 自己可以自定义的端口 -
操作系统规定:
如果端口号被其他的软件使用了,不能分配给后面的程序
2. TCP
2.1 特点
-
TCP(Transmission Control Protocol) --》打电话
传输控制协议
可靠的、面向连接的协议
传输效率低 —》手续多,保障机制多 --》环节和流程复杂,导致效率低协议号是 6
-
举列
面向连接(三次握手、四次断开)
可靠性: (序列号、确认号、计时器-重传、保活、时间等待等)ssh使用的是TCP
2.2 TCP的封装格式
URG urgent 紧急位
ACK acknowledgement 确认位
PSH push 通知应用程序尽快处理数据,不要让数据在缓存里停留 --》上推功能
RST reset 重置位,重新连接
SYN sync 同步位,建立连接
FIN finish 终止位,请求断开连接
3. UDP
3.1 特点
-
UDP(User Datagram Protocol) --》发短信
用户数据报协议
不可靠的、无连接的服务
传输效率高协议号是 17
-
举例
QQ,dhcp,dns域名解析
3.2 UDP封装
4. 三次握手
-
讲解三次握手
1.讲解一个场景: 以访问web服务器为例
客户机1 —》nginx的web服务器2.讲解三次握手的3个数据包的发送,里面需要确定seq ack SYN ACK FIN
3.讲解每发送一个数据包,linux服务器里的状态 -
为什么是三次握手不是两次或者四次握手?
答案1
TCP 建立连接时,通过三次握手能防止历史连接的建立,能减少双方不必要的资源开销,能帮助双方同步初始化序列号。序列号能够保证数据包不重复、不丢弃和按序传输。
不使用「两次握手」和「四次握手」的原因:
- 「两次握手」:无法防止历史连接的建立,会造成双方资源的浪费,也无法可靠的同步双方序列号;
- 「四次握手」:三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。
答案2
记住服务器的资源宝贵不能浪费! 如果在断开连接后,第一次握手请求连接的包才到会使服务器打开连接,占用资源而且容易被恶意攻击!防止攻击的方法,缩短服务器等待时间。两次握手容易死锁。如果服务器的应答分组在传输中丢失,将不知道S建立什么样的序列号,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。
学习网址:4.1 TCP 三次握手与四次挥手面试题 | 小林coding (xiaolincoding.com)
5. 四次挥手
-
讲解四次挥手
1.讲解一个场景: 以访问web服务器为例
客户机1 —》nginx的web服务器2.讲解四次挥手的4个数据包的发送过程,里面需要确定seq ack SYN ACK FIN
3.讲解每发送一个数据包,2边主机的状态 -
为什么 TCP 挥手需要四次呢?而不是三次
服务器收到客户端的 FIN 报文时,内核会马上回一个 ACK 应答报文,但是服务端应用程序可能还有数据要发送,所以并不能马上发送 FIN 报文,而是将发送 FIN 报文的控制权交给服务端应用程序:
- 如果服务端应用程序有数据要发送的话,就发完数据后,才调用关闭连接的函数;
- 如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数,
从上面过程可知,**是否要发送第三次挥手的控制权不在内核,而是在被动关闭方的应用程序,因为应用程序可能还有数据要发送,由应用程序决定什么时候调用关闭连接的函数,当调用了关闭连接的函数,内核就会发送 FIN 报文了,**所以服务端的 ACK 和 FIN 一般都会分开发送。
-
为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
建立连接时,ACK和SYN可以放在一个报文里来发送。而关闭连接时,被动关闭方可能还需要发送一些数据后,再发送FIN报文表示同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。
6. 四个计数器
-
重传计时器
数据包丢失,再传递一次
-
坚持计时器
防止零窗口死锁
-
保活计时器
防止两个TCP之间的连接长时间的空闲
-
时间等待计时器
连接终止期间使用的,在发送了最后一个ACK后,不立即关闭连接,而是等待一段时间,保证能接收到重复的FIN数据段。
-
为什么TIME_WAIT状态还需要等2MSL(最长报文段寿命)后才能返回到CLOSED状态?
两个存在的理由:1、无法保证最后发送的ACK报文会一定被对方收到,所以需要重发可能丢失的ACK报文。2、关闭链接一段时间后可能会在相同的IP地址和端口建立新的连接,为了防止旧连接的重复分组在新连接已经终止后再现。2MSL足以让分组最多存活msl秒被丢弃。
7. 流控机制
7.1 流量控制
- 滑动窗口: 本机缓存里能接受多少数据
- 通过滑动窗口的值来进行流量控制 —》网络不堵的情况下
7.2 拥塞控制
-
拥塞窗口: 中间的传输网络的带宽的反馈
-
四大算法->拥塞控制主要是四个算法:
1)慢启动;
2)拥塞避免;
3)拥塞发生(快重传);
4)快速恢复
8. 监控网络情况
8.1 查看进程
-
ps aux
-a 显示所有用户的进程
-u 显示用户
-x 显示无控制终端的进程-o 用户定义的
ps aux 列出当前系统中正在运行的进程的详细信息 echo $$ 查看当前进程 kill 是杀死进程的命令 -9 强制杀死这个进程
-
top 查看进程实时动态信息工具(看内存)
查看进程状态、进程使用内存状况、进程使用CPU状况、进程PID等
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 21829 root 20 0 0 0 0 S 0.7 0.6 129:53.91 java 22559 root 20 0 158920 5628 4268 S 0.3 9.2 139:42.81 java 22598 root 20 0 162112 2208 1540 S 0.3 0.1 0:04.68 fluentd
8.2 查看端口
-
查看本机
-
netstat -anplut 可以查看本机开放了哪些端口
-
ss -anplut可以用来获取本机的socket统计信息
-
lsof 列出本机已经打开了哪些端口
[root@master ~]# lsof -i:22 [root@master ~]# lsof /root [root@master ~]# lsof -p 1
-
-
查看别机或局域网
- nc和nmap 探索一个机器或者整个局域网里机器开放了哪些端口
- telnet
8.3 查看软件
-
yum provides 联网到yum源查询命令是通过哪个软件安装的
-
rpm -qf 本地查询文件是通过哪个软件安装的
rpm redhat package managment 红帽公司出品的软件包管理软件
-q 查询 query
a all
六.应用层
1.DHCP协议
1.1 理解
-
DHCP协议 动态主机配置协议->应用层
-
作用:服务器给其他的电脑分配ip地址
无线路由器上就有dhcp服务,它可以给我们连接到无线路由器的电脑或者手机分配ip地址
1.2 分配过程
1.3 搭载dhcp服务器
步骤:
1.安装dhcp相关的软件包
[root@lb-1 ~]# yum install dhcp -y
2.修改配置文件,配置dhcp服务器
拷贝样例文件到/etc/dhcp目录
[root@lb-1 dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
修改配置文件
# have to hack syslog.conf to complete the redirection).
log-facility local7; #指定日志类型
# A slightly different configuration for an internal subnet.
subnet 192.168.98.0 netmask 255.255.255.0 { #指定分配ip地址的网段号和子网掩码
range 192.168.98.1 192.168.98.253; #指定地址池的范围,必须是上面的网段里的ip
option domain-name-servers 114.114.114.114; #指定dns服务器地址
option routers 192.168.98.254; #指定网关
default-lease-time 600; #最短租约时间600秒
max-lease-time 7200; #最长租约时间7200秒
}
dhcp服务器里的网关或者dns服务器配置错误,就会误导客户机上不了网
3.启动服务,调试
如何服务启动不起来,需要在接口上配置dhcp服务器里分配的网段的ip地址
然后再次启动dhcp服务
[root@lb-1 network-scripts]# service dhcpd start
Redirecting to /bin/systemctl start dhcpd.service
[root@lb-1 network-scripts]# ps aux|grep dhcpd 看进程
dhcpd 3890 0.0 0.2 105996 11964 ? Ss 11:37 0:00 /usr/sbin/dhcpd -f -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd --no-pid
root 3893 0.0 0.0 112832 2292 pts/3 S+ 11:37 0:00 grep --color=auto dhcpd
[root@lb-1 network-scripts]# netstat -anplut|grep dhcp 看端口
udp 0 0 0.0.0.0:67 0.0.0.0:* 3890/dhcpd
如何知道dhcp服务启动了呢?
1.看进程 dhcpd
2.看端口 67 udp
4.测试使用
再开一台linux服务器做客户机,网卡类型选择nat模式
需要在测试的客户机上使用dhcp动态获得ip地址
[root@web3 ~]# cd /etc/sysconfig/network-scripts/
[root@web3 network-scripts]# cat ifcfg-ens33
BOOTPROTO="dhcp" #指定动态获得ip地址 dhcp表示动态获得 none表示静态配置
NAME="ens33"
DEVICE="ens33" #网卡的名字
ONBOOT="yes" #开机激活网卡
[root@web3 network-scripts]#
[root@web3 network-scripts]# service network restart 刷新网卡服务,重新去获得ip地址
[root@web3 network-scripts]# ifdown ens33;ifup ens33 刷新网卡服务,重新去获得ip地址
正在确定 ens33 的 IP 信息... 完成。
2.DNS协议
DNS(Domain Name System)域名系统是一种名字服务器软件,它使用资源记录来将域名和IP地址(Internet Protocol)相互映射。一般来说,它能让你使用友好的名字来访问特定的计算机代替数字网址或是互联网协议地址。
-
缓存域名服务器 —》路由器 —》就是域名提篮子
也称为 唯高速缓存服务器
通过向其他域名服务器查询获得域名->IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度 -
主域名服务器 --》写和读
特定DNS区域的官方服务器,具有唯一性,权威性
负责维护该区域内所有域名->IP地址的映射记录 -
从域名服务器 —》提供查询服务
也称为 辅助域名服务器
其维护的 域名->IP地址记录 来源于主域名服务器
2.1 域名查询命令
-
host
[root@router ~]# host www.baidu.com
-
ping
-
dig
[root@router ~]# dig www.baidu.com
-
nslookup
[root@router ~]# nslookup www.baidu.com
2.2 域名介绍
-
.根域名->最后
-
顶级域名和二级域名
.com. 根域名下的com域名 commercial 商业的
.edu. 根域名下的edu域名 education 教育
.org. 根域名下的org域名 organization 非盈利组织
.gov. 政府 government
.mil 军队
.net 组织 network地域性质:
.cn. china
.hk. hongkong 香港
.ko korea
.jp Japan
.us 美国
.uk 英国
.au 澳大利亚
.tw 台湾
2.3 CDN和DNS攻击
2.3.1 CDN
- CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输得更快、更稳定。
- 分发的内容:图片和视频、音频等资源
- CDN的作用: 缓存,加速
- 目的:使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
- 通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
将用户的请求重新导向离用户最近的服务节点上—》如何实现?
2.3.2 DNS劫持
DNS劫持就是通过各种技术手段取得域名的解析控制权,进而修改域名的解析记录,将域名指向的服务器IP修改为受控制的IP地址,从而将用户引导至虚假网站,实现窃取用户信息,破坏正常服务的目的。
控制DNS服务器–》修改域名对应的ip–》修改DNS解析记录
2.3.3 DNS域名污染
网域服务器缓存污染(DNS cache pollution),又称域名服务器缓存投毒(DNS cache poisoning),是指一些刻意制造或无意中制造出来的域名服务器数据包,把域名指往不正确的IP地址。
2.4 资源记录
- DNS记录有:A记录(Address)、CNAME(Canonical Name)、MX(Mail Exchange)和TXT(Text)记录、NS(Name Server)记录。
- A记录是把域名映射到给定的IPv4地址,而AAAA记录把域名映射到给定的IPv6地址;它们是把域名映射到特定IP地址,它能让IP地址按照域名被访问。
- CNAME记录被用于将别名绑定到主机名上,域名解析到另外一个域名。CNAME能被用于消除多个域名的重复A记录->多个域名需要指向同一服务器IP,可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即CNAME)到A记录的域名上
- MX记录用于指明有哪些邮件服务器负责检索特定域名的电子邮件->指明哪些服务器负责发送邮件,可以知道某个域名里的邮件服务器的地址
- NS记录是域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析->dns服务器记录
- TXT记录可以保存附加的文本信息,这些文本信息可以在DNS服务器上查询,它经常被用来检验域名所有者的真实性。
2.5 DNS的解析过程
以www.baidu.com为例:
1.浏览器有缓存,查看浏览器缓存里是否有对应的dns域名解析或者本机里是否有dns缓存 --》浏览器缓存和客户机系统缓存,都可以缓存dns域名解析
2.操作系统缓存
3.客户机查看本机的hosts文件是否有对应的域名4.如果缓存里都没有,hosts文件里也没有对应的域名解析记录,如果都没有就向本地dns服务器(本地的路由器)发起域名解析的请求,本地路由器会在缓存里查找
5.本地域名服务器先查看缓存,如果缓存里有直接给用户,如果没有就会问根域名服务器要(或者向ISP DNS 服务器请求域名,
如果ISP DNS 服务器里也没有域名,然后会向域名根域名服务器发起请求)
6.根域名服务器获得了本地dns服务器需要查询的域名www.baidu.com后,再告诉本地dns域名服务器下一级的域名服务器.com.的域名服务器的ip地址,然后我们的本地dns服务器就会问.com服务器,查询www.baidu.com域名,.com服务器然后查询出baidu.com这个域名对应的dns服务器,然后告诉本地dns服务器,本地dns服务器又去访问baidu.com.域名服务器,查询www对应的ip,然后本机dns服务器获取到www.baidu.com对应的ip后,马上添加到缓存里,接着告诉客户机www.baidu.com域名的ip地址
7.客户机然后去访问www.baidu.com域名对应的ip地址的服务器
浏览器缓存–》操作系统缓存–》hosts文件—》本地的路由器缓存—》ISP DNS服务器–》根服务器
2.6 配置DNS服务器
2.6.1 相关知识
- 存放数据的目录: /var/named
- 主配置文件: /etc/named.conf
- 次要配置文件:/etc/named.rfc1912.zones
- named.ca 记录13台根域名服务器地址的文件
- 主进程名字:named
- 监听的端口: 53 tcp/udp
2.6.2 具体操作
1.安装软件bind
-
bind是历史非常悠久,而且性能非常好的dns域名系统的软件
-
bind-utils 提供了很多的dns域名查询的命令
[root@nameserver ~]# yum install bind* -y
2.关闭防火墙服务和selinux
[root@nameserver ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nameserver ~]# systemctl disable firewalld
root@nameserver ~]# iptables -L 查看iptables防火墙规则
[root@nameserver ~]# getenforce
Disabled
[root@nameserver ~]# setenforce 0 临时修改selinux策略
3.设置named服务开机启动,并且立马启动DNS服务
[root@nameserver ~]# systemctl enable named 设置named服务开机启动
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@nameserver ~]# systemctl start named 立马启动named进程
4.修改本机的dns解析文件,增加我们自己的dns服务器地址
[root@sanchuang ~]# vim /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114 #原来的
nameserver 127.0.0.1 #修改的
测试查询
[root@sanchuang ~]# nslookup
> www.qq.com
Server: 127.0.0.1
Address: 127.0.0.1#53
[root@sc-server named]# cd /var/named/ #进入dns服务的数据存放目录
[root@sc-server named]# cat named.ca #存放了根服务器信息的文件
5.修改dns配置文件,任意ip可以访问本机的53端口,并且允许dns解析
[root@nameserver ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; 修改
listen-on-v6 port 53 { any; }; 修改
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; 修改
[root@nameserver ~]# service named restart 重启named服务
Redirecting to /bin/systemctl restart named.service
3.http协议
超文本传输协议(http)是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
URL即统一资源定位符(Uniform Resource Locator),用来唯一地标识万维网中的某一个文档。URL由协议、主机和端口(默认为80)以及文件名三部分构成。
2.1 http工作原理
-
非持久性连接:短连接
-
持久性连接: 长连接 保持连接一段时间,例如:nginx 保持65秒,不会立马进行四次断开
keepalive_timeout 65;
-
无状态
HTTP 协议是无状态的,指的是协议对于事务处理没有记忆能力
-
有状态:
-
cookie和session
就是让web服务器知道你是老用户,你以前连接过或者登录过,不需要再次登录了
-
cookie
Cookie是浏览器提供的一种在本地存储数据的能力,让数据在客户端这边更持久化
-
session
(1)Session会为每一次会话分配一个Session对象
(2)同一个浏览器发起的多次请求,同属于一次会话(Session)
(3)首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
-
-
token
-
Token的引入
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,在这样的背景下,Token便应运而生。
-
Token的定义
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
-
使用Token的目的
Token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
-
-
Cookie和Token之间的区别
1.定义不同
Cookie是在客户端存储的小型文本文件,由服务器在HTTP响应头中设置并发送到客户端,客户端收到Cookie后会自动存储在本地。而Token是一段经过加密处理的字符串,通常存储在客户端的浏览器缓存、
2.安全性不同
Cookie存储在客户端,容易被窃取或篡改,因此需要对其内容进行加密或签名保护,以防止信息泄露或被篡改。而Token通常采用加密算法进行加密和签名,确保传输过程中的安全性,并防止信息被篡改。
3.可扩展性不同
Cookie和Token在可扩展性方面有很大的区别。Cookie只能存储有限的信息,例如用户ID、过期时间、域名等。而Token可以存储更多的信息,例如用户角色、权限、访问时间等,更加灵活,也更加适合大规模的应用程序。
4.跨域支持差异
Cookie有一个很明显的限制,即只能存储在设置Cookie的域名下,不能跨域使用。而Token可以跨域使用,适用于分布式系统或跨域API请求。
5.造成的服务器压力不同
由于Cookie存储在客户端,因此每次请求都需要将Cookie发送给服务器,服务器需要验证并响应请求,如果Cookie过多,服务器的压力会非常大;而Token存储在客户端,服务器只需要验证Token的有效性即可,可以大大减轻服务器的压力。
6.时效性不同
Cookie通常需要设置过期时间,过期后需要重新获取。而Token可以设置长时间的有效期,以减少频繁获取的次数,提高应用程序的性能。
-
-
HTTP1.0 与HTTP2.0的区别
1.多路复用
HTTP2.0 使用了多路复用技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
2.数据压缩
HTTP1.1不支持header数据压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。
3.服务器推送
HTTP2.0支持web server , 当我们请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常适合加载静态资源。
速度快,安全性高
2.2 报文结构
2.2.1 请求报文
1.请求方法: GET、POST、DELETE
get: 是客户机向web服务器发生请求的方法,在url携带数据,只能携带少量的数据,在http协议的头部里
post:是客户机向web服务器发生请求的方法, 在表单携带数据,可以携带更加多的数据,可以放到body里
delete: 客户机告诉web服务器,要求它去执行删除某个数据的操作
2.协议版本: http1.1 http2
3.首部字段:
- host: 代表我们请求的URL
- Connection: keep-alive
- user-agent: 代表我们客户机使用的浏览器是什么
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0 - Cookie: 存放在浏览器里的数据–》cookie里的数据
BAIDUID=76DC6BA708F2BD5191E65168A3C553BD:FG=1; BIDUPSID=76DC6BA708F2BD511A79D55B79C6C37E; PSTM=1690603364; BD_HOME=1; H_PS_PSSID=36550_39106_38942_38882_39114_39121_39038_38917_39088_26350_39041_39132_39100_39044_38952; BD_UPN=13314752; BA_HECTOR=8l0k8l84a50g2ka5052lag2a1ic93r81p; ZFY=rrEv8YkXUKHpto:As:BkrE07ZmNg7ICTBlN5OmsEQ33Fc:C - Accept-Encoding: 浏览器可以接受压缩格式的数据
gzip, deflate, br 对http协议里传输的数据进行压缩,减少时间,加快速度 - Accept: 浏览器能够接受的数据的类型
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8 - Referer: 从那个网站引流过来的 referer 引用页、推荐 --》从哪里跳转过来的
https://news.baidu.com/ - If-Modified-Since: 对网页内容的修改时间进行检查,如果没有修改
Wed, 19 Jul 2023 02:01:01 GMT
2.2.2 响应报文
1.http协议版本: 1.1 2.0
2.状态码
3xx 重定向
301 永久重定向(比如:访问http://www.sanchuangedu.cn/ 转发到https://www.sanchuangedu.cn/ ,从访问80端口转到443端口);302 临时重定向;304 not modified浏览器缓存里的内容和nginx服务器里的内容是一样的
4xx 客户错误
401 认证失败;403 权限拒绝;404网页不存在;405 方法不对;499 client has closed connection;
5xx 服务器错误
500 内部服务器错误;502 网关故障;503 Service Temporarily Unavailable;504 Gateway Time-out;
3.首部字段:
-
date: Sat, 29 Jul 2023 07:09:35 GMT 响应的时间
-
server: nginx/1.20.1 服务器端使用的web服务器软件的名字
BWS/1.1 --》baidu web server
Trpc httpd -
content-type: web服务器给客户机返回的内容的类型
image/gif 是图片 -
Content-Length:
23 -
Connection: 连接状态
keep-alive -
Last-Modified: web服务器里返回的网页上次修改的时间
Wed, 19 Jul 2023 02:01:01 GMT -
Status Code: 状态码
2.3 代理
-
正向代理
代理局域网里的机器上网 --》站在用户的角度 ,让用户访问网站快一点
-
反向代理
企业方做缓存和负载均衡使用 --》站在企业的角度(腾讯、美团、淘宝等)
nginx是一个web服务器软件也是一个反向代理软件
2.4 http和https的区别
安全性
HTTP协议以明文方式发送内容,不提供任何方式的数据加密。HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。https则是具有安全性的ssl加密传输协议。
连接方式
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。并且https协议需要到ca申请证书。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。