字节青训营-计算机网络

148 阅读24分钟

一、计算机网络

(一)定义:是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统,

简单来说,计算机网络就是由通信线路互相连接的许多自主工作的计算机构成的集合体。

计算机网络.png

(二)组成

1、主机:客户端和服务端,等同于蟹黄堡中的客户和店里的厨房。

2、路由器:等同于小区中的转发点。

3、网络协议:网络协议定义了计算机设备之间通信的规则和格式。例如,TCP/IP协议族是互联网上使用最广泛的一组协议,它定义了数据包的格式、地址分配方式、路由选择方法等。

(三)通信

想要使用网络,离不开通信,电路交换和分组交换是两种不同的通信方式。

1、电路交换:在通信双方之间建立一条专用的物理链路,并在整个通信过程中一直占用这条链路。这种方式的优点是通信质量稳定,缺点是建立连接需要一定时间,且线路利用率低。

2、分组交换:将数据分成若干个数据包,每个数据包独立传输。这种方式的优点是线路利用率高,缺点是通信质量不稳定,可能会出现延迟、丢包等问题。

两者的主要区别在于电路交换需要建立专用的物理链路,而分组交换不需要。电路交换适用于对通信质量要求较高的场合,如电话通信;分组交换适用于对通信质量要求不高但数据量较大的场合,如文件传输。

(四)计算机网络分类

计算机网络可以按照分布范围划分为局域网(LAN)、城域网(MAN)和广域网(WAN)。

局域网(LAN): 就是老师课程中说的区域网,是指在较小的地理区域内,如办公室、实验室或家庭内建立的计算机网络。局域网通常使用广播技术来传输数据。

城域网(MAN)是指若干个局域网互相连接而成,适合于大都市的较大规模的计算机网络。

广域网(WAN)是指涉及几个城市、一个国家、各个国家之间的计算机网络。互联网就是一个广域网的例子。

(五)计算机网络模型

概念:计算机网络模型是指用于描述计算机网络中各层次之间关系和功能的模型。常见的计算机网络模型有OSI七层模型和TCP/IP四层模型。

这里只需要有一个大概的轮廓即可,重点放在应用层(这里有接下来要讲的HTTP)和运输层(TCP/IP协议)

OSI七层模型由国际标准化组织(ISO)提出,它将计算机网络分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层七个层次。

  • 物理层:负责定义物理设备标准,如电缆的接口类型、光纤的接口类型、各种传输介质的传输速率等。
  • 数据链路层:负责在两个相邻节点之间传输数据帧,以及检测并纠正数据传输过程中的错误。
  • 网络层:负责为数据包选择路由,以及处理拥塞控制。
  • 传输层:负责提供端到端的可靠传输,以及流量控制。
  • 会话层:负责建立、管理和终止会话。
  • 表示层:负责数据格式转换、数据加密和解密等。
  • 应用层:负责为应用程序提供网络服务。

TCP/IP四层模型是互联网使用最广泛的一种网络模型,它将计算机网络分为网络接口层、网际层、传输层和应用层四个层次。

  • 网络接口层:相当于OSI模型中的物理层和数据链路层,负责定义物理设备标准和在两个相邻节点之间传输数据帧。
  • 网际层:相当于OSI模型中的网络层,负责为数据包选择路由和处理拥塞控制。
  • 传输层:与OSI模型中的传输层相同,负责提供端到端的可靠传输和流量控制。
  • 应用层:相当于OSI模型中的会话层、表示层和应用层,负责建立会话、数据格式转换和为应用程序提供网络服务。

image.png

(六)网络协议--标头和载荷

在计算机网络中,数据包通常由标头和载荷两部分组成。标头包含了用于传输数据包的控制信息,如源地址、目的地址、序号、校验和等。而载荷则是数据包中实际传输的数据部分。类比于快递单号信息~

网络协议定义了标头和载荷的格式和顺序,以便在计算机网络中正确地传输和接收数据包。例如,在 TCP 协议中,标头包含了源端口、目的端口、序号、确认号等信息,而载荷则是 TCP 数据段中实际传输的数据。

1、下面是http协议报文的例子,帮助大家理解。

HTTP 协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,它定义了客户端和服务器之间的通信格式。HTTP 协议分为请求和响应两个部分,每个部分都包含标头和正文两个部分。

使用 GET 方法来传递数据的 HTTP 请求示例:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi

在这个示例中,第一行是请求行,它包含了请求方法(GET)、请求资源的路径(/hello.txt)和 HTTP 协议版本(HTTP/1.1)。接下来的几行是请求头部,它包含了一些用于控制请求的信息,如 User-AgentHostAccept-Language 等。最后,请求正文为空。

2、再补充一下TCP报文的格式和一些关键字段的解释

img

  • 源端口和目的端口 各占两个字节,TCP的分用功能也是通过端口实现的。
  • 序号 占4个字节,范围是[0,232],TCP是面向字节流的,每个字节都是按顺序编号。例如一个报文段,序号字段是201,携带数据长度是100,那么第一个数据的序号就是201,最后一个就是300。当达到最大范围,又从0开始。
  • 确认号 占4个字节,是期望收到对方下一个报文段的第一个字节的序号。若确认号=N,则表示序号N前所有的数据已经正确收到了。
  • 数据偏移 占4位,表示报文段的数据部分的起始位置,距离整个报文段的起始位置的距离。间接的指出首部的长度。
  • 保留 占6位,保留使用,目前为0.
  • URG(紧急) 当URG=1,表明紧急指针字段有效,该报文段有紧急数据,应尽快发送。
  • ACK(确认) 仅当ACK=1时,确认号才有效,连接建立后,所有的报文段ACK都为1。
  • PSH(推送) 接收方接收到PSH=1的报文段,会尽快交付接收应用经常,不再等待整个缓存填满再交付。实际较少使用。
  • RST(复位) RST=1时,表明TCP连接中出现严重差错,必须是否连接,再重连。
  • SYN(同步) 在建立连接时用来同步序号。当SYN=1,ACK=0,则表明是一个连接请求报文段。SYN=1,ACK=1则表示对方同意连接。TCP建立连接用到。
  • FIN(终止) 用来释放一个连接窗口。当FIN=1时,表明此报文段的发送方不再发送数据,请求释放单向连接。TCP断开连接用到。
  • 窗口 占2个字节,表示发送方自己的接收窗口,窗口值用来告诉对方允许发送的数据量。
  • 校验和 占2字节,检验和字段查验范围包括首部和数据部分。
  • 紧急指针 占2字节,URG=1时,紧急指针指出本报文段中的紧急数据的字节数(紧急字节数结束后为普通字节)。
  • 选项 长度可变,最长可达40字节。例如最大报文段长度MSS。MSS指的是数据部分的长度而不是整个TCP报文段长度,MSS默认为536字节长。窗口扩大,时间戳选项等

3、UDP的报文以及UDP与TCP的区别

UDP的报文:

img

二者的区别

1. 连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。TCP 面向字节流
  • UDP 是不需要连接,即刻传输数据。面向报文。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按需到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。

4. 拥塞控制、流量控制

  • TCP 有拥塞控制和流量控制机制,保证数据传输的安全性。
  • UDP 则没有,即使网络非常拥堵了,也不会影响 UDP 的发送速率。

5. 首部开销

  • TCP 首部长度较长,会有一定的开销,首部在没有使用「选项」字段时是 20 个字节,如果使用了「选项」字段则会变长的。
  • UDP 首部只有 8 个字节,并且是固定不变的,开销较小。

6. 传输方式

  • TCP 是流式传输,没有边界,但保证顺序和可靠。
  • UDP 是一个包一个包的发送,是有边界的,但可能会丢包和乱序。

7. 分片不同

  • TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片。
  • UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层。

二、web中的网络

(一)HTTP协议

HTTP: 超文本传输协议 ,应用层协议。主要用于 Web 上传输超媒体文本的底层协议,经常在浏览器和服务器之间传递数据。通信就是以纯文本的形式进行。

1、无状态: 是 HTTP 协议对客户端请求状态没有进行存储,比如每次请求都需要重新登录:

2、无连接:无连接主要是限制每次连接只处理一个请求。每次请求都是客户发起请求,服务端响应请求,然后就断开连接。这期间就是· 通过三次握手建立连接,四次挥手断开连接。每次请求即便是多次请求并请求同一个资源,服务端都无法判断是否是相同请 求,都需要重新响应请求。

3、HTTP 的其他特点是简单快速,只需传送方法和路径就可以向服务端进行请求;还有支持传输任意类型的数据对象。

(二)http1 http1.1 http2 http3

image.png

首先在http1中由于http本身的特点存在如下问题:

1、每次都需要等待上次一连接完成,才可以继续发送请求,简单来说就是HTTP/1.1 的模式是一问一答。网络利用率不高。

2、无法在一条连接上实现多路复用,也就是说在一个http请求中插入另一个http请求,它是无法分辨请求来源。

3、请求头部和响应头部都会重复发很多次,也无法压缩,比如请求头中的cookie。

  • 于是在http1.1中,优化了connection Keep-Alive, 默认使用长连接,保持连接一段时间,而不是像http1中使用完就销毁,使用了持久连接模型。但是队头阻塞问题依旧影响性能。在http1.1中针对队头阻塞问题使用的方案是,同时建立多个http连接, HTTP/1.1 中,队头阻塞问题无法完全解决,只能缓解。一种缓解方法是使用并发连接,即同时对一个域名发起多个长连接。另一种方法是使用域名分片技术,即多开几个域名,这些域名都指向同一台服务器,这样实际长连接的数量就又上去了。

  • http1.1因为无法分辨是哪一个请求发送的,所以无法多路复用,如图:

image.png

  • 第三个模型是http管线化,存在一些问题比如:队头阻塞,HTTP 管线化还有其他一些问题。例如,它只能用于 GET 和 HEAD 请求,而 POST 请求则有所限制。这是因为 HTTP 管线化机制必须通过永久连接(persistent connection)完成,仅 HTTP/1.1 支持此技术(HTTP/1.0 不支持)。

  • Http2 使用帧(frame)和流(stream)等概念来实现多路复用,将多个请求拆分到帧中,可以标识到数据包是哪个请求。在一个 TCP 连接上,HTTP/2 可以同时传输多个请求和响应,避免了 HTTP/1.x 中的队头阻塞问题,提高了网络传输效率。

image.png

  • 补充几个http2中的新特性以及缺点

    • 使用新的二进制协议,不再是纯文本,避免文本歧义,缩小了请求体积
    • 多路复用,同域名下所有通信都是在单链接(双向数据流)完成,提高连接的复用率,在拥塞控制方面有更好的能力提升
    • 使用HPACK算法将头部压缩,用哈夫曼编码建立索表,传送索引大大节约了带宽
    • 允许服务端主动推送数据给客户端
    • 增加了安全性,使用HTTP 2.0,要求必须至少TLS 1.2
    • 使用虚拟的流传输消息,解决了应用层的队头阻塞问题

    缺点

    • 因为https逐渐成为主流,http+ ssl 的关系,导致了双倍的握手延迟TCP,HTTP2使用TCP协议来传输的,而如果使用HTTPS的话,还需要TLS协议进行安全传输,而使用TLS也需要一个握手过程,在传输数据之前,导致我们花掉3~4个RTT

    • TCP的队头阻塞并没有彻底解决。http2解决了http层面的队头阻塞,但是在tcp层面上仍然存在队头阻塞在HTTP2中,多个请求跑在一个TCP管道中,但当HTTP2出现丢包时,整个TCP都要开始等待重传,那么就会阻塞该TCP连接中的所有请求

  • 基于上述问题,就出现了HTTP3:

  • HTTP3 是 HTTP 协议的第三个主要版本,它使用了一种与 HTTP/3 同时开发的传输技术,称为 QUIC。与 HTTP/1.1 和 HTTP/2 相比,HTTP/3 和 QUIC 有许多优点,包括更快的首次请求响应时间,因为 QUIC 和 HTTP/3 在客户端和服务器之间进行连接协商所需的往返次数更少。此外,HTTP/3 还支持在网络切换时进行过渡,这对移动设备非常有用,因为移动设备在更改位置时经常在 WIFI 和蜂窝网络之间切换。

  • http3,配合QUIC,实现了首次连接1RTT,后续0RTT

  • QUIC(Quick UDP Internet Connections)是一种基于 UDP 的传输层协议,由谷歌提出。它实现了 TCP + HTTPS + HTTP/2 的功能,目的是保证可靠性的同时降低网络延迟。QUIC 的特点包括无队头阻塞,灵活性、安全性和减少延迟,以及适用性和可管理性。

三、CDN 以及DNS(dns域名解析)

CDN(内容分发网络):帮用户近距离给用户分发网络内容 ,目的是让用户能够更快速地得到请求的数据。它能让用户就近访问数据,从而更快地获取所需的数据。CDN 通过让 DNS 主动配合,把域名解析到临近的服务器上,从而实现加速效果。

1、CDN补充:网络内部有很多边缘服务器(接近用户的服务器)提供服务,现在的cdn有些还会帮忙压缩静态资源,把jpg,png之类的图片转成webp和avif,浏览器不支持的话再降级到原来的图片

内容分发分为静态和动态资源,静态资源(一直不会改变的东西)静态资源可以从服务器请求到cnd,进行缓存,后续就不再需要请求了,动态资源有些cnd会提供运行中在cdn 上的接口。

安全方面,ddos攻击,cdn采用任播的方式,服务器对外都拥有一个相同的ip地址,当有攻击时,将流量转移到未超载的服务器上。

2、DNS补充:DNS叫做dns域名解析(觉得有兴趣的可以了解,不做要求哦,我只是想到了就写下了)

域名系统作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

当我们在浏览器地址栏中输入某个Web服务器的域名时。用户主机首先用户主机会首先在自己的DNS高速缓存(浏览器缓存,本地host文件)中查找该域名所应的IP地址。

如果没有找到,则会向网络中的某台DNS服务器查询,DNS服务器中有域名和IP地映射关系的数据库。当DNS服务器收到DNS查询报文后,在其数据库中查询,之后将查询结果发送给用户主机。

3、域名的层级关系

层级关系特点

因特网采用层次树状结构的域名结构

  • 域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。
    • 每一级的域名都由英文字母和数字组成,不超过63个字符,不区分大小写字母。
    • 级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。
    • 完整的域名不超过255个字符。
  • 域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。
  • 各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理。

因特网的域名空间

image.png 域名服务器可以划分为以下四种不同的类型:

  • 根域名服务器 根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有的顶级域名服务器的域名及其IP地址。因特网上共有13个不同IP地址的根域名服务器。当本地域名服务器向根域名服务器发出查询请求时,路由器就把查询请求报文转发到离这个DNS客户最近的一个根域名服务器。这就加快了DNS的查询过程,同时也更合理地利用了因特网的资源。
  • 顶级域名服务器 这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时就给出相应的回答(可能是最后的结果,也可能是下一级权限域名服务器的IP地址)。
  • 权限域名服务器 这些域名服务器负责管理某个区的域名。每一个主机的域名都必须在某个权限域名服务器处注册登记。因此权限域名服务器知道其管辖的域名与IP地址的映射关系。另外,权限域名服务器还知道其下级域名服务器的地址。
  • 本地域名服务器 本地域名服务器不属于上述的域名服务器的等级结构。当一个主机发出DNS请求报文时,这个报文就首先被送往该主机的本地域名服务器。本地域名服务器起着代理的作用,会将该报文转发到上述的域名服务器的等级结构中。本地域名服务器离用户较近,一般不超过几个路由器的距离,也有可能就在同一个局域网中。本地域名服务器的IP地址需要直接配置在需要域名解析的主机中。

4、DNS 域名解析过程

域名解析包含两种查询方式,分别是递归查询迭代查询

递归查询

如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。

我们以一个例子来了解DNS递归查询的工作原理,假设图中的主机 (IP地址为m.xyz.com) 想知道域名y.abc.com的IP地址。

  • 1、主机首先向其本地域名服务器进行递归查询
  • 2、本地域名服务器收到递归查询的委托后,也采用递归查询的方式向某个根域名服务器查询。
  • 3、根域名服务器收到递归查询的委托后,也采用递归查询的方式向某个顶级域名服务器查询。
  • 4、顶级域名服务器收到递归查询的委托后,也采用递归查询的方式向某个权限域名服务器查询。

过程如图所示:

image.png

迭代查询

当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询。

迭代查询过程如下:

  • 1、主机首先向其本地域名服务器进行递归查询
  • 2、本地域名服务器采用迭代查询,它先向某个根域名服务器查询。
  • 3、根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器的IP地址。
  • 4、本地域名服务器向顶级域名服务器进行迭代查询
  • 5、顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址。
  • 6、本地域名服务器向权限域名服务器进行迭代查询
  • 7、权限域名服务器告诉本地域名服务器所查询的域名的IP地址。
  • 8、本地域名服务器最后把查询的结果告诉主机

过程如图所示:

image.png

(三)websoket

websoket 协议 是http协议的升级版本,建立websocket 需要先通过http协议建立连接。它能够在单个 TCP 连接上进行全双工通信。它位于 OSI 模型的应用层。WebSocket 对象提供了创建和管理与服务器的 WebSocket 连接的 API,以及在连接上发送和接收数据的能力。要构造一个 WebSocket,可以使用 WebSocket() 构造函数。

举例:客户端和服务端之间使用 WebSocket 进行通信。

服务端代码 (Node.js):

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

server.on('connection', (socket) => {
  socket.on('message', (message) => {
    console.log(`Received message => ${message}`);
  });
  socket.send('Hello from server!');
});

客户端代码 (JavaScript):

const socket = new WebSocket('ws://localhost:8080');

socket.addEventListener('open', (event) => {
  socket.send('Hello from client!');
});

socket.addEventListener('message', (event) => {
  console.log(`Received message => ${event.data}`);
});

上面的代码中,服务端使用 Node.js 的 ws 库创建了一个 WebSocket 服务器,监听 8080 端口。当客户端连接到服务器时,服务器会发送一条消息给客户端。同时,服务器也监听来自客户端的消息。

客户端使用浏览器内置的 WebSocket 对象连接到服务器,并发送一条消息给服务器。同时,客户端也监听来自服务器的消息。

四、网络安全

1、加密对称加密和非对称加密,对称加密和非对称加密是两种常用的加密方式。

对称加密中,加密和解密使用的秘钥是同一个。这意味着,发送方和接收方都使用相同的秘钥来加密和解密信息。对称加密的优点是速度快,但缺点是双方都需要事先知道秘钥,因此秘钥的分发可能会成为一个问题。

非对称加密中,采用两个密钥,一般使用公钥进行加密,私钥进行解密。这意味着,发送方使用接收方的公钥来加密信息,而接收方使用自己的私钥来解密信息。非对称加密的优点是安全性高,因为只有拥有私钥的人才能解密信息。但缺点是速度相对较慢。

2、密码散列函数是一种加密技术,它能够将任意长度的输入数据转换为固定长度的输出数据。这个输出数据通常被称为散列值、消息摘要或指纹。密码散列函数的特点是单向性,也就是说,给定一个散列值,无法通过计算得出输入值。

密码散列函数通常用于验证数据的完整性。例如,在存储用户密码时,系统不会直接存储用户的明文密码,而是存储密码的散列值。当用户登录时,系统会计算用户输入的密码的散列值,并与存储的散列值进行比较。如果两者相同,则验证成功。

3、如何实现身份验证

a)数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证

b)数字签名 (指纹) =私钥加密 (密码散列函数 (原文) ) ,消息=原文+数字签名

c)一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改

3、补充一下实际开发中,通信的方式

采用非对称加密+对称加密的方式,具体过程如下

  • client 端发送网络请求

  • server 返回一个CA证书 + 公钥

  • client 用机构认证的公钥认证sever的签名是否正确

  • client生成一个密钥R,用服务端公钥对密钥进行加密,server 通过服务器的私钥去破解获得密钥R

  • 后续通讯用密钥R加密

这里面的CA验证,采用的就是课程总老师说的PKI(公钥基础设施),PKI简单理解就是身份验证,通信中对CA证书的验证是PKI(公钥基础设施)的一个重要组成部分。PKI提供了一种使用数字证书验证远程站点身份的方法。它使用证书颁发机构(CA)来验证信息,并使用数字签名进行签名,以确保信息和签名的安全。因此,CA证书验证是PKI中的一个重要步骤。


也算是该写的都写了,我好棒!!加油!!

ps:文章中的图有的是网上找的,强迫症患者忽略我的水印,关注知识即可~~