计网总结(简化实用版)

264 阅读1小时+

零.基础

1.OSI七层模型

应用层:定义应用之间通信的协议 --> 报文

传输层:加端口号 --> 段

网络层:加IP地址 --> 包

数据链路层:加Mac地址 ---> 帧

物理层:比特传输【物理层面的传输】

注:报文,段,包,帧只是数据在不同层的不同名字。

应用层

定义运用之间通信的数据格式

表示层

表示层来负责编码和解码,比如压缩加密。

会话层

管理和控制登录和会话状态。

传输层

一台主机可以有多个应用,仅仅通过IP地址指定主机是不够的,还需要加上端口号来指定不同应用进程

网络层

只需要MAC地址路由定位主机不方便,还需要IP地址确认方位。

IP地址与Mac地址差别:

简单来说,IP地址像是设备的“邮寄地址”,用来在网络上找到设备的位置;而MAC地址则像是设备的“身份证号码”,用来在局域网内唯一标识设备的身份。IP地址可以更改,而MAC地址是固定的。

数据链路层

MAC地址是设备的“身份证号码”,用来在局域网内唯一标识设备的身份,每台设备出生都有MAC地址。

数据链路层主要作用:

1.加Mac地址封装成帧 2.差错纠正。防止0变1,1变0。 3.流量控制。设备之间的传输能力和接收能力也是个问题,很可能一边喷水式传输,另一边夹缝式接收,因此需要流量控制来避免这种传输不对称。

物理层

信息的实际传输是比特,用电或光或电磁波等不同介质传输。

注:在各层中,我们会接触到各种协议。协议说白了就是传输和接收数据的格式。

2.TCP/IP四层模型与实际应用五层模型

【1】OSI七层模型过于复杂,划分层数太多太细,只是参考模型,并不适合现实运用。

我们可以将七层模型简化为TCP/IP 四层模型。

  1. 应用层
  2. 传输层
  3. 网络层
  4. 网络接口层

【2】实际应用采用五层模型。

OSI七层模型,TCP/IP四层模型,实际运用五层模型的大致对应关系:

3.计算机网络的性能评估

[1]速率--数据的传送速率

网络技术中的速率指的是数据的传送速率,也称为数据率 (data rate) 或比特率 (bit rate)。

速率的单位是 bit/s,或 kbit/s、Mbit/s、 Gbit/s等。

注意:当提到网络的速率时,往往指的是额定速率或标称速率,非实际运行速率。

比特(bit)来源于 binary digit,意思是一个“二进制数字”,因此一个比特就是二进制数字中的一个 1 或 0。

比特也是信息论中使用的信息量的单位。

[2]带宽--单位时间网络中某信道所能通过的最高数据率

带宽本来是指某个信号具有的频带宽度。

在计算机网络中,带宽用来表示网络中某通道传送数据的能力,因此网络带宽表示在单位时间内网络中某信道所能通过的“最高数据率”。

带宽的单位就是数据率的单位bit/s。

文件大小一般用B为单位,像KB,MB。

8bit/s=1B

[3]吞吐量--单位时间内通过某个网络的数据量

吞吐量 (throughput) 表示在单位时间内通过某个网络(或信道、接口)的数据量。

吞吐量受网络的带宽或网络的额定速率的限制。

[4]时延--数据从网络的一端到另一端的时间

时延是指数据从网络的一端传送到另一端所需的时间。时延也称为延迟或迟延。

总时延=发送时延+传播时延+处理时延+排队时延

(1)排队时延:等待发送的时间

在路由器确定了转发接口后,还要在输出队列中排队等待转发。这就产生了排队时延。

(2)发送时延:主机或路由器发送数据帧所需要的时间。也叫传输时延。

(3)传播时延:电磁波在信道中传播一定距离需要耗费的时间。

(4)处理时延:主机或路由器在收到分组时进行处理要花费的时间

例如分析分组的首部,从分组中提取数据部分,进行差错检验或查找转发表这些处理

补充: 像我们经常听到的CN2线路(CN2线路是中国电信推出的一种优质线路,又叫中国电信下一代承载网)主要采用了先进的MPLS技术和优化的海底光纤网络,来降低发送时延和传播时延。

[5]时延带宽积--传播时延*带宽

把传播时延和带宽相乘,就得到另一个很有用的度量:传播时延带宽积,即时延带宽积=传播时延*带宽

链路的时延带宽积又称为以比特为单位的链路长度。不难看出,管道中的比特数表示从发送端发出但尚未到达接收端的比特数。对于一条正在传送数据的链路,只有在代表链路的管道都充满比特时,链路才得到最充分的利用。

[6]往返时间RTT(又叫往返时延)

[7]利用率

分为信道利用率和网络利用率。

信道利用率指出某信道有百分之几的时间是被利用的(有数据通过)。

网络利用率则是全网络的信道利用率的加权平均值。

信道利用率并非越高越好。当某信道的利用率增大时,该信道引起的时延也就迅速增加。

一.物理层

物理层负责透明的比特流传输。

信息的实际传输是比特,用电或光或电磁波等不同介质传输。

物理层的作用是要尽可能地屏蔽掉不同传输媒体和通信手段的差异。

物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。

二.数据链路层

0.数据链路

把链路分为物理链路和逻辑链路。

物理链路:是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。 一条链路只是一条通路的一个组成部分。

逻辑链路/数据链路 (data link): 在物理线路的基础上,加上必要的通信协议[或者叫做规程]来控制这些数据的传输。 (1)现在最常用的方法是使用适配器(即网卡)来实现这些协议的硬件和软件。 (2)一般的适配器都包括了数据链路层和物理层这两层的功能。

1.MAC地址

MAC 地址的全称是 媒体访问控制地址(Media Access Control Address)。如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。

可以理解为,MAC 地址是一个网络设备的身份证号,而IP 地址是住址。

MAC 地址也有一些别称,如 LAN 地址、物理地址、以太网地址等。

MAC 地址的长度为 6 字节(48 比特),地址空间大小有 280 万亿之多(248),MAC 地址由 IEEE 统一管理与分配,理论上,一个网络设备中的网卡上的 MAC 地址是永久的。 不同的网卡生产商从 IEEE 那里购买自己的 MAC 地址空间(MAC 的前 24 比特),也就是前 24 比特由 IEEE 统一管理,保证不会重复。而后 24 比特,由各家生产商自己管理,同样保证生产的两块网卡的 MAC 地址不会重复。

MAC 地址具有可携带性、永久性,身份证号永久地标识一个人的身份,不论他到哪里都不会改变。而 IP 地址不具有这些性质,当一台设备更换了网络,它的 IP 地址也就可能发生改变,也就是它在互联网中的定位发生了变化。

最后,记住,MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址。

2.封装成帧,透明传输,差错检测,流量控制

在数据链路层会进行如下操作:

1.加Mac地址封装成帧。 2.透明传输:表示无论发送什么样的比特组合的数据,这些数据都能够按照原样没有差错地通过这个数据链路层。 3.差错检测。防止0变1,1变0。如果发生改变能快速检测出来,广泛使用了循环冗余检验 CRC 的检错技术。 4.流量控制。设备之间的传输能力和接收能力也是个问题,很可能一边喷水式传输,另一边夹缝式接收,因此需要流量控制来避免这种传输不对称。

3.点对点协议PPP

用户到ISP的协议通常是PPP(点对点协议)。

三.网络层

网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。 与 IP 协议配套使用的还有三个协议: 1.地址解析协议 ARP (Address Resolution Protocol) 2.网际控制报文协议 ICMP (Internet Control Message Protocol) 3.网际组管理协议 IGMP (Internet Group Management Protocol)

1.IP协议

[1]作用--相当于快递地址

IP协议是一种网络层协议,负责在计算机网络上传输数据包。它为每个连接到互联网的设备分配一个唯一的IP地址,使得数据能够在网络上正确路由和传送。

我们给所有的电脑都设置一个数字的虚拟地址,在发送数据的时候带上这个数字的虚拟地址,比如说A电脑的地址是192.168.0.1,B电脑的地址是192.168.0.2,C电脑的地址是192.168.0.3,A电脑要给C电脑传输数据,就在发送的数据包抬头上加上这个数据包,是发送给192.168.0.3的,这样数据到达的交换机以后就会发送给C而不是B。

像192.168.0.3就是我们所说的IP地址,换句话说, IP地址就是和我们寄快递需要填写的地址一样,只不过它是用来在互联网上传输数据包所使用的。

[2]为什么要有IP地址,而不直接用MAC地址?

当年设计出IP地址就是因为随着网络中的设备逐渐增多,人们发现路由(也就是寻找数据包从发送方到接收方的路径)变得越来越困难了。

于是人们想了一个办法,就是把网络划分成很多个子网。这样,在路由的时候,路由器可以把其他子网看成一个整体来进行计算。对于目的地在其他子网的数据包,路由器只需要让数据包到达那个子网即可,而剩下的工作由子网内部解决。虽然这种方法只能让寻找到的路径接近最优而不保证最优,不过它大大减少了路由器的计算量,利大于弊,所以被采用了。

和MAC不同的是,IP地址是和地域相关的。对于位于同一个子网上的设备,我们给他们分配的IP 地址前缀都是一样的,这个前缀就像邮政编码一样。这样,路由器过IP地址的前缀就能知道这个设备在哪个子网上了。现在,路由器只需要记住每个子网的位置即可,大大减少了路由器所需要的内存。

如果我们只用MAC地址的话,我们会发现路由器需要记住每个MAC地址所在的子网是哪一个(不然每一次收到数据包的时候路由器都要重新满世界地去找这个MAC地址的位置)。而世界上有非常多个MAC地址,即使我们给每个MAC地址只留1字节的储存空间,每个路由器也需要256TB的内存!这显然是不可能实现的。而且设备所处的子网和地理位置也是会变的。这就是我们需要IP地址的原因了。

哪为什么不只用IP地址,还需要MAC地址呢?

因为设备刚开始是没IP的,要上线以后才能根据他进入了哪个子网来分配IP,通过dhcp分配,那就需要一个唯一标识符确定IP分配给谁,MAC地址就是那个唯一的标识符来区分不同的设备。

就像数据库一样,你不能把一个老是改变的字段作为唯一标识,而应该给每个资源设置ID作为唯一标识。

总之,MAC地址就像自己的ID号,而IP地址就像带着邮政编码的住址,有各的用途。所以我们需要两个地址,缺一不可。

[3]IP地址用二进制表示

因为IP地址是有四组八位二进制组成的,我们前面看到的十进制IP地址转换为二进制,每一组八位二进制之间都有一个点来隔开,这样IPV4地址加起来一共就有32位。

例: IP地址192.0.2.1的二进制表示为:11000000.00000000.00000010.00000001

每一组的范围是0-255。

几个特殊的IP:

0.0.0.0:通常表示未指定特定主机或地址,或用于指示“任何地址”的意思,例如在路由表中表示默认路由或在服务器中表示监听所有网络接口。 127.0.0.1:这是本地回环地址,也称为本地主机地址。它通常用于将网络流量引导回本地计算机,用于本地测试和通信。 255.255.255.255:广播地址,用于向网络中的所有设备发送广播消息。当一台设备发送数据包到这个地址时,网络中的所有设备都会接收到这个数据包。这通常用于发送广播消息,比如 DHCP 请求,以获取网络中可用的 IP 地址。

IP 地址现在由互联网名字和数字分配机构ICANN (Internet Corporation for Assigned Names and Numbers)进行分配。

[4]分类的IP地址--网络号和主机号

IP地址有两个部分成,分别是网络号和主机号,那么网络号和主机号是干嘛的?

网络号标志着该IP属于那一个网络,而主机号则表示该IP是该网络的哪一台主机。

例: IP:192.168.0.1,192.168.0.2,192.168.0.3 这三个IP都是192.168.0开头的,只有后面的数字不同而已,那么前面相同的部分就是网络号了,后面不同的部分就是主机号了。

有了网络号和主机号可以更好的满足网络管理和地址分配的需求。比路由器查看了目标地址以后,如果发现是同一个网络号,直接在子网内转发就行了,如果发现不是,再发送到别的路由器。

补充:三级IP地址与划分子网

  1. 从 1985 年起在 IP 地址中又增加了一个“子网号字段”,使两级的 IP 地址变成为三级的 IP 地址。

这种做法叫做划分子网 (subnetting) 。划分子网已成为互联网的正式标准协议。

从原来的主机号主机号借用若干个位作为子网号 subnet-id,而主机号 host-id 也就相应减少了若干个位。

2.划分子网纯属一个单位内部的事情。单位对外仍然表现为没有划分子网的网络。

凡是从其他网络发送给本单位某个主机的 IP 数据报,仍然是根据 IP 数据报的目的网络号 net-id,先找到连接在本单位网络上的路由器。

然后此路由器在收到 IP 数据报后,再按目的网络号 net-id 和子网号 subnet-id 找到目的子网。

最后就将 IP 数据报直接交付目的主机。

3.优点

减少了 IP 地址的浪费 使网络的组织更加灵活 更便于维护和管理

[5]子网掩码--划分网络号和主机号

IP地址总是会有网络号和主机号两个部分,那什么部分是属于网络号,什么部分是属于主机号呢?

注:网络号在前,主机号在后。

是有分类的,IP地址划分为ABCDB类。除了D和E是特殊类。

A类前一位是网络号,B类前两位是网络号,C类前三位是网络号

我们把焦点放在每一类的网络数和主机数,可以看出每一类的网络数要么很多,要么很少。

简单分类导致的IP分配不合理,就诞生了子网掩码来划分网络号和主机号。

子网掩码网络号的部分作为1,主机号部分作为0。

例如: 下面如果一个子网下所有可能的IP有192.168.0.0,192.168.0.1,192.168.0.2,192.168.0.3 则子网掩码如下:

子网掩码写起来很长有32位,所以可以用CIDR的方法来表示,我们看到上面有30个1,因此就用/30表示子网掩码就可以了。

所以写成192.168.0.0/30。要注意的是最后一位要写作起始的0,而不写作1,2,3这些。

[6]IPV6

我们前面所说的都是IPV4,即使有了分类和子网掩码来进行IP的划分,它面对发展迅猛的互联网来说,地址肯定是不够的,于是就有了IPV6。

2.ARP协议--Address Resolution Protocol

[1]作用

ARP--地址解析协议。用于将IP地址转换为MAC地址。

IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址。连接了网络层和数据链路层。

发送的时候需要源mac,目标mac,源IP,目标IP这四个信息。源MAC和IP由本机给出,目标IP由用户指定,而目标MAC就需要用ARP协议推出。

[2]工作原理

我们来看一下ARP协议的工作流程

假设我们有一台计算机A,它的IP地址是192.168.1.10,现在计算机A需要向192.168.1.11发送一包UDP报文。

  1. 此时操作系统会把这一包UDP报文暂存。先用ARP协议去查询对方的Mac地址,主机A会通过网络向外发送一包ARP请求报文在网络中广播。 (请求报文中原MAC和原IP都是主机A的Mac和IP,目标IP是需要查询的IP,也就是192.168.1.11,目标MAC是一个全零的Mac地址)
  2. 比如计算机B如果接收到该报文发现自己就是目标IP,会生成一支ARP回复报文进行应答,在回复报文中会填入自己的Mac地址,并使用单播的方式进行回复的,回复报文被主机A收到后,从中解析出主机B的Mac地址。
  3. 把之前暂存的UDP数据取出填入目标Mac地址后正常的发送,这样就完成了这张UDP报文的发送,当然并不是每次都需要执行这个查询步骤的。
  4. 通过ARP协议查询到的Mac地址,会写入到主机的ARP表中缓存起来,下次再往192.168.1.11发送数据,下次查询如果缓存存在直接从中查询到其Mac地址即可。

[3]免费ARP

IP地址是可以变的,IP地址在不同主机之间切换了怎么办呢?

假如当前网络中有三台主机,主机A主机B和主机C,他们的IP分别是192.168.1.10,192.168.1.11和192.168.1.12

假设当前ARP表缓存已经完成填充,如果主机B和主机C的IP地址进行互换,这时候主机A访问192.168.1.11,本来要访问主机C,结果访问到了主机B。

实际上真实情况不是这样的,当设置完主机的IP地址后,操作系统会主动向网络中广播一包免费ARP数据包,这一包数据不需要回复。

目的就是告诉网络中的所有其他主机当前的IP地址和Mac地址的绑定关系

每一台收到免费ARP的主机,自己更新自己的ARP表就好了,这样网络中的其他设备几乎都能立即更新IP地址和Mac地址的映射关系了。

3.ICMP协议--Ping命令

[0]ICMP协议介绍

为了更有效地转发 IP 数据报和提高交付成功的机会,在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。

ICMP 是互联网的标准协议。

ICMP 允许主机或路由器报告差错情况和提供有关异常情况的报告。

[1]作用和使用示例

PING 命令是一种常用的网络诊断工具,经常用来测试网络中主机之间的连通性和网络延迟。

这里简单举一个例子,我们在Linux系统和Windows系统中来 PING 一下百度。

Linux系统:

# 发送4个PING请求数据包到 www.baidu.com
❯ ping -c 4 www.baidu.com

PING www.a.shifen.com (14.119.104.189): 56 data bytes
64 bytes from 14.119.104.189: icmp_seq=0 ttl=54 time=27.867 ms
64 bytes from 14.119.104.189: icmp_seq=1 ttl=54 time=28.732 ms
64 bytes from 14.119.104.189: icmp_seq=2 ttl=54 time=27.571 ms
64 bytes from 14.119.104.189: icmp_seq=3 ttl=54 time=27.581 ms

--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 27.571/27.938/28.732/0.474 ms

(1)在linux中,ping后面加上-c 数字表示发送几次请求数据包到对应ip。 (2)ping后面加上-q参数意思就是只ping对应ip,而不输出ping的记录。 (3)ping后面加上-i 数字代表隔几秒发送一次ping请求

Windows系统:

C:\Users\86138>ping www.baidu.com

正在 Ping www.a.shifen.com [110.242.68.3] 具有 32 字节的数据:
来自 110.242.68.3 的回复: 字节=32 时间=51ms TTL=49
来自 110.242.68.3 的回复: 字节=32 时间=65ms TTL=49
来自 110.242.68.3 的回复: 字节=32 时间=62ms TTL=49
来自 110.242.68.3 的回复: 字节=32 时间=57ms TTL=49

110.242.68.3 的 Ping 统计信息:
    数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
    最短 = 51ms,最长 = 65ms,平均 = 58ms

一般情况下在windows系统下会发送四条请求,而在linux或者mac os系统下,则会无限的发送请求. 如果要中断,可以按CTRL加C。

[2]输出结果

PING 命令的输出结果通常包括以下几部分信息:

  1. ICMP Echo Request(请求报文)信息:序列号(icmp_seq)、TTL(Time to Live)值。

通过序列号我们可以判断发送的是第几个消息。 TTL(Time to Live):这是指每个数据包在网络中可以存在的最大时间(以跳数计算)。在这个例子中,TTL=49表示每个数据包在网络中最多可以经过49个路由器,然后就会被丢弃。 经过一次路由TTL会减一,我们可以ping localhost查看TTL的初始值,然后和现在的值比较,判断经过多少次路由。

  1. 目标主机的域名或 IP 地址:输出结果的第一行。[Ping www.a.shifen.com [110.242.68.3]]
  2. 往返时间(RTT,Round-Trip Time) :从发送 ICMP Echo Request(请求报文)到接收到 ICMP Echo Reply(响应报文)的总时间,用来衡量网络连接的延迟。

Ping正是利用了回响echo这样的特性,发送数据包到目标端,然后等待ping返回的数据,来判断是否可以抵达目标端。 因此只要在发送端计时即可。

  1. 统计结果(Statistics) :包括发送的 ICMP 请求数据包数量、接收到的 ICMP 响应数据包数量、丢包率、往返时间(RTT)的最小、平均、最大和标准偏差值。

如果 PING 对应的目标主机无法得到正确的响应,则表明这两个主机之间的连通性存在问题(有些主机或网络管理员可能禁用了对 ICMP 请求的回复,这样也会导致无法得到正确的响应)。如果往返时间(RTT)过高,则表明网络延迟过高。

[3]原理

PING 基于网络层的 ICMP(Internet Control Message Protocol,互联网控制报文协议) ,其主要原理就是通过在网络上发送和接收 ICMP 报文实现的。

ICMP 报文中包含了类型字段,用于标识 ICMP 报文类型。ICMP 报文的类型有很多种,但大致可以分为两类 查询报文类型:向目标主机发送请求并期望得到响应。 差错报文类型:向源主机发送错误信息,用于报告网络中的错误情况。 PING 用到的 ICMP Echo Request(类型为 8 ) 和 ICMP Echo Reply(类型为 0) 属于查询报文类型 。

PING执行过程其实就像回声一样,通过发送数据包到目标端,然后等待目标端PING返回的数据,来判断是否可以抵达目标端,与目标端之间的距离和产生的时间等等信息。

1.PING 命令会向目标主机发送 ICMP Echo Request。 2.如果两个主机的连通性正常,目标主机会返回一个对应的 ICMP Echo Reply。

补充:ipconfig

(1)作用

ipconfig用来检查在不同适配器中的IP配置。

使用ipconfig命令,可以看出跳出了很多适配器。

什么是适配器?

一个计算机可以连接多个适配器,具体取决于计算机的配置和需要连接的网络类型。适配器是计算机上的硬件设备或软件组件,用于连接到不同类型的网络或连接。常见的适配器类型包括: 1.以太网适配器: 用于连接到有线以太网网络的适配器。大多数计算机都配备了至少一个以太网端口。以太网连接是通过物理线缆传输数据的 2.无线局域网适配器: 用于连接到无线局域网(Wi-Fi)网络的适配器。它允许计算机通过无线信号连接到 Wi-Fi 网络。 3.蓝牙适配器: 用于连接到蓝牙设备的适配器,如蓝牙耳机、键盘、鼠标等。 4.虚拟网络适配器(Virtual Network Adapter): 用于创建虚拟网络连接的适配器,例如虚拟专用网络(VPN)连接或虚拟局域网(VLAN)连接。

每个适配器都有自己的设置和属性,允许计算机同时连接到多种网络类型,以满足不同的网络需求。

然后在每一个适配器下面就会显示在每一个适配器下这台服务器的IPv6 地址,本地链接 IPv6 地址,IPv4 地址,子网掩码,默认网关等与IP相关的信息。[注:默认网关就是路由器的内网ip]

(2)结合ping使用

查看wifi连接中本机的ipconfig信息:

无线局域网适配器 WLAN:

   连接特定的 DNS 后缀 . . . . . . . :
   IPv6 地址 . . . . . . . . . . . . : 2001:250:6803:203::59
   本地链接 IPv6 地址. . . . . . . . : fe80::434c:1025:3f49:5fc5%2
   IPv4 地址 . . . . . . . . . . . . : 10.198.147.249
   子网掩码  . . . . . . . . . . . . : 255.255.192.0
   默认网关. . . . . . . . . . . . . : 10.198.191.254

(1)ping 127.0.0.1 ping回环地址,也就是ping自己。 检测自己主机的基础网络配置是否正常,也就是检查本机的TCP/IP是否正确安装

(2)ping自己的内网地址--ping 10.198.147.249

本机IP地址又分为公网IP和内网IP,一般情况下你是拼不了自己的公网IP的,因为路由器或者IP会禁止ping你的公网IP。

ping内网IP的时候是要联网的,也就是说如果ping不通,那就很可能你的网线或者WIFI连接有问题。

(3)ping路由器IP--ping 10.198.191.254

ping默认网关通常就是ping你的路由器,如果不成功,那就要好好检查你的路由器是否出现故障了。

(4)ping目标IP地址

如果到这一步ping不通,就证明不是你主机或者网络的问题了,有可能是对方主机下线了,也可能防火墙禁止了ping的请求,还可能数据包在途中被丢弃了。

(5)ping 域名

比如我们ping baidu.com,会经过域名解析得到对应的IP地址,然后再ping这个对应的IP地址。

4.IGMP--网际组管理协议

组播(Multicast)是一种网络通信方式,允许一台发送设备(源)将数据同时传送给多个接收设备(目的地)。

IGMP协议(Internet Group Management Protocol)是因特网协议家族中的一个组播协议,它运行在主机和组播路由器之间,它有三个版本,分别是IGMPv1、v2和v3,帮助主机和路由器之间进行组播通信。

5.网络地址转换(NAT)与端口映射

NAT(Network Address Translation,网络地址转换)

概念

主要用于在不同网络之间转换 IP 地址。

它允许将私有 IP 地址(如在局域网中使用的 IP 地址)映射为公有 IP 地址(在互联网中使用的 IP 地址)或者反向映射,从而实现局域网内的多个设备通过单一公有 IP 地址访问互联网。

NAT 不光可以缓解 IPv4 地址资源短缺的问题,还可以隐藏内部网络的实际拓扑结构,使得外部网络无法直接访问内部网络中的设备,从而提高了内部网络的安全性。

举例

假设5台电脑ABCDE接入了一个路由器,这五台电脑的IP分别为192.168.0.1到192.168.0.5,他们接入的这台路由器接入广域网的IP为6.6.6.6。

一般咱们家用来讲,由于路由器是接入广域网并执行NAT的,所以路由器就是你的网关。

假设电脑A要访问广域网上,一个IP地址为8.8.8.8的设备,那数据包从电脑A出来以后,到达IP地址为6.6.6.6的网关,网关发现这个数据包是需要去往8.8.8.8的,就会把192.168.0.1,发送过来的数据的IP映射成6.6.6.6,并记录好映射表。

以6.6.6.6这个IP,把这个数据包发送给8.8.8.8,这样这5台电脑发送出去的数据包都可以,分别通过NAT把原有IP转换成6.6.6.6,以这个IP去传输数据给8.8.8.8,实现五台设备共用一个IP的效果。

那同理,8.8.8.8那边如果作为网关,下面还有附属的其他设备,它同样可以挂载很多台电脑,共用8.8.8.8这一个IP。

端口映射

端口映射简单说就是将一个计算机上的端口与另一个计算机上的端口关联起来。不同计算机端口直接的映射。

上面的NAT还存在一个问题,这五台电脑的数据都是走着一个IP出入的,数据发送出去以后,接收方并不知道这是哪台电脑发送过来的,接收方下面如果也有很多的其他的附属设备,他也不知道这个数据包需要发送给谁。 (8.8.8.8回来的下行数据到了6.6.6.6以后,也不知道该送给哪个设备)

所以这里我们就引入了一个新的概念,端口映射。

我们在IP地址后面增加一串端口号,网关会以不同的端口去和外网交互,然后把这些端口映射给局域网内的各个设备。

传输数据的时候,除了IP地址的映射之外,再额外加上端口号的映射。这样就可以实现共同一个IP还能精准传送数据了,以实现NAT多对一映射。

在NAT和端口映射的技术加持下,才让数量完全不够用的IPV4苟延残喘的坚持了这么多年。

不难看出,交换机的端口数量比普通一台主机多的多。 总结而言:就是我们请求外界的内网IP+端口会被映射成公网IP+端口

生活实际

我们可以去ip.ping0.cc/ 这个网站查看自己映射的公网IP地址。(如果是连接手机热点的话,可能分配给你IPV4或者IPV6)

四.传输层

0.概述

【1】传输层作用--建立端到端的连接

通讯是进程与进程之间的通讯,所以传输除了要有IP地址,还需要有端口号。

传输层主要就干一件事--建立端到端的连接(或者说进程之间的通信)。

只有位于网络边缘部分的主机的协议栈才有运输层,而网络核心部分中的路由器在转发分组时都只用到下三层的功能。

【2】套接字socket--IP地址+端口号

IP地址加上端口号就叫做套接字socket。

套接字socket ---> IP地址:端口号

【3】TCP与UDP

其中TCP和UDP是传输层的两个重要协议。

什么时候选择 TCP,什么时候选 UDP?

  • UDP 一般用于即时通信,比如:语音、 视频、直播等等。这些场景对传输数据的准确性要求不是特别高,比如你看视频即使少个一两帧,实际给人的感觉区别也不大。
  • TCP 用于对传输准确性要求特别高的场景,比如文件传输、发送和接收邮件、远程登录等等

1.TCP三次握手

注【TCP标识】: SYN--synchronization--同步 ACK--acknowledgement--确认 FIN--finish--结束

如果设置1就是开启这些标识,如果设置0就是关闭这些标识。

建立一个 TCP 连接需要“三次握手”,缺一不可:

  • 一次握手:

首先客户端发送的时候,会把SYN开启,发送带有SYN标志的TCP数据包。(SYN表示sychronization,原意是同步的意思,客户端表示想和服务端进行数据的同步。)

在同步以后,也就是三次握手以后,客户端进入SYN_SEND 状态,就可以和服务端互相发送信息,毕竟tcp是全双工的。所以可以互发信息。

只是把SYN开启是不够的,报文里面还有一个重要的字段--sequence序号,所以实际发送的是上图中的SYN(SEQ=x)(x可以是任意数字)。

为什么还需要添加这个sequence序号呢?

因为应用程序可能连续发送多个序号给服务器,这样服务器就起码有依据可以判断哪些是累赘信息。而且这个sequence序号是随机生成的,作为初始值来进行后续判断依据,这样就更加保证了通道的唯一性。所以这个初始需要非常重要。

  • 二次握手:

服务器收到带有SYN的报文以后就需要做出响应了,这个时候服务器会在TCP报文中把和ACK开启。(ACK表示acknowledgement确认的意思,ACK和SYN合起来就是确认同步的意思了。)

那么服务器也生成自己的序号。假设这里的序号为y,但是还不够,还要加上确认号,这个确认号就根据对方的序号加一得到的,这样客户端在收到号码后减一就知道是不是自己发送的tcp报文了。

所以服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态

  • 三次握手:

最后客户端还需要进行确认,因为如果不确认的话,服务器还不知道自己发送出去的确认同步是否被接收。于是必须再发送一次tcp报文来使链接正式建立,这个时候客户端会把ACK开启。这里的序号就用对方的确认号生成,并且在确认号上根据对方的序号加一,也就是ACK(y+1)。

然后客户端和服务器端都进入ESTABLISHED 状态,完成 TCP 三次握手。

当建立了 3 次握手之后,客户端和服务端就可以传输数据啦!

简单说就是:同步-->确认同步-->确认 客户端 服务端 客户端

举牵手为例: A:我可以牵手吗 B:可以呀 然后A牵起来B的手

面试题一:为什么要三次握手,而不是两次或者四次?

三次握手的目的是建立可靠的通信信道,简单来说就是双方都要确认 自己和对方的发送和接收都正常。 简单说要达到这样的效果:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常。

如果只有两次的话,服务端不能确认自己发送和对方接收是否正常。 而如果四次的话就太多了,三次就够了。

面试题二:第 2 次握手传回了 ACK,为什么还要传回 SYN?

服务端传回发送端所发送的 ACK 是为了告诉客户端:“我接收到的信息确实就是你所发送的信号了”,这表明从客户端到服务端的通信是正常的。回传 SYN 则是为了建立并确认从服务端到客户端的通信。

2.TCP四次挥手

假设现在内容都交流完毕了,各自可能就会发送关闭链接的要求了,这个过程就是我们说的四次挥手。

  • 一次挥手

注意客户端和服务端都能主动发起关闭请求,假设这里是客户端主动发起关闭要求。 这个时候客户端会在报文中开启FIN和ACK两个控制位,FIN就是finish结束的意思,这里也就是确认要结束会话。 (因为在发送请求和响应的时候,序号和确认号被不断递增,因此这里就不用固定数字来表示序号和确认号了)

  • 二次挥手

只是一般服务端会先发送一个ACK来进行确认。 (然后套路和前面的一样,自己的序号用对方的确认号,自己的确认号用对方的序号再加一。)

  • 三次挥手

虽然发送了TCP报文,但此时客户端并未正式关闭通道,因为服务端那边可能还有需要发送的数据,等服务端发送完数据以后,会再发送一个FIN加ACK来进行最后的确认。 (此时序号和确认号不需要改变,因为没有一来一回,只是多了一个控制位来进行确认结束步骤而已。)

  • 四次挥手

最后客户端得到最终的结束确认以后会发送ACK来进行确认。 (此时自己的序号需要用对方的确认号,自己的确认号,用对方的序号再加上一。)

简单说就是:确认结束-->确认-->确认结束-->确认 客户端 服务端 客户端 服务端

举分手为例: A:我们分手吧 B:好。 B:(可能B还有点话说,说了点话)我们分手吧 A:好

面试题一:为什么要四次挥手?

因为可能还存在未发送完毕的数据.

举个例子:A 和 B 打电话,通话即将结束后。

  1. 第一次挥手:A 说“我没啥要说的了”
  2. 第二次挥手:B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话
  3. 第三次挥手:于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”
  4. 第四次挥手:A 回答“知道了”,这样通话才算结束。

注:TCP 是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。

面试题二:为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?

和第一题一样。因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。

【和1结合起来理解,总而言之就是B可能还有话要说】

面试题三:如果第二次挥手时服务器的 ACK 没有送达客户端,会怎样?

客户端没有收到 ACK 确认,会重新发送 FIN 请求。

五.应用层

1.DNS

【1】DNS的作用是什么?

DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。

DNS解决的是域名和 IP 地址的映射问题。

一般在实际使用中,浏览器是可以不必动用 DNS 就可以获知域名和 IP 地址的映射的。浏览器在本地会维护一个hosts列表,一般来说浏览器要先查看要访问的域名是否在hosts列表中,如果有的话,直接提取对应的 IP 地址记录,就好了。

如果本地DNS缓存(可以能存在浏览器 DNS 缓存,操作系统 DNS 缓存,路由器 DNS 缓存)的hosts列表内 都查询不到 域名-IP 对应记录的话,那么 DNS 就闪亮登场了。

目前 DNS 的设计采用的是分布式、层次数据库结构,DNS 是应用层协议,它可以在 UDP 或 TCP 协议之上运行,端口为 53 。

【2】DNS服务器由哪些?根服务器有多少个?

DNS 服务器自底向上可以依次分为以下几个层级(所有 DNS 服务器都属于以下四个类别之一): (1)根 DNS 服务器。根 DNS 服务器提供 TLD 服务器的 IP 地址。 目前世界上只有 13 组根服务器,我国境内目前仍没有根服务器,只有根镜像服务器。

下面资料来自维基百科:

(2)顶级域 DNS 服务器(TLD 服务器)。 顶级域是指域名的后缀,如com、org、net和edu等。国家也有自己的顶级域,如uk、fr和ca。TLD 服务器提供了权威 DNS 服务器的 IP 地址。

(3)权威 DNS 服务器。 在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的 DNS 记录,这些记录将这些主机的名字映射为 IP 地址。

(4)本地 DNS 服务器。 每个 ISP(互联网服务提供商)都有一个自己的本地 DNS 服务器。当主机发出 DNS 请求时,该请求被发往本地 DNS 服务器,它起着代理的作用,并将该请求转发到 DNS 层次结构中。严格说来,不属于 DNS 层级结构 。

世界上并不是只有 13 台根服务器,这是很多人普遍的误解,网上很多文章也是这么写的。实际上,现在根服务器数量远远超过这个数量。最初确实是为 DNS 根服务器分配了 13 个 IP 地址,每个 IP 地址对应一个不同的根 DNS 服务器。然而,由于互联网的快速发展和增长,这个原始的架构变得不太适应当前的需求。为了提高 DNS 的可靠性、安全性和性能,目前这 13 个 IP 地址中的每一个都有多个服务器,截止到 2023 年底,所有根服务器之和达到了 600 多台,未来还会继续增加。

【3】DNS 解析的过程是什么样的?

以下图为例,介绍 DNS 的查询解析过程。DNS 的查询解析过程分为两种模式:

  • 迭代查询
  • 递归查询

现在实际中常采用的方式:从请求主机到本地 DNS 服务器的查询是递归的,其余的查询都是迭代的。

(1)迭代查询

本地域名服务器向根域名服务器的查询通常是采用送代查询。当根域名服务器收到本地域名服务器的送代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

总结:请求本地DNS服务器----[没有找到]---->根服务器----[没有找到,根据顶级域名匹配到对应顶级域名服务器IP,再次请求]---->顶级域名服务器----[没有找到,根据域名匹配到对应域名服务器IP,再次请求]---->权威服务器

(2)递归查询

主机向本地域名服务器的查询一般都是采用递归查询如果主机所询问的本地域名服务器不知道被查询域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文。

另外,DNS 的缓存位于本地 DNS 服务器。由于全世界的根服务器甚少,只有 600 多台,分为 13 组,且顶级域的数量也在一个可数的范围内,因此本地 DNS 通常已经缓存了很多 TLD DNS 服务器,所以在实际查找过程中,无需访问根服务器。根服务器通常是被跳过的,不请求的。这样可以提高 DNS 查询的效率和速度,减少对根服务器和 TLD 服务器的负担。

【4】DNS相关攻击

DNS劫持

DNS 劫持是一种网络攻击,它通过修改 DNS 服务器的解析结果,使用户访问的域名指向错误的 IP 地址,从而导致用户无法访问正常的网站,或者被引导到恶意的网站。

DNS 劫持有时也被称为 DNS 重定向、DNS 欺骗或 DNS 污染。

DNS放大攻击

将每一个域名都解析(劫持)到要攻击的服务器地址,然后大家都去访问这台服务器了,给服务器造成很大负担。

DNS Flood

用很大的流量使得DNS服务器本身不堪重负

2.万维网和URL

万维网WWW(WorldWideWeb)是一个大规模的、联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合。

我们用统一资源定位符URL唯一标识和定位各种资源(文字、视频、音频...)。

格式:<协议>://<主机>:<端口>/<路径>

3.HTTP

3.1 概述

HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则和数据传输的格式。

浏览器向服务器进行请求时,服务器按照固定的格式进行解析。 服务器向浏览器进行响应时,浏览器按照固定的格式进行解析。

  • http是互联网上应用最为广泛的一种网络协议,它是无状态的,不保留上一次请求的状态。(不同请求之间共享状态通常需要借助Cookie或Token之类的技术)

  • http协议要求:客户端在向服务器发送请求数据时,或是客户端在向浏览器发送响应数据时,都必须按照固定的格式进行数据传输

如果想知道http协议的数据传输格式有哪些,可以打开浏览器,点击F12打开开发者工具,点击Network来查看。

浏览器和服务器是按照HTTP协议进行数据通信的。

HTTP协议又分为:请求协议和响应协议

  • 请求协议:浏览器将数据以请求格式发送到服务器

    • 包括:请求行请求头、请求体
  • 响应协议:服务器将数据以响应格式返回给浏览器

    • 包括:响应行响应头、响应体

3.2 特点

我们刚才初步认识了HTTP协议,那么我们在看看HTTP协议有哪些特点:

  • 早期的每一次HTTP请求都要进行TCP连接,后来可以保持TCP连接。
  • HTTP/2.0 是基于 TCP 协议实现的,HTTP/3.0 新增了 QUIC(Quick UDP Internet Connections) 协议来实现可靠的传输。
  • 基于请求-响应模型: 一次请求对应一次响应(先请求后响应)
  • HTTP协议是无状态协议: 对于数据没有记忆能力。每次请求-响应都是独立的

3.3 HTTP-请求协议

常见请求方法

表格 还在加载中,请等待加载完成后再尝试复制

在我们实际应用中常用的也就是 :GET、POST

请求行

HTTP请求中的第一行数据。由:请求方式资源路径协议/版本组成(之间使用空格分隔)

1.请求方式:(例:GET)

2.资源路径(例:/brand/findAll?name=OPPO&status=1)

  • 请求路径(/brand/findAll)

  • 请求参数(name=OPPO&status=1)

    • 请求参数是以key=value形式出现
    • 多个请求参数之间使用&连接
  • 请求路径和请求参数之间使用?连接

3.协议/版本:HTTP/1.1

请求头

第二行开始,上图黄色部分内容就是请求头。格式为key: value形式

http是个无状态的协议,所以在请求头设置浏览器的一些自身信息和想要响应的形式。这样服务器在收到信息后,就可以知道是谁,想干什么了

常见的HTTP请求头有:

Host: 表示请求的主机名 User-Agent: 浏览器版本。 例如:Chrome浏览器的标识类似Mozilla/5.0 ...Chrome/79 ,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...)like Gecko Accept:表示浏览器能接收的资源类型,如text/*,image/或者/*表示所有; Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页; Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。 Content-Type:请求主体的数据类型 Content-Length:数据主体的大小(单位:字节)

举例说明:服务端可以根据请求头中的内容来获取客户端的相关信息,有了这些信息服务端就可以处理不同的业务需求。 比如: 不同浏览器解析HTML和CSS标签的结果会有不一致,所以就会导致相同的代码在不同的浏览器会出现不同的效果。服务端根据客户端请求头中的数据获取到客户端的浏览器类型,就可以根据不同的浏览器设置不同的代码来达到一致的效果(这就是我们常说的浏览器兼容问题)

请求体

绿色部分

作用:存储请求参数

注:1.请求体和请求头之间是有一个空行隔开(作用:用于标记请求头结束) 2.参数放在请求体相对来说安全程度较高,比较不容易产生CSRF攻击,所以为什么Restful API规范中一般查询用Query请求行参数,增加,删除,修改数据这些更需要安全的操作则全是将参数放在请求体。

3.4 HTTP-响应协议

与HTTP的请求一样,HTTP响应的数据也分为3部分:响应行响应头响应体

响应行

(以上图中红色部分):响应数据的第一行。响应行由协议及版本响应状态码状态码描述组成。

(1)协议/版本:HTTP/1.1

(2)响应状态码:200

(3)状态码描述:OK

响应头

(以上图中黄色部分):响应数据的第二行开始。格式为key:value形式

http是个无状态的协议,所以可以在请求头和响应头中设置一些信息和想要执行的动作,这样,对方在收到信息后,就可以知道你是谁,你想干什么

常见的HTTP响应头有:
Content-Type:表示该响应内容的类型,例如text/html,image/jpeg ;
Content-Length:表示该响应内容的长度(字节数);
Content-Encoding:表示该响应压缩算法,例如gzip ;
Cache-Control:指示客户端应如何缓存,例如max-age=300表示可以最多缓存300;
Set-Cookie: 告诉浏览器为当前页面所在的域设置cookie ;

响应体

(以上图中绿色部分): 响应数据的最后一部分,存储响应的数据。

注:响应体和响应头之间有一个空行隔开(作用:用于标记响应头结束)

附:响应状态码

表格 还在加载中,请等待加载完成后再尝试复制

3.5 进阶

javaguide.cn/cs-basics/n…

4.其他协议

具体各个协议是干什么的去看JavaGuide

补充:

  1. TFTP--简单文件传送协议
  2. SMPT--发送邮件 POP3/IMAP--接收邮件
  3. DHCP--动态主机配置协议--Dynamic Host Configuration Protocol

DHCP是局域网网络协议之一,可以动态地在主机加入网络时给主机分配IP地址,并对这些IP地址进行统一管理。

协议配置:在协议软件中,给协议参数赋值的动作叫做协议配置。一个协议在使用前必须是已正确配置的。

连接到互联网的计算机的协议软件需要配置的参数包括: IP 地址 子网掩码 默认路由器的IP地址 域名服务器的IP地址 这些信息通常存储在一个配置文件中,计算机在引导过程中可以对这个文件进行存取。

分配的IP有租用期,也就是有效期。不过过期之前可以再次请求更换租用期。

  1. 应用进程跨网络的通信--Socket编程

六.网络攻击常见手段

0.概述

计算机网络的通信面临两大类威胁,即被动攻击和主动攻击

[1]被动攻击:攻击者从网络上窃听他人的通信内容。通常把这类攻击称为截获

[2]主动攻击:主要有下面几种常见方式

篡改:攻击者故意篡改网络上传送的报文。 恶意程序:这种种类很多,对网络安全威胁比较大的有:计算机病毒,计算机蠕虫,特洛伊木马,逻辑炸弹,后门入侵,流氓软件等待。 拒绝服务Dos:指攻击者向互联网上的某个服务器不停地发送大量分组,使该服务器无法提供正常的服务,甚至完全瘫痪。

1.IP欺骗技术

概念:伪造成某台主机的IP地址。

解决方案:入口过滤和出口过滤是防范欺骗的一种极为常见的防御措施。用于检查传入或传入的 IP 数据包并确定其源标头。如果这些数据包的源标头与其来源不匹配或者看上去很可疑,则拒绝这些数据包。

2.DDOS

2.1 概念

DDos 全名 Distributed Denial of Service,翻译成中文就是分布式拒绝服务。

指的是处于不同位置的多个攻击者同时向一个或数个目标发动攻击,是一种分布的、协同的大规模攻击方式。

单一的 DoS 攻击一般是采用一对一方式的,它利用网络协议和操作系统的一些缺陷,采用欺骗和伪装的策略来进行网络攻击,使网站服务器充斥大量要求回复的信息,消耗网络带宽或系统资源,导致网络或系统不胜负荷以至于瘫痪而停止提供正常的网络服务。

2.2 如何应对 DDoS 攻击?

高防服务器

高防服务器主要是指能独立硬防御 50Gbps 以上的服务器,能够帮助网站拒绝服务攻击,定期扫描网络主节点等,这东西是不错,就是贵。

黑名单

面对火锅店里面的流氓,我一怒之下将他们拍照入档,并禁止他们踏入店铺,但是有的时候遇到长得像的人也会禁止他进入店铺。

这个就是设置黑名单,此方法秉承的就是“错杀一千,也不放一百”的原则,会封锁正常流量,影响到正常业务。

DDOS 清洗

DDOS 清洗会对用户请求数据进行实时监控,及时发现 DOS 攻击等异常流量,在不影响正常业务开展的情况下清洗掉这些异常流量。

CDN 加速

CDN 服务将网站访问流量分配到了各个节点中,这样一方面隐藏网站的真实 IP,另一方面即使遭遇 DDOS 攻击,也可以将流量分散到各个节点中,防止源站崩溃。

2.3 各种类型的DDOS

[1]TCP SYN Flood

最原始、最经典的 DDOS(Distributed Denial of Service,分布式拒绝服务)攻击之一。

攻击者通常利用工具或者控制僵尸主机向服务器发送海量的变源 IP 地址或变源端口的 TCP SYN 报文。服务器生成大量的半连接,连接资源耗尽,就无法提供正常服务。

解决方案:

【1】扩大允许的半开连接的数量 【2】回收最先创建的TCP半开连接 【3】SYN Cookie 此策略要求服务器创建 Cookie。为避免在填充积压工作时断开连接,服务器使用 SYN-ACK 数据包响应每一项连接请求,而后从积压工作中删除 SYN 请求,同时从内存中删除请求,保证端口保持打开状态并做好重新建立连接的准备。如果连接是合法请求并且已将最后一个 ACK 数据包从客户端机器发回服务器,服务器将重建(存在一些限制)SYN 积压工作队列条目。虽然这项缓解措施势必会丢失一些 TCP 连接信息,但好过因此导致对合法用户发起拒绝服务攻击。

[2]UDP Flooding

模拟正常用户同一时间大量发送UDP数据包。服务器资源都被占满了。

[3]HTTP Flood--也叫CC攻击

模拟正常用户发送大量HTTP请求。

CC攻击相比于其他DDOS攻击,因为HTTP请求更像正常的用户请求,所以更容易伪造,也更不容易被拦截。(怕误杀)

[4]DNS Flood

攻击者用大量流量淹没某个域的 DNS 服务器,使得其他用户无法访问该DNS服务器。

除非被破坏的 IoT 设备得以更新或替换,否则抵御这些攻击的唯一方法是使用一个超大型、高度分布式的 DNS 系统,以便实时监测、吸收和阻止攻击流量。

3.TCP重置攻击

在 TCP 重置攻击中,攻击者通过向通信的一方或双方发送伪造的消息,告诉它们立即断开连接,从而使通信双方连接中断。正常情况下,如果客户端收发现到达的报文段对于相关连接而言是不正确的,TCP 就会发送一个重置报文段,从而导致 TCP 连接的快速拆卸。

TCP 重置攻击利用这一机制,通过向通信方发送伪造的重置报文段,欺骗通信双方提前关闭 TCP 连接。如果伪造的重置报文段完全逼真,接收者就会认为它有效,并关闭 TCP 连接,防止连接被用来进一步交换信息。服务端可以创建一个新的 TCP 连接来恢复通信,但仍然可能会被攻击者重置连接。万幸的是,攻击者需要一定的时间来组装和发送伪造的报文,所以一般情况下这种攻击只对长连接有杀伤力,对于短连接而言,你还没攻击呢,人家已经完成了信息交换。

从某种意义上来说,伪造 TCP 报文段是很容易的,因为 TCP/IP 都没有任何内置的方法来验证服务端的身份。有些特殊的 IP 扩展协议(例如 IPSec)确实可以验证身份,但并没有被广泛使用。客户端只能接收报文段,并在可能的情况下使用更高级别的协议(如 TLS)来验证服务端的身份。但这个方法对 TCP 重置包并不适用,因为 TCP 重置包是 TCP 协议本身的一部分,无法使用更高级别的协议进行验证。

4.数字签名和CA数字证书(避免中间人攻击)

4.1 HTTP和HTTPS

有时候浏览器访问网页会提示网站不安全,这是因为没有使用HTTPS导致的。

但是具体又是哪方面不安全呢,会有中间人攻击。

我们不妨设想一下,当你需要登录只使用了HTTP的门户网站的时候,输入并且发送了账号密码给网站,网站验证了账号密码没问题后,把带有你个人信息的网页发送给你,这个过程听起来很合理。

一方面,你的发送的没有加密的信息会被轻松获取,另一方面,你的发送给目的网站的信息被获取之后也会被轻松篡改重新发送。

暂时无法在飞书文档外展示此内容

4.2 对称加密

我们可以对传递的信息进行对称加密,就是你和门户网站之间需要有一模一样的私钥。

这把私钥简单理解为某种数学运算,比如你要发送一串字符,客户端用这把私钥加密就会把字符变为另一串加密后的字符。而服务端用这把私钥进行解密后就可以将加密后的字符转换成加密前的明文。

这样中间人不知道私钥就不能得到明文,同时也无法对传递的信息进行篡改。

暂时无法在飞书文档外展示此内容

私钥是有期限的,你和网站之间的每一次会话,都需要一把新的密钥

缺点:既然客户端和服务器之间需要会话密钥不能公开,那就需要在网络通信前实打实的见上一面,把会话密钥沟通好,再进行网络通信,这样才能保证安全。这样显然是不合理的。

4.3 非对称加密

非对称加密就是为了解决上面的问题。

我们让服务器有一把公钥和一把私钥,用公钥加密的内容只能用私钥进行解密,它们是成对的。公钥就不怕被别人知道了,只要私钥保存好就行了

在服务器把公钥发给客户端以后,客户端用公钥加密,然后加密后的信息发送到服务端,服务端用私钥解密。

暂时无法在飞书文档外展示此内容

缺点:

暂时无法在飞书文档外展示此内容

当服务器要把公钥发送给你的时候,中间人拿到了网站的公钥以后,不直接发给你。

中间人此时要生成自己的一对公钥和私钥,并且把他自己的公钥发给你,然后你就傻傻的用中间人的公钥加密自己的信息,中间人再次进行截获并用自己的私钥获取了你的信息。然后还可能进一步修改里面的内容,并且用网站给的公钥加密,修改后的内容再发送给网站,完成篡改。

4.4 CA数字证书和数字签名

数字证书

上面问题就在于这里的公钥,我们不能确定收到的这把公钥,是服务器的还是中间人的。

我们的网络通信需要第三方,来解决公钥的信任问题,这个第三方简称CA。

于是刚才的流程就发生了变化,你在发送密文之前,网站需要先把用来给你加密的公钥,放到大家都信任的第三方CA那里。CA根据这把公钥以及其他信息,生成了数字证书,相当于让这把公钥和该网站绑定起来了。

如果回到刚才的流程,网站在与你进行加密协商之前,就可以先把数字证书发给你,你看到数字证书是属于信任的CA,于是从数字证书里面取出公钥,这样就可以愉快地生成最后的密文了。

数字签名

我们怎么相信数字证书就是可信任的,CA颁发的数字证书上有CA签名就可以了。

当CA在收到网站的信息以及公钥以后,会对这些信息以及公钥进行哈希运算,得到一串较短的哈希字符。这就是CA签名。

什么是哈希运算?

简单来说,哈希运算就是把一段内容变成特定长度的字符,这样大大压缩掉需要传输的信息。

另外如果内容有哪怕一个字符的修改,最终生成的短字符都会不一样。不一样的内容会生成不一样的哈希字符。

哈希运算以后,CA自己也生成一对专门用于数字证书的CA公钥和CA私钥,然后用这把CA私钥给哈希字符加密,就生成数字签名了。

注意进行哈希运算并非进行了加密运算,因此这里要对哈希字符进行加密。

总结:数字证书=公钥+其他信息+数字签名(前面的进行哈希运算并用CA私钥加密得到的哈希字符)

后续流程

现在CA就可以把含有CA数字签名的证书,发给网站了。

虽然数字证书里的网站信息都是明文的,但是核心就在于CA的数字签名,如果证书里的内容或者公钥被篡改了,生成的哈希值会不一样,最终的数字签名就会不一样。 (就和token一样,最后部分的签名是关键,可以判别是否正确)

当你访问网站的时候,网站会把CA数字签名的数字证书发给你。为了证明没有中间人更改过公钥,你需要用CA签名时候生成的公钥给数字签名解密,这样会得到一串哈希字符。

接着你对收到的数字证书内容,进行同样的哈希运算,也得到一串哈希字符。

如果前后两串哈希字符一致,说明数字证书是靠谱的,没有被篡改。

暂时无法在飞书文档外展示此内容

假设中间人修改了数字证书的内容,但是由于中间人没有原本生成数字证书的私钥,因此你收到的数字签名会和数字证书不匹配。除非中间人拥有私钥才行。

然后就可以继续生成密文的步骤了。

补充:私钥加密还是公钥加密,其实不重要,不管是公钥加密还是私钥加密,简单说就是你用了一把进行加密,另一把就只能用来解密。

证书的可靠性

如何保证拿到的证书是可靠的呢?

这里的核心就是,用顶层的私钥给下层的证书签名。在用户的操作系统和浏览器里面,预先安装更系列的证书,这样就可以闭合这一整条证书列了,验证的时候,用顶层的公钥来检验下层的签名。

4.5 tls/ssl加密具体过程

先建立tcp连接再建立ssl、tls连接

  1. 客户端 Hello:客户端向服务器发送一个Client Hello消息,其中包含支持的加密算法协议版本随机数等信息。
  2. 服务器 Hello:服务器收到Client Hello后,选择加密算法和协议版本,并向客户端发送一个Server Hello消息。
  3. 证书验证:服务器还会发送自己的数字证书给客户端,客户端会验证证书的有效性,包括证书是否由受信任的证书颁发机构颁发。
  4. 密钥交换:如果证书验证通过,客户端生成一个随机数,使用服务器的公钥(从证书中提取)加密后发送给服务器,服务器使用自己的私钥解密得到该随机数,用于生成对称加密的会话密钥。
  5. 完成握手:握手阶段完成后,客户端和服务器都知道如何加密通信,并且共享一个会话密钥用于加密和解密数据。

四次握手主要是交换以下信息:

  • 数字证书:该证书包含了公钥等信息,一般是由服务器发给客户端,接收方通过验证这个证书是不是由信赖的CA签发,或者与本地的证书相对比,来判断证书是否可信;假如需要双向验证,则服务器和客户端都需要发送数字证书给对方验证;

  • 三个随机数:这三个随机数构成了后续通信过程中用来对数据进行对称加密解密的对话密钥

    • 首先客户端先发第一个随机数N1,然后服务器回了第二个随机数N2(这个过程同时把之前提到的证书发给客户端),这两个随机数都是明文的;
    • 而第三个随机数N3(预主密钥),客户端用数字证书的公钥进行非对称加密,发给服务器,服务器用只有自己知道的私钥来解密,获取第三个随机数。
    • 服务端和客户端都有了三个随机数N1+N2+N3,然后两端就使用这三个随机数来生成“对话密钥”,在此之后的通信都是使用这个“对话密钥”来进行对称加密解密。因为这个过程中,服务端的私钥只用来解密第三个随机数,从来没有在网络中传输过,这样的话,只要私钥没有被泄露,那么数据就是安全的。
  • 加密通信协议:就是双方商量使用哪一种加密方式,假如两者支持的加密方式不匹配,则无法进行通信;

一句话概括也就是用非对称加密来生成对称加密的密钥,非对称加密的代价是很高的。