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

70 阅读6分钟

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

计算机网络基础

网络组成部分

主机:客户端和服务端 :负责提供信息和接受信息

路由器:负责转发主机之间的信息

网络协议:负责提供统一格式,方便主机和路由器编码和解码

网络结构:网络的网络

区域网络,城域网,广域网

信息交换方式

电路交换

分组交换(计算机网络使用)

网络分层

计算机网络分为五层 从高到低分别是 物理层,内容层,网络层,运输层,应用层

协议

协议定义了两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他时间所采取的动作。

有两种 HTTP 报文的类型,请求与响应,每种都有其特定的格式。

标头和载荷

HTTP协议示例

第二行:链路层-本地帧头部

第三层:链路层-IP协议头部

第四层:运输层-tcp协议头部

第五行:应用层-HTTP协议头部

报文 = 链路层头 +IP协议头部 +tcp协议头部+HTTP协议头部 +HTTP正文

TCP协议格式

Web中的网络

HTTP协议

HTTP/1.0 默认为每一对 HTTP 请求/响应都打开一个单独的 TCP 连接。当需要连续发起多个请求时,这种模式比多个请求共享同一个 TCP 链接更低效。

image.png

红色的是请求

第一行称为起始行,包含 GET / HTTP1.1 三个要素

分别代表 请求的方法 资源路径 http版本

后面到第一空行为止为头部,后面为正文

每一行代表一个头部,使用冒号分隔

蓝色的是响应

第一行是状态行

第一行仨个要素分别代表 http版本 状态码 状态信息

后面是头部

对头堵塞:当前面请求很大,后面的请求要等待

对于这种情况,一般使用多条ttp连接

在客户端(通常指浏览器)与服务器能够交互(客户端发起请求,服务器返回响应)之前,必须在这两者间建立一个 TCP 链接,打开一个 TCP 连接需要多次往返交换消息(因此耗时)。

为了减轻这些缺陷,HTTP/1.1 引入了流水线(被证明难以实现)和持久连接的概念:底层的 TCP 连接可以通过 Connection 标头来被部分控制。

HTTP2:

前三个字节:载荷长度

第四个字节:类型

第五个字节:类型对应的flags

第六到第九字节:第一位:保留位 第2-32:流ID

随后的字节:载荷

HTTP2:帧带来的额外好处

解决了头部运输和对头堵塞

调整响应传输的优先级

头部压缩

serve push

但是不能解决tcp对头堵塞的问题

http3

使用quic协议,解决tcp对头堵塞

HTTP流

  1. 打开一个 TCP 连接:TCP 连接被用来发送一条或多条请求,以及接受响应消息。客户端可能打开一条新的连接,或重用一个已经存在的连接,或者也可能开几个新的 TCP 连接连向服务端。
  2. 发送一个 HTTP 报文:HTTP 报文(在 HTTP/2 之前)是语义可读的。在 HTTP/2 中,这些简单的消息被封装在了帧中,这使得报文不能被直接读取,但是原理仍是相同的。
  3. 读取服务端返回的报文信息:
  4. 关闭连接或者为后续请求重用连接。

当 HTTP 流水线启动时,后续请求都可以不用等待第一个请求的成功响应就被发送。然而 HTTP 流水线已被证明很难在现有的网络中实现,因为现有网络中有很多老旧的软件与现代版本的软件共存。因此,HTTP 流水线已被在有多请求下表现得更稳健的 HTTP/2 的帧所取代。

在HTTP之外仍然有很多影响web性能的因素

无法突破物理极限

价格

服务器是否强大

如何让北京用户使用北京服务器

DNS劫持

域名解析一般由网站自己处理

要加速的域名则重定向到cdn厂商的域名解析服务处理

CDN厂商根据来源确定最近的cdn服务器的ip

用户直接访问最近cdn服务器

WebSocket

与HTTP协议不同,是由HTTP协议升级而来的

有状态的持久连接

服务端可以主动推送消息

用websocket发送信息延迟比HTTP低

WebSocket 是基于TCP/IP协议,独立于HTTP协议的通信协议。

WebSocket 是双向通讯,有状态,客户端一(多)个与服务端一(多)双向实时响应(客户端 ⇄ 服务端)。

WebSocket 是应用在浏览器的 Socket (是 Socket 模型接口的实现),Socket 是一个网络通信接口 (通信规范)。

网络安全

网络安全三要素

机密性:攻击者无法获知通信内容

完整性:攻击者对内容进行篡改时能被发现

身份验证:攻击者无法伪装成通信双方的任意一方与另一方通信

对称机密和非对称加密

对称加密:加密,解密用同样的密钥

非对称加密:加密,解密使用不同的密钥(公钥和私钥),公钥加密只能用私钥解密,私钥加密只能用公钥解密

密码散列函数(哈希函数)

输入:任意长度的内容

输出:固定长度的哈希值

性质:找个两个不同的输入使之经过密码散列函数后相同的哈希值,在计算上是不可能的

如何实现机密性

想要通过明文通信交换秘密信息,双方必须要有秘密信息

如何实现完整性

想要实现完整性,双方必须要先有秘密信息

如何实现身份验证

根证书是证书链的尽头

验证的一连串证书称为证书链

想要实现身份验证,双方必须要先有秘密信息,即根证书中的公钥

HTTPs

把HTTP的明文换成密文,再验证身份,即HTTPs

HTTPs = HTTP +TLS

TLS = 身份验证 + 加解密

身份验证靠PKI

服务端身份验证靠PKI,客户端身份验证靠HTTP协议