计算机网络概论 | 青训营笔记

81 阅读10分钟

计算机网络概论 | 青训营笔记

信息交换方式

电路交换:就像客户打电话给章鱼哥订餐,需要先建立连接,然后才能进行信息的传递,传递结束释放资源,等待下一个连接。

优点

  1. 通信时延小:因为通信线路为通信双方专用,数据直达,因此通信时延小。当传输大量数据时,优势非常明显。
  2. 有序传输:因为通信双方之间只有一条专用的通信线路,数据只在这一条线路上传输,因此不存在失序问题。
  3. 没有冲突:不同的通信双方拥有不同的信道,不会出现争用物理信道的问题。
  4. 适用范围广:电路交换既适用于传输模拟信号,也适用于传输数字信号。
  5. 实时性强:得益于通信时延小。
  6. 控制简单:电路交换的结点交换机及其控制都比较简单。

缺点

  1. 建立连接时间长:电路交换的连接建立时间对计算及通信来说太长。
  2. 线路独占,使用效率低:电路交换一旦建立连接,物理通路就被通信双方独占,即使通信线路空闲,也不能供其他用户使用,因而信道利用率很低。
  3. 灵活性差:只要连接所建立的物理通路中任何一点出现了故障,就必须重新拨号建立新的连接,这对十分紧急和重要的通信是很不利的。
  4. 难以规格化:电路交换时,数据直达,不同类型、不同规格、不同速率的终端很难相互进行通信,也难以在通信过程中进行差错控制。

分组交换:采用存储转发技术,将一份信息分成多份进行转发。

优点

  1. 无需建立连接:不需要为通信双方预先建立一条专用的通信线路,不存在建立连接的时延,用户可以随时发送分组。【对比电路交换】
  2. 线路利用率高:通信双方不是固定占用一条通信线路,而是在不同的时间分段占用物理线路,因而大大提高了通信线路的利用率。
  3. 简化了存储管理:分组长度固定,相应的缓冲区大小也固定,管理起来相对容易。【对比报文交换】
  4. 加速传输:由于分组是逐个传输的,使得最后一个分组的存储操作,与当前一个分组的转发操作可以同时进行。
  5. 减少出错概率和重发数据量:因为分组比报文小,因此出错概率概率必然减小,即使分组出错,也只需要重传出错的分组,比重传整个报文数据量小很多。提高了可靠性,减少了传输时延。【对比报文交换】

缺点

  1. 引起了转发时延:因为分组在结点交换机上要经历存储转发的过程。【与报文交换相同】
  2. 需要传输额外的信息:将原始报文分割成等长的数据块,每个数据块都要加上源地址、目的地址等控制信息,从而构成分组,使得传送的信息量变大。【与报文交换对比】
  3. 对于数据报服务,存在失序,丢失或重复分组的问题;对于虚电路服务(无失序问题),存在呼叫建立、数据传输和虚电路释放三个过程。分组到达目的结点时,需要重新还原成原始报文,比较麻烦。

网络分层

网络层:将异构的网络通过路由器互联,在网络层面好像一个统一的网络。

运输层:向应用层提供服务,是面向通信的最高层,面向用户的最底层。通信的真正端点是应用程序进程(端到端通信)。

应用层:通过应用进程间的交互来完成特定网络应用。定义进程间通信和交互的规则。

协议

协议规定两个通信的端口之间交换数据的格式以及顺序。

标头:记录了两个端口的信息以及传递数据所需要的协议识别信息。

载荷:负载着传递的信息。

报文 = 链路层头 + IP协议的头部 + TCP协议头部 + HTTP协议头部 + HTTP的正文。

Web中的网络

HTTP

HTTP连接模型

HTTP是超文本传输协议,也就是HyperText Transfer Protocol。用于在客户端(如浏览器)和服务器之间传输超文本和其他资源。

HTTP1.1

短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。

长连接:从 HTTP/1.1起,默认使用长连接,用以保持连接特性。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

HTTP管线化:HTTP pipelining 是将多个HTTP请求(request)整批送出的技术,而在传送过程中不需先等待服务器的回应。

HTTP队头堵塞(Head-of-line blocking):指在某些协议或系统中,如果一个请求或数据包阻塞了,那么在这个请求或数据包之后的所有请求或数据包都将被阻塞,即使它们可以独立处理并且不依赖于之前的请求或数据包。

HTTP2

帧:数据的传输被分割成多个帧,每个帧都有唯一的标识符。每种帧都有不同的用途和格式。每个帧包含帧头和帧体,帧头包含帧类型、帧长度、标识符等信息,帧体是实际传输的数据。HTTP/2中的帧是按照顺序发送的,并且每个帧都可以独立进行流控和错误控制,避免了HTTP/1.x中的队头堵塞问题,提高了传输效率和性能。

头部压缩:为了报文传输更小、更快,在HTTP/2中头是经过压缩的,使用的压缩算法为HPACK。

Server Push:当服务器接收到一个请求时,使用Server Push可以将多个资源文件一起发送给客户端。

HTTP3

QUIC:Quick UDP Internet Connections,是一种基于 UDP 的传输层协议。 TCP队头堵塞:HTTP/1.x协议每个请求需要单独建立一个TCP连接,响应数据传输期间会阻塞后续请求,导致性能瓶颈。HTTP/2协议采用多路复用机制,在同一个TCP连接上可以同时进行多个请求和响应,解决了HTTP/1.x中的队头阻塞问题,提高了性能。

0RTT连接:

CDN

(Content Delivery Network,内容分发网络)是一种用于优化网络资源访问速度和提高用户体验的技术。

CDN 的主要组成部分包括:

  1. 边缘服务器(Edge Server):位于各地的服务器,用于缓存和分发内容。当用户请求内容时,CDN 会将请求重定向到最近的边缘服务器,从而加快访问速度。边缘服务器之间会根据一定的策略进行内容同步,确保缓存的内容是最新的。
  2. 负载均衡器(Load Balancer):用于在多个边缘服务器之间分发用户请求。负载均衡器根据各边缘服务器的负载情况和用户的地理位置,智能地将请求分配到合适的边缘服务器。
  3. 域名解析系统(DNS):CDN 通常会有自己的 DNS 服务,用于将用户的请求重定向到最近的边缘服务器。当用户访问一个使用 CDN 的网站时,DNS 会根据用户的 IP 地址和边缘服务器的位置信息,返回最近的边缘服务器 IP 地址,从而实现请求的重定向。
  4. 内容管理系统(CMS):用于管理和维护 CDN 中的内容。内容提供者可以通过 CMS 将内容发布到 CDN,并对内容进行更新、删除等操作。

CDN服务器选择

选择合适的 CDN 服务器需要考虑多个因素,包括网站流量、用户分布、CDN 服务商的覆盖范围、成本等。以下是一些选择 CDN 服务器的建议:

  1. 流量量:选择 CDN 服务器时,需要考虑网站或应用程序的流量量,尤其是在高流量时段的稳定性。根据实际情况,选择能够满足网站流量需求的服务器。
  2. 用户分布:选择距离用户最近的服务器,可以降低访问延迟,提高用户体验。根据网站或应用程序的用户分布情况,选择离用户最近的 CDN 服务器。
  3. CDN 服务商的覆盖范围:选择覆盖范围广泛的 CDN 服务商,可以确保服务的可用性和稳定性。选择具有全球分布的 CDN 服务商,能够满足全球用户的访问需求。
  4. 成本:选择合适的 CDN 服务器需要考虑成本问题。通常情况下,不同 CDN 服务商的价格和服务质量差异较大。选择适合自己需求的 CDN 服务商,可以确保在满足业务需求的前提下降低成本。
  5. CDN 服务商的技术支持和服务质量:选择具有良好技术支持和服务质量的 CDN 服务商,可以保障服务的稳定性和安全性。需要注意的是,选择 CDN 服务商时需要进行充分的调研和比较,了解服务商的技术实力和服务质量。

DNS劫持

DNS劫持是经常被用于网络攻击的一种手段,DNS劫持也被称为域名劫持或者是DNS重定向,最直接的后果就是把我们要打开的网页被另一个网页替换掉了或者是让我们的网页直接打不开。

WebSocket

网络安全

网络安全三要素

  • 机密性: 攻击者无法获知通信内容
  • 完整性: 攻击者对内容进行篡改时能被发现
  • 身份验证: 攻击者无法伪装成通信双方的任意一方与另一方通信

PKI

Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也就是利用公开密钥机制建立起来的基础设施。

非对称加密和对称加密

对称加密又叫做私钥加密,即信息的发送方和接收方使用同一个密钥去加密和解密数据。对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密。

非对称加密也叫做公钥加密。非对称加密与对称加密相比,其安全性更好。对称加密的通信双方使用相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称加密使用一对密钥,即公钥和私钥,且二者成对出现。私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。