计算机基础 网络
2024-03-18 12:03:32 1 举报
AI智能生成
计算机基础网络是一门介绍计算机网络基本概念、技术和原理的课程。
作者其他创作
大纲/内容
网络分层模型
OSI 七层模型
国际标准化组织提出一个网络分层模型。
详细介绍
OSI 七层模型虽厉害,但因复杂且效率低等原因,没有 TCP/IP 四层模型 更适用。
TCP/IP 四层模型
目前被广泛采用的一种模型,可以将 TCP / IP 模型看作是 OSI 七层模型的精简版本。
每一层包含的协议和核心技术
划分
应用层(Application layer)
提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式。
把应用层交互的数据单元称为报文。
传输层(Transport layer)
负责向两台终端设备进程之间的通信提供通用的数据传输服务。
网络层(Network layer)
负责为分组交换网上的不同主机提供通信服务。
选择合适的路由,使源主机运输层所传下来的分组,能通过网络层中的路由器找到目的主机。
网络接口层(Network interface layer)
看作是数据链路层和物理层的合体。
复杂的系统需要分层,因为每一层都需要专注于一类事情。网络分层的原因也是一样,每一层只专注于做一类事情。
分层原因
各层之间相互独立。
提高了灵活性和可替换性,高内聚、低耦合。
大问题化小,将复杂的问题分解为容易理解的更小的问题。
常见网络协议
应用层
HTTP(Hypertext Transfer Protocol,超文本传输协议)
基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议。
SMTP(Simple Mail Transfer Protocol,简单邮件发送协议)
基于 TCP 协议,是一种用于发送电子邮件的协议。
POP3/IMAP(邮件接收协议)
基于 TCP 协议,两者都是负责邮件接收的协议。
FTP(File Transfer Protocol,文件传输协议)
基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。
Telnet(远程登陆协议)
基于 TCP 协议,用于通过一个终端登陆到其他服务器。
SSH(Secure Shell Protocol,安全的网络传输协议)
基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务。
RTP(Real-time Transport Protocol,实时传输协议)
通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能。
DNS(Domain Name System,域名管理系统)
基于 UDP 协议,用于解决域名和 IP 地址的映射问题。
传输层
TCP(Transmission Control Protocol,传输控制协议 )
提供 面向连接 的,可靠 的数据传输服务。
UDP(User Datagram Protocol,用户数据协议)
提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。
网络层
IP(Internet Protocol,网际协议)
TCP/IP 协议中最重要的协议之一。分为两种:IPv4 和 IPv6。
主要作用是定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。
ARP(Address Resolution Protocol,地址解析协议)
解决网络层地址和链路层地址之间的转换问题。
ICMP(Internet Control Message Protocol,互联网控制报文协议)
一种用于传输网络状态和错误消息的协议,常用于网络诊断和故障排除。
NAT(Network Address Translation,网络地址转换协议)
应用于内部网到外部网的地址转换过程中。
OSPF(Open Shortest Path First,开放式最短路径优先)
一种内部网关协议(Interior Gateway Protocol,IGP),也是广泛使用的一种动态路由协议。
基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径。
RIP(Routing Information Protocol,路由信息协议)
一种内部网关协议(Interior Gateway Protocol,IGP),也是一种动态路由协议。
基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。
BGP(Border Gateway Protocol,边界网关协议)
一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议。
HTTP
过程
在浏览器中输入指定网页的 URL。
浏览器通过 DNS 协议,获取域名对应的 IP 地址。
浏览器根据 IP 地址和端口号,向目标服务器发起一个 TCP 连接请求。
浏览器在 TCP 连接上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
浏览器收到 HTTP 响应报文后,解析响应体中的 HTML 代码,渲染网页的结构和样式,
同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
同时根据 HTML 中的其他资源的 URL(如图片、CSS、JS 等),再次发起 HTTP 请求,获取这些资源的内容,直到网页完全加载显示。
浏览器在不需要和服务器通信时,可以主动关闭 TCP 连接,或者等待服务器的关闭请求。
状态码
1xx Informational(信息性状态码)
平时你大概率不会碰到。
2xx Success(成功状态码)
200 OK:请求被成功处理。
201 Created:请求被成功处理并且在服务端创建了一个新的资源。
202 Accepted:服务端已经接收到了请求,但是还未处理。
204 No Content:服务端已经成功处理了请求,但是没有返回任何内容。
3xx Redirection(重定向状态码)
301 Moved Permanently:资源被永久重定向了。
302 Found:资源被临时重定向了。
4xx Client Error(客户端错误状态码)
400 Bad Request:发送的 HTTP 请求存在问题。
401 Unauthorized:未认证却请求需要认证之后才能访问的资源。
403 Forbidden:直接拒绝 HTTP 请求,不处理。
404 Not Found:你请求的资源未在服务端找到。
409 Conflict:表示请求的资源与服务端当前的状态存在冲突,请求无法被处理。
5xx Server Error(服务端错误状态码)
500 Internal Server Error:服务端出问题了(通常是服务端出 Bug 了)。
502 Bad Gateway:我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应。
Header
Accept
能够接受的回应内容类型(Content-Types)。
Accept-Charset
能够接受的字符集。
Accept-Datetime
能够接受的按照时间来表示的版本。
Accept-Encoding
能够接受的编码方式列表。参考 HTTP 压缩。
Accept-Language
能够接受的回应内容的自然语言列表。
Authorization
用于超文本传输协议的认证的认证信息。
Cache-Control
用来指定在这次的请求/响应链中的所有缓存机制 都必须 遵守的指令。
Connection
该浏览器想要优先使用的连接类型。
Content-Length
以 八位字节数组 (8 位的字节)表示的请求体的长度。
Content-MD5
请求体的内容的二进制 MD5 散列值,以 Base64 编码的结果。
Content-Type
请求体的 多媒体类型 (用于 POST 和 PUT 请求中)。
Cookie
之前由服务器通过 Set- Cookie (下文详述)发送的一个 超文本传输协议 Cookie。
Date
发送该消息的日期和时间(按照 RFC 7231 中定义的"超文本传输协议日期"格式来发送)。
Expect
表明客户端要求服务器做出特定的行为。
From
发起此请求的用户的邮件地址。
Host
服务器的域名(用于虚拟主机 ),以及服务器所监听的传输控制协议端口号。
If-Match
仅当客户端提供的实体与服务器上对应的实体相匹配时,才进行对应的操作。
If-Modified-Since
允许在对应的内容未被修改的情况下返回 304 未修改( 304 Not Modified )
If-None-Match
允许在对应的内容未被修改的情况下返回 304 未修改( 304 Not Modified )
If-Range
如果该实体未被修改过,则向我发送我所缺少的那一个或多个部分;否则,发送整个新的实体
If-Unmodified-Since
仅当该实体自某个特定时间已来未被修改的情况下,才发送回应。
Max-Forwards
限制该消息可被代理及网关转发的次数。
Origin
发起一个针对 跨来源资源共享 的请求。
Pragma
与具体的实现相关,这些字段可能在请求/回应链中的任何时候产生多种效果。
Proxy-Authorization
用来向代理进行认证的认证信息。
Range
仅请求某个实体的一部分。字节偏移以 0 开始。参见字节服务。
Referer
表示浏览器所访问的前一个页面,正是那个页面上的某个链接将浏览器带到了当前所请求的这个页面。
TE
浏览器预期接受的传输编码方式:可使用回应协议头 Transfer-Encoding 字段中的值;
Upgrade
要求服务器升级到另一个协议。
User-Agent
浏览器的浏览器身份标识字符串
Via
向服务器告知,这个请求是由哪些代理发出的。
Warning
一个一般性的警告,告知,在实体内容体中可能存在错误。
HTTP 和 HTTPS
HTTP 协议
定义
超文本传输协议(Hypertext Transfer Protocol),无状态(stateless)协议。
主要是来规范浏览器和服务器端的行为的。
通信过程
服务器在 80 端口等待客户的请求。
浏览器发起到服务器的 TCP 连接(创建套接字 Socket)。
服务器接收来自浏览器的 TCP 连接。
浏览器(HTTP 客户端)与 Web 服务器(HTTP 服务器)交换 HTTP 消息。
关闭 TCP 连接。
优点
扩展性强、速度快、跨平台支持性好。
HTTPS 协议
定义
HTTPS 协议(Hyper Text Transfer Protocol Secure)基于 HTTP,使用 SSL/TLS 协议用作加密和安全认证。
SSL 通道通常使用基于密钥的加密算法,密钥长度通常是 40 比特或 128 比特。
优点
保密性好、信任度高。
SSL/TLS 协议
全称为 SSL(Secure Sockets Layer)/TLS(Transport Layer Security)协议。
SSL 指安全套接字协议,首次发布于1996年就是 3.0 版本。
在 1999 年,SSL 3.0 进一步升级,新版本被命名为 TLS 1.0。两者混称为 SSL/TLS。
原理
非对称加密
一个公钥,一个私钥。
公私钥对的生成算法依赖于单向陷门函数。
对称加密
唯一密钥
公钥传输的信赖性
证书颁发机构(CA,Certificate Authority)
默认是受信任的第三方。
CA 会给各个服务器颁发证书,证书存储在服务器上,并附有 CA 的数字签名。
数字签名
CA 在给服务器颁发证书时,使用散列+加密的组合技术,在证书上盖个章,以此来提供验伪的功能。
带有证书的公钥传输机制
区别
端口号:HTTP 默认是 80,HTTPS 默认是 443。
URL 前缀:HTTP 的 URL 前缀是 http://,HTTPS 的 URL 前缀是 https://。
安全性和资源消耗:HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
SEO(搜索引擎优化):使用 HTTPS 协议的网站在搜索结果中可能会被优先显示,从而对 SEO 产生影响。
HTTP/1.1 和 HTTP/2.0 区别
多路复用(Multiplexing):HTTP/2.0 在同一连接上可以同时传输多个请求和响应,互不干扰。HTTP/1.1 则使用串行方式。
二进制帧(Binary Frames):HTTP/2.0 使用二进制帧进行数据传输,而 HTTP/1.1 则使用文本格式的报文。
头部压缩(Header Compression):HTTP/1.1 支持Body压缩,Header不支持压缩。HTTP/2.0 支持对Header压缩。
服务器推送(Server Push):HTTP/2.0 支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端。
HTTP/2.0 和 HTTP/3.0 区别
传输协议:HTTP/2.0 是基于 TCP 协议实现的,HTTP/3.0 新增了 QUIC(Quick UDP Internet Connections) 协议来实现可靠的传输。
队头阻塞:由于 QUIC 协议的特性,HTTP/3.0 在一定程度上解决了队头阻塞(Head-of-Line blocking, 简写:HOL blocking)问题。
错误恢复:HTTP/3.0 具有更好的错误恢复机制,当出现丢包、延迟等网络问题时,可以更快地进行恢复和重传。
安全性:HTTP/3.0 基于 QUIC 协议,包含了内置的加密和身份验证机制,可以提供更强的安全性。
保存用户状态方式
Session 机制,作用就是通过服务端记录用户的状态。
Cookie 被禁用怎么办?
最常用的就是利用 URL 重写把 Session ID 直接附加在 URL 路径的后面。
URI 和 URL
URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI。
Cookie 和 Session 区别
Session 的主要作用就是通过服务端记录用户的状态。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。
GET 和 POST 区别
语义(主要区别):GET 通常用于获取或查询资源,而 POST 通常用于创建或修改资源。
幂等:GET 请求是幂等的,POST 请求是不幂等的。
格式:GET 请求的参数通常放在 URL 中,POST 请求的参数通常放在请求体(body)中。
缓存:由于 GET 请求是幂等的,可以缓存。而 POST 请求则不适合被缓存。
安全性:GET 请求相比 POST 请求更容易泄露敏感数据。
WebSocket
定义
一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据。
在 2008 年诞生,2011 年成为国际标准,几乎所有主流较新版本的浏览器都支持该协议。
本质上是应用层的协议,用于弥补 HTTP 协议在持久通信能力上的不足。
客户端和服务器仅需一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
应用场景
视频弹幕、实时消息推送、实时游戏对战、多用户协同编辑、社交聊天等。
WebSocket 和 HTTP
WebSocket 和 HTTP 两者都是基于 TCP 的应用层协议,都可以在网络中传输数据。
区别
WebSocket 是一种双向实时通信协议,而 HTTP 是一种单向通信协议。
WebSocket 使用 ws:// 或 wss:// 作为协议前缀,HTTP 使用 http:// 或 https:// 作为协议前缀。
WebSocket 可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩、加密等。
WebSocket 通信数据格式比较轻量,而 HTTP 通信每次都要携带完整的头部,网络开销较大。
工作过程
客户端向服务器发送一个 HTTP 请求,请求头中包含 Upgrade: websocket 和 Sec-WebSocket-Key等字段,表示要求升级协议为 WebSocket;
服务器收到请求后会升级协议,若支持 WebSocket,它将回复状态码(101)及对应响应头来表示成功升级成功。
客户端和服务器之间建立了一个 WebSocket 连接,可以进行双向的以帧(frames)形式的数据传输。
客户端或服务器可以主动发送一个关闭帧,表示要断开连接。另一方收到后,也会回复一个关闭帧,然后双方关闭 TCP 连接。
另外,建立 WebSocket 连接之后,通过心跳机制来保持 WebSocket 连接的稳定性和活跃性。
SSE 与 WebSocket
SSE 与 WebSocket 作用相似,都可以建立服务端与浏览器之间的通信,实现服务端向客户端推送消息。
区别
SSE 是基于 HTTP 协议的,它们不需要特殊的协议或服务器实现即可工作;WebSocket 需单独服务器来处理协议。
SSE 单向通信,只能由服务端向客户端单向通信;WebSocket 全双工通信,即通信的双方可以同时发送和接受信息。
SSE 实现简单开发成本低,无需引入其他组件;WebSocket 传输数据需做二次解析,开发门槛高一些。
SSE 默认支持断线重连;WebSocket 则需要自己实现。
SSE 只能传送文本消息,二进制数据需要经过编码后传送;WebSocket 默认支持传送二进制数据。
当只需要一些服务器操作的更新。比如:站内信、未读消息数、状态更新、股票行情、监控数量等场景,SEE 更加有优势。
PING
PING 命令是一种常用的网络诊断工具,经常用来测试网络中主机之间的连通性和网络延迟。
结果结构
ICMP Echo Request(请求报文)信息:序列号、TTL(Time to Live)值。
目标主机的域名或 IP 地址:输出结果的第一行。
往返时间(RTT,Round-Trip Time):从发送 ICMP(请求报文)到接收到 ICMP(响应报文)的总时间,用来衡量网络连接的延迟。
统计结果(Statistics):包括发送/接收的 ICMP 数据包数量、丢包率、往返时间(RTT)的最小、平均、最大和标准偏差值。
注意
禁用了对 ICMP 请求的回复,这样会导致无法得到正确的响应。
原理
基于网络层的 ICMP(Internet Control Message Protocol,互联网控制报文协议),其主要原理就是通过在网络上发送和接收 ICMP 报文实现的。
ICMP 报文类型
查询报文类型:向目标主机发送请求并期望得到响应。PING属于此类型。
差错报文类型:向源主机发送错误信息,用于报告网络中的错误情况。
DNS
DNS(Domain Name System)域名管理系统,是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS 要解决的是域名和 IP 地址的映射问题。
设计采用的是分布式、层次数据库结构,DNS 是应用层协议,它可以在 UDP 或 TCP 协议之上运行,端口为 53 。
服务器分类
根 DNS 服务器。根 DNS 服务器提供 TLD 服务器的 IP 地址。目前世界上只有 13 组根服务器,我国境内目前仍没有根服务器。
顶级域 DNS 服务器(TLD 服务器)。顶级域是指域名的后缀,如com、org、net和edu等。
权威 DNS 服务器。在因特网上具有公共可访问主机的每个组织机构必须提供公共可访问的 DNS 记录。
本地 DNS 服务器。每个 ISP(互联网服务提供商)都有一个自己的本地 DNS 服务器。
注意
每组根服务器都有多个服务器,截止到 2023 年底,所有根服务器之和达到了 600 多台,未来还会继续增加。
查询解析过程(两种模式)
迭代
实践中常采用的方式,从请求主机到本地 DNS 服务器的查询是递归的,其余的查询时迭代的。
递归
具体过程和迭代类似,只是顺序有所不同。
报文格式
报文分为查询和回答报文,两种形式的报文结构相同。
DNS 记录
在响应查询时,需要查询自己的数据库,数据库中的条目被称为资源记录(Resource Record,RR)。
RR 提供了主机名到 IP 地址的映射。RR 是一个包含了Name, Value, Type, TTL四个字段的四元组。
TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。
Name和Value字段的取值取决于Type。
DNS 劫持
DNS 劫持有时也被称为 DNS 重定向、DNS 欺骗或 DNS 污染。
一种网络攻击,它通过修改 DNS 服务器的解析结果,使用户访问的域名指向错误的 IP 地址。
TCP 与 UDP
区别
是否面向连接:UDP 在传送数据之前不需要先建立连接。
是否是可靠传输:UDP 传输不可靠,TCP 传输可靠。
是否有状态:TCP 传输是有状态的,而 UDP 是无状态服务。
传输效率:由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。
传输形式:TCP 是面向字节流的,UDP 是面向报文的。
首部开销:TCP 首部开销(20 ~ 60 字节)比 UDP 首部开销(8 字节)要大。
是否提供广播或多播服务:TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一、多对多;
应用
TCP
用于对传输准确性要求特别高的场景,比如文件传输、发送和接收邮件、远程登录等等。
HTTP 协议(HTTP/3.0 之前)、HTTPS 协议、FTP 协议、SMTP 协议、POP3/IMAP 协议、Telnet 协议、SSH 协议等等。
UDP
一般用于即时通信,比如:语音、 视频、直播等等。
HTTP 协议(HTTP/3.0 )、DHCP 协议、DNS 域名系统等等。
HTTP/3.0 之前是基于 TCP 协议的,而 HTTP/3.0 将弃用 TCP,改用 基于 UDP 的 QUIC 协议 。
TCP
建立连接-TCP 三次握手
一次握手:客户端发送带有 SYN(SEQ=x)标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认。
二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态。
三次握手:客户端发送带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务器端都进入ESTABLISHED 状态,完成 TCP 三次握手。
目的
建立可靠的通信信道。
定义
SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号。
ACK 确认字符(Acknowledgement),是 TCP/IP 建立连接时使用的已确认接收无误的信号。
断开连接-TCP 四次挥手
第一次挥手:客户端发送一个 FIN(SEQ=x) 标志的数据包->服务端,用来关闭客户端到服务器的数据传送。然后客户端进入 FIN-WAIT-1 状态。
第二次挥手:服务器收到这个 FIN(SEQ=X) 标志的数据包,它发送一个 ACK (ACK=x+1)标志的数据包->客户端 。
然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
然后服务端进入 CLOSE-WAIT 状态,客户端进入 FIN-WAIT-2 状态。
第三次挥手:服务端发送一个 FIN (SEQ=y)标志的数据包->客户端,请求关闭连接,然后服务端进入 LAST-ACK 状态。
第四次挥手:客户端发送 ACK (ACK=y+1)标志的数据包->服务端,然后客户端进入TIME-WAIT状态,
服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。
此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。
服务端在收到 ACK (ACK=y+1)标志的数据包后进入 CLOSE 状态。
此时如果客户端等待 2MSL 后依然没有收到回复,就证明服务端已正常关闭,随后客户端也可以关闭连接了。
目的
TCP 是全双工通信,可以双向传输数据,避免一方数据没有发完就关闭通道。
服务器发送的 ACK 和 FIN 不能合并原因
可能还有一些数据没有发完,先回复 ACK,等数据发完,再回复 FIN。
第二次挥手时,客户端没有收到 ACK 确认,会重新发送 FIN 请求。
第四次挥手客户端需要等待 2*MSL时间原因
防止 Server 没有收到 ACK 而不断重发 FIN。
定义
MSL(Maximum Segment Lifetime) : 一个片段在网络中最大的存活时间,2MSL 就是一个发送和一个回复所需的最大时间。
FIN(Finish):TCP 协议中的 Finish 标志,用于触发连接的关闭过程。
保证传输可靠性
基于数据块传输、对失序数据包重新排序以及去重、校验和、重传机制、流量控制、拥塞控制。
流量控制
利用滑动窗口实现流量控制。
为了控制发送方发送速率,保证接收方来得及接收。
如果接收方处理不过来,就只能把处理不过来的数据存在 接收缓冲区(Receiving Buffers) 里(失序的数据包也会被存放在缓存区里)。
如果缓存区满了发送方还在狂发数据的话,接收方只能把收到的数据包丢掉。
如果缓存区满了发送方还在狂发数据的话,接收方只能把收到的数据包丢掉。
TCP 为全双工(Full-Duplex, FDX)通信,两端各有一个发送缓冲区与接收缓冲区,两端都各自维护一个发送窗口和一个接收窗口。
接收窗口的大小是根据接收端处理数据的速度动态调整的。
拥塞控制
若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。
拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。
拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。
拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。
为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。
算法
采用了四种算法,即 慢开始、 拥塞避免、快重传 和 快恢复。
在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
慢开始: 先探测一下,即由小到大逐渐增大发送,cwnd 初始值为 1,每个传播轮次加倍,从而避免引起网络阻塞。
拥塞避免:让拥塞窗口 cwnd 缓慢增大,即每经过一个往返时间 RTT 就把发送方的 cwnd 加 1。
快重传与快恢复(fast retransmit and recovery,FRR):一种拥塞控制算法,能快速恢复丢失的数据包。
ARQ 协议
自动重传请求(Automatic Repeat-reQuest,ARQ)是 OSI 模型中数据链路层和传输层的错误纠正协议之一。
它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。
它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。
ARQ 包括停止等待 ARQ 协议和连续 ARQ 协议。
停止等待 ARQ 协议
为了实现可靠传输的,原理就是每发完一个分组就停止发送,等待对方确认(回复 ACK)。
连续 ARQ 协议
可提高信道利用率,发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。
优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。
缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。
超时重传原理
当发送方发送数据之后,它启动一个定时器,等待目的端确认收到这个报文段。
定义
RTT(Round Trip Time):往返时间,也就是数据包从发出去到收到对应 ACK 的时间。
RTO(Retransmission Time Out):重传超时时间,即从数据发送时刻算起,超过这个时间便执行重传。
计算
RTO 的确定是一个关键问题,因为它直接影响到 TCP 的性能和效率。
动态地调整 RTO 算法:加权移动平均(EWMA)算法,Karn 算法,Jacobson 算法等。
这些算法都是根据往返时延(RTT)的测量和变化来估计 RTO 的值。
这些算法都是根据往返时延(RTT)的测量和变化来估计 RTO 的值。
IP
IP(Internet Protocol,网际协议) 是 TCP/IP 协议中最重要的协议之一,属于网络层的协议。
作用
定义数据包的格式、对数据包进行路由和寻址,以便它们可以跨网络传播并到达正确的目的地。
分类
IPv4
IPv4(Internet Protocol version 4) 是目前广泛使用的 IP 地址版本,其格式是四组由点分隔的数字。32位,总量约42亿。
IPv6
IPv6(Internet Protocol version 6)为了解决 IP 地址耗尽问题,使用由单或双冒号分隔的一组数字和字母的复杂格式。128位,总量2^128。
IPv6 优势
无状态地址自动配置(Stateless Address Autoconfiguration,简称 SLAAC),无需依赖 DHCP 服务器,简化了网络配置和管理。
NAT(Network Address Translation,网络地址转换) 成为可选项,地址资源充足,每个设备都可以是独立地址。
对标头结构进行了改进:IPv6 标头结构相较于 IPv4 更加简化和高效,减少了处理开销,提高了网络性能。
可选的扩展头:允许在 IPv6 标头中添加不同的扩展头(Extension Headers),用于实现不同类型的功能和选项。
ICMPv6(Internet Control Message Protocol for IPv6):IPv6 中的 ICMPv6 相较于 IPv4 中的 ICMP 有了一些改进。
IP 地址
定义
每个连入互联网的设备或域(如计算机、服务器、路由器等)都被分配一个 IP 地址(Internet Protocol address),作为唯一标识符。
每个 IP 地址都是一个字符序列,如 192.168.1.1(IPv4)、2001:0db8:85a3:0000:0000:8a2e:0370:7334(IPv6) 。
每个 IP 地址都是一个字符序列,如 192.168.1.1(IPv4)、2001:0db8:85a3:0000:0000:8a2e:0370:7334(IPv6) 。
工作方式
网络设备根据目的 IP 地址来判断数据包的目的地,并将数据包转发到正确的目的地网络或子网络,从而实现了设备间的通信。
IP 地址过滤
限制或阻止特定 IP 地址或 IP 地址范围的访问。
获取客户端真实 IP
应用层方法 :通过 X-Forwarded-For 请求头获取,但容易被伪造。
传输层方法
利用 TCP Options 字段承载真实源 IP 信息,但需要双方都进行改造。
利用 Proxy Protocol 协议来传递客户端 IP 和 Port 信息。
网络层方法:隧道 +DSR 模式,适用于任何协议,但实施麻烦,很少用。
NAT
NAT(Network Address Translation,网络地址转换) 主要用于在不同网络之间转换 IP 地址。
允许将私有 IP 地址映射为公有 IP 地址或者反向映射,从而实现局域网内的多个设备通过单一公有 IP 地址访问互联网。
不光可以缓解 IPv4 地址资源短缺的问题,还可以隐藏内部网络的实际拓扑结构,从而提高了内部网络的安全性。
原理
NAT 转换表,IP + 端口的映射关系。
特点
NAT 协议通过对 WAN 屏蔽 LAN,有效地缓解了 IPv4 地址分配压力。
LAN 主机 IP 地址的变更,无需通告 WAN。
WAN 的 ISP 变更接口地址时,无需通告 LAN 内主机。
LAN 主机对 WAN 不可见,不可直接寻址,可以保证一定程度的安全性。
NAT 协议在 LAN 以外标识一个内部主机时,使用的是端口号,因为 IP 地址都是相同的。不规范。
ARP
MAC 地址
媒体访问控制地址(Media Access Control Address),一切网络设备都由 MAC 地址唯一标识。
MAC 地址是身份证号,IP 地址是邮政地址。MAC 地址也有一些别称,如 LAN 地址、物理地址、以太网地址等。
ARP 地址解析协议(Address Resolution Protocol),解决的是网络层地址和链路层地址之间的转换问题。
在协议栈中属于一个偏底层的、非常重要的、又非常简单的通信协议。
原理
ARP 表
每个网络设备都维护了一个 ARP 表,记录其他网络设备的 IP 地址-MAC 地址映射关系,并以 <IP, MAC, TTL> 三元组的形式存储。
ARP 协议是一个广播问询,单播响应协议。
场景
同一局域网内的 MAC 寻址。
不同局域网内的 MAC 寻址。
网络攻击
IP 欺骗
伪造某台主机的 IP 地址的技术。
原理
伪造大量的 IP 地址,向目标发送 RST 数据,使服务器不对合法用户服务。
缓解
入口过滤是一种数据包过滤形式,通常在网络边缘设备上实施,用于检查传入的 IP 数据包并确定其源标头。
SYN Flood(洪水)
互联网上最原始、最经典的 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击之一。
目的
耗尽可用服务器资源,致使服务器无法传输合法流量。
原理
利用了 TCP 协议的三次握手机制,攻击者通常利用工具或者控制僵尸主机向服务器发送海量的变源 IP 地址或变源端口的 TCP SYN 报文,
服务器响应了这些报文后就会生成大量的半连接,当系统资源被耗尽后,服务器将无法提供正常的服务。
服务器响应了这些报文后就会生成大量的半连接,当系统资源被耗尽后,服务器将无法提供正常的服务。
形式
直接攻击: 不伪造 IP 地址的 SYN 洪水攻击称为直接攻击。
欺骗攻击: 恶意用户还可以伪造其发送的各个 SYN 数据包的 IP 地址,以便阻止缓解措施并加大身份暴露难度。
分布式攻击(DDoS): 如果使用僵尸网络发起攻击,则追溯攻击源头的可能性很低。
缓解
扩展积压工作队列:利用每个操作系统都允许一定数量的半开连接,内存耗尽,总比直接拒绝服务强。
回收最先创建的 TCP 半开连接:在填充积压工作后覆盖最先创建的半开连接。
SYN Cookie:要求服务器创建 Cookie,为避免在填充积压工作时断开连接,服务器使用 SYN-ACK 数据包响应每一项连接请求,
而后从积压工作中删除 SYN 请求,同时从内存中删除请求,保证端口保持打开状态并做好重新建立连接的准备。
而后从积压工作中删除 SYN 请求,同时从内存中删除请求,保证端口保持打开状态并做好重新建立连接的准备。
UDP Flood(洪水)
一种拒绝服务攻击,将大量的用户数据报协议(UDP)数据包发送到目标服务器,目的是压倒该设备的处理和响应能力。
服务器接收 UDP 数据包处理步骤
服务器首先检查是否正在运行正在侦听指定端口的请求的程序。
如果没有程序在该端口接收数据包,则服务器使用 ICMP(ping)数据包进行响应,以通知发送方目的地不可达。
原理
利用服务器响应发送到其中一个端口的 UDP 数据包所采取的步骤。
缓解
操作系统部分限制了 ICMP 报文的响应速率,以中断需要 ICMP 响应的 DDoS 攻击。
HTTP Flood(洪水)
一种大规模的 DDoS(Distributed Denial of Service,分布式拒绝服务)攻击,旨在利用 HTTP 请求使目标服务器不堪重负。
形式
HTTP GET 攻击:在这种攻击形式下,多台计算机或其他设备相互协调,向目标服务器发送对图像、文件或其他资产的多个请求。
HTTP POST 攻击:一般而言,在网站上提交表单时,服务器必须处理传入的请求并将数据推送到持久层。
缓解
对发出请求的设备实施质询,以测试它是否是机器人。
使用 Web 应用程序防火墙 (WAF)、管理 IP 信誉数据库以跟踪和有选择地阻止恶意流量,以及由工程师进行动态分析。
DNS Flood(洪水)
一种分布式拒绝服务(DDoS)攻击,攻击者用大量流量淹没某个域的 DNS 服务器,以尝试中断该域的 DNS 解析。
DNS 放大攻击
反射并放大不安全 DNS 服务器的流量,以便隐藏攻击的源头并提高攻击的有效性。
防护
唯一方法是使用一个超大型、高度分布式的 DNS 系统,以便实时监测、吸收和阻止攻击流量。
TCP 重置攻击
攻击者通过向通信的一方或双方发送伪造的消息,告诉它们立即断开连接,从而使通信双方连接中断。
一般情况,仅长链接有效。
防护
暂无
中间人攻击
攻击中间人攻击英文名叫 Man-in-the-MiddleAttack,简称「MITM 攻击」。
原理
攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据。
第三方验证
摘要算法
消息摘要算法
MD5 是将任意长度的文章转化为一个 128 位的散列值,易碰撞。
安全散列算法(SHA)
数字签名和证书
对称加密
加密方与解密方使用同一钥匙(秘钥)。
算法
DES、IDEA、AES、SM1、SM4
非对称加密
发送方与接收方使用的不同的秘钥。
算法
RSA(性能好)、ECC(最安全)、SM2(国标)
散列算法
MD5、SHA、SM3
DDOS
分布式拒绝服务(Distributed Denial of Service),处于不同位置的多个攻击者同时向一个或数个目标发动攻击,是一种分布的、协同的大规模攻击方式。
方式
ICMP Flood、UDP Flood、NTP Flood、SYN Flood、CC 攻击、DNS Query Flood等等。
应对
高防服务器、黑名单、DDoS 清洗、CDN 加速等等。
0 条评论
下一页