计算机网络基础 | 青训营

46 阅读5分钟

计算机网络基础 | 青训营

案例小知识

image-20230414233746818

ISP 可以理解为我们的运营商服务器

网络基础

网络组成部分:

  1. 主机: 客户端(提供接受信息)/服务端
  2. 路由器 转发信息
  3. 网络协议 提供统一格式 方便负责信息的编解码

电路交换&分组交换

  • 电路交换有节点的链路占用带宽和资源,有资源利用的问题,如果节点过多会降低质量和速度
  • 分组交换 不用预留资源 ,采用小报文的方式在队列分组交换,传到各个节点之后由主机来将报文拼接

网络分层

每一层对于上一层都是黑盒的,每一层不需要关心其它层的东西 专注于自己的东西

  1. 应用层 (快递内容)
  2. 运输层 (卡车)
  3. 网络层 (高速公路)
  4. 数据链路层
  5. 物理层

协议

协议可以理解成为网络的语言,双方以同一协议来定义交换报文的内容和顺序等 可以让双方可以通过协议的方式沟通。

标头和载荷

寄件/收件 标头记录包裹的地址电话等

载荷相当于包裹内容

TCP协议格式

image-20230414235658378

Web中的网络

Http 1-3的变化

http基本结构

下图是http1/1.1的请求模式,Http是明文协议 使用的是经典的请求响应模型,导致无法在一条连接无法复用且效率不高

image-20230415000346801

http1.1无法多路复用的案例

image-20230415000708864

如果服务器交替响应 main.js 和style.css

http2

在http 2 中解决了这个问题 它将多个响应拆到了一个一个帧里,可以标识那个请求的某内容 来让http可以多路复用

image-20230415000837897

帧的结构:

  1. 前三位是长度
  2. 第四个字节标识类型
  3. 第六个字节第一个是保留位,后面的31代表帧的流id
  4. 通过帧的头部信息可以分析为在哪个流 可以在流中拿到对应的数据

image-20230415000942781

帧带来的好处 :

  1. 调整响应传输的优先级
  2. 头部压缩
  3. Server push

为什么还会有Http3? 因为2 不够快 还是会出现TCP上的对头堵塞

image-20230415001456248

TCP 有丢包重传机制 导致了尽管包1丢包不影响 0 13 的style.css 但是还是会卡在包1重传 导致阻塞

image-20230415001735624

Http3:QUIC( quick UDP internet Connection)

将TLS作为本身的一部分,解决tcp和tls 需要互相握手的概念,QUIC有独立的流 解决了对头阻塞的问题 ,而且解决了rtt顺序问题 达到可以首次连接1rtt 第二次连接0rtt的访问

image-20230415002226738

image-20230415002233317

总结

  1. Http1.1 解决了http1 的响应后关闭连接,改成了不关闭连接
  2. http2 提出了其中帧和头部压缩,解决了1.1不能多路复用的问题 但是还有头部阻塞问题
  3. Http3 使用quic 解决了头部阻塞问题 用独立的流解决了头部阻塞问题

协议外的因素

物理的距离有很大的因素,这个时候CDN就出现了 服务器可以承受的流量是有限的,

CDN: 内容分发网络 就起到了作用 。

image-20230415003452924

image-20230415003603183

只需要在几个主要的城市的服务器部署cdn 只需要两次跳跃就可以分发到国内的任何位置上去

那么如何做到北京的人只访问北京的服务器呢 ? 要在DNS 上做文章

DNS 劫持

要加速的域名重新定向到CDN厂商的域名解析服务,CDN厂商根据来源来确定CDN服务器的IP 之后让用户直接访问最近的CDN服务器。

并不一定是离得近就一定合适,服务器的网络解析是很复杂的 所以这个时候大部分站点都会提出策略

image-20230415003857954

image-20230415003937796

CDN 可以解决物理层面的问题 。但是很复杂切需要付费 流量很贵

WebSocket

他是从HTTP协议升级而来的一个协议

  • 它可以有状态的持久连接
  • 服务端可以自动推送消息
  • 用ws 发信息要比http的延时低

简单的实例

image-20230415004203601

image-20230415004208472

网络安全

三要素

  1. 机密性 : 攻击者无法获得通信内容
  2. 完整性: 攻击者对内容进行篡改的是能被发现
  3. 身份验证: 让攻击者无法伪装成通信的任意一方

常见的加密中有两种

  1. 对称加密

    • 加密和解密用同样的秘钥
  2. 非对称加密

    • 加密和解密使用不同的秘钥(公钥/私钥),而且公钥加密只能用私钥解密,私钥加密之后能用公钥解密

密码散列函数(hash函数)

  1. 输入任意长度的内容
  2. 输出固定长度的hash值
  3. 找到两个不同的输入使之经过密码三列函数后有相同的hash值在计算上是不可能的

如何实现机密性

已知 网络是明文的

如果双方可以通过明文来商量秘密信息 攻击者也可以

所以想要通过明文通信交换秘密信息 需要双方先有秘钥

如何实现完整性

密码散列函数:

  1. 有明文 M hash函数 H 以及一个秘钥s
  2. 计算H(m+s) 获得hash值 h
  3. 将m和h组合成信息 m+h
  4. 接收方拆分m+h 重新计算 H(m+s)得到h' 对比h'和h 拿到m

如何实现身份验证

  1. 数字签名: 对明文的hash 值使用私钥加密 验证者使用公钥验证
  2. 数字签名(指纹) = 私钥加密(密码散列函数(原文))
  3. 消息 = 原文+数字签名

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

构成PKI的要素只有三个

构成PKI的主要要素就是下面三个概念

  1. 证明书
  2. 认证机关
  3. 证书库

HTTPS

把http的明文换成密文 再验证身份就是https

https = http + tls

tls = 身份验证+解密

服务端身份验证靠 pki,客户端身份验证靠http 协议

小结