1计算机网络 | 青训营笔记

101 阅读5分钟

1 前言&课程介绍

  • 描述一个复杂系统通常有两种方式:自底向上、自顶向下
    • 自底向上:用于构建对计算机网络的基本认知。从一个个基础节点开始,不断增加复杂度,直到构建出完整的计算机网络
    • 自顶向下:用于解释现成网络应用协议的特性,工作原理等。从最高层次的实际需求开始描述如何构建满足实际需求的应用

2 蟹堡王帝国

  • 通过构建蟹堡王帝国类比计算机网络的构建,建立基本认知(自底向上)

3 计算机网络基础

  • 网络组成部分:
    • 主机:客户端和服务端 负责提供信息或接收信息
    • 路由器:负责转发主机之间的信息
    • 网络协议:提供统一的格式,方便路由器和主机对信息进行编码和解码
  • 网络结构:网络的网络
    • 区域网络->城域网络->广域网
  • 信息交换方式:电路交换&分组交换
    • 电路交换:需要建立电路连接,预留资源(带宽)
    • 分组交换:√
      • 接收到新的分组后会加入输出队列,按顺序输出。当队列满了,丢弃新到的分组(即丢包)
      • 大的报文分解成n个小的报文,小的报文经过分组通过网络送到目的地,再由主机上的软件把分组拼成完整的报文
  • 网络分层
    • 应用层、运输层、网络层、数据链路层、物理层
    • 对于上一层的调用者无需关心下一层中可能出现的任何问题
  • 协议
    • 协议的存在依赖于连接
    • 协议的存在避免了用错误的方式解读数据
    • header&payload
      • HTTP协议示例:
        • Null/Loopback:说明这个帧是本机的帧,源地址和目标地址都是本机,不需要经过别的交换机
        • 链路层的数据18 00 00 00:24(十进制),代表这个链路层帧使用的是ipv6
        • IP层:使用ipv6,Src: ::1, Dst: ::1表示源IP和目标IP都是本机地址。IP协议的头部为5-44字节,包含IP协议的版本、源IP地址、目标IP地址、载荷长度等信息
        • TCP协议层:头部为20字节,包含源端口号、目标端口号、序列号、头部长度、载荷长度信息等
        • HTTP协议层:同样包含头部和载荷两部分信息。头部中包含请求路径、请求域名等
        • 报文 = 链路层的头+IP协议的头+TCP协议的头+HTTP协议的头+HTTP正文
    • TCP协议格式
      • 对HTTP2很重要
      • 注意在HTTP协议中,HTTP1.1和以前的版本中,头部和载荷是通过两个换行符和回车符进行划分;而TCP和IP协议并不是
      • 以TCP协议为例:TCP中头部和载荷的分割靠data offset部分,这部分相对于TCP数据包来说是固定的,永远在第13、14字节;而HTTP中却是要对HTTP报文做解析,将二进制数据转化为ASCII数据后,发现连续的换行符和回车符才能确定头部和载荷的边界

4 Web中的网络

  • 对于web应用来说,除了HTTP协议还有很多因素影响web的性能,比如物理距离、TCP层面的路由选择等
  • HTTP协议:
    • 请求:
      • 请求方法/资源路径/HTTP版本
      • 头部名称(不区分大小写):头部值
      • 空行:分割头部和正文
      • 正文(get请求没有正文)
    • 响应
      • 状态行:HTTP版本 状态码 状态信息(可自定义)
      • 头部
      • 空行
      • 正文
  • HTTP连接模型:
    • HTTP报文易理解,TCP难懂,HTTP报文可以用明文(ASCII)展示出来
    • HTTP用来请求响应模型
      • 网络利用率不高,也无法在一条连接上进行多路复用:在完整请求中间插入另一个请求的内容会导致HTTP无法分辨这部分内容是来自哪的请求
      • 请求的头部和响应的头部有很多重复,比如cookie会重复发很多次,这些重复无法压缩,增加报文的体积
    • HTTP1.0:多次建立连接,关闭连接
    • HTTP1.1:无法多路复用
      • 队头堵塞:当一个请求非常大,需要很长时间处理,第二个很小的请求也需要等待第一个请求结束后才能发出,导致很大的资源浪费 HTTP1.1最常用的方案是同时建立多个连接,但成本巨大
    • HTTP2:帧(不同于链路层的帧,但工作方式相似)
      • 帧格式
      • 就有很多类型的帧了
      • 解决了多路复用和队头堵塞的问题,还调整响应传输的优先级,头部压缩,Server Push
      • 但在TCP上还是会有队头堵塞
      • 3 RTT启动,效率很低
    • HTTP3:QUIC
      • 避免了TCP队头堵塞
      • 并将QUIC协议内置进QUIC,降低了握手延迟,可以实现首次1 RTT,二次0 RTT的连接
  • CDN:DNS劫持
    • 拉策略
    • 推策略
    • 从物理层面解决HTTP协议无法解决的问题,提升web应用的性能
  • WebSocket
    • 是除了HTTP协议另一个协议
    • 是有状态的持久连接,可主动推送消息,延迟比HTTP低
    • 是HTTP升级而来的
    • 报文结构

5 网络安全

  • 上面讲的协议都是明文,在一台电脑到另一台电脑的过程中中途经过的所有路由器、交换机都能看到消息的全部内容,甚至丢弃、篡改。明文导致很多行为不能通过网络进行
  • 网络安全:
    • 三要素
      • 机密性
      • 完整性
      • 身份验证
    • 对称加密和非对称加密
      • 区别就在于加密和解密使用的密钥是一个还是一对
      • 非对称:公钥&私钥
    • 密码散列函数(哈希函数)
    • 机密性
      • 加密算法
      • 加密密钥
    • 完整性和身份验证
      • 相互关联
    • 如何实现机密性
      • 需要先有秘密信息
      • 对比哈希值,如果一致,说明没有被篡改
    • 如何实现身份验证
      • 数字签名
      • 非对称加密
      • 密码散列函数(原文)
      • 根证书、证书链
      • PKI
    • HTTPS
      • 服务端身份验证使用PKI,客户端身份验证靠HTTP协议