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

73 阅读6分钟

课程内容:

  • 网络结构
  • TCP/UDP
  • HTTP 1 / HTTP2 / HTTP3 (QUIC)
  • WebSocket
  • CDN
  • 安全(SSL/TLS/基础密码学)

1、网络基础

1、网络组成部分

  • 主机:客户端和服务端【提供信息和接受信息】
  • 路由器【转发主机之间的信息】
  • 网络协议【提供统一的格式,方便路由器和主机进行解码和编码】

2、网络分为:区域网络、城域网、广域网

3、信息交换方式:电路交换、分组交换

4、网络分层5层:物理层、数据链路层、网络层、传输层、应用层

每层有各自的职责,各自的封装,每一层对上一层来讲是黑盒的

5、协议

协议的存在依赖于连接(或者说依赖于两个实体,实体可以是主机或者路由器)

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

报文=链路层头+ip协议的头+tcp协议头+http协议头+http正文

下面的内容对于HTTP2来讲很重要

之前的http版本头\r\n来进行划分的,但是tcp和ip协议的头不是这样的

TCP协议格式

image.png

  • data offset:载荷相对于tcp数据包的偏移量
  • 头部和载荷的分割靠的是data offset

小结:

  • 在计算机网络中什么是分组交换?
  • 网络分层:让职责更加清晰,降低各层的使用成本
  • 网络协议的基本结构:标头和载荷
  • 每一层都会把下一层的标头和载荷看成是本层的载荷,并添加自己的标头

web中的网络

http从1到3的过程,使用哪些技术让其更快

除了http协议之外,还有很多因素影响web的性能,比如:物理距离、路由选择

websocket

请求报文:

  • 起始行(请求方法 资源路径 版本)
  • 头部(名称:值)(名称不区分大小写)
  • 正文

响应报文:

  • 状态行(版本 状态码 状态信息)
  • 头部(头部中的空行将头部和正文分割)
  • 响应体

二进制----转ASCII----对人类友好,但是对机器不友好

http连接模型:(请求-响应模型)

image.png

  • 无法多路复用,头部会有重复
  • http1.1 connection:keep-alive 默认的 但是还是有对头阻塞
  • http管线:允许发送多个,服务器按照顺序响应(有潜在安全问题,性能提升不高,对于解决对头阻塞几乎没有帮助)
  • 对于对头阻塞问题,http1.1常用解决方案是同时建立多个tcp连接,将请求分散在多个tcp连接上,但是建立多个tcp连接的成本比较大;当请求的数量超过tcp连接的数量,仍然需要排队;用户和服务器的带宽是固定的,tcp连接的数量增加的时候,每条tcp连接所能分配的带宽也会相应的减少,完成一个完整http请求的时间也会增加,因此在大部分情况下浏览器会限制一个域名下的tcp连接的数量,通常是6个)

考虑一个问题:在一个tcp连接上,http报文是严格按照顺序的,如果服务器将两个响应交替发送,会有什么样的结果

  • 无法判断这一行是属于哪个请求的

image.png

http2:将多个http请求拆分到帧中,每一个帧可以携带来自不同http请求的数据,这里的帧和数据链路层中的帧是不同的,虽然工作原理很类似;可以标识每个数据包属于哪个请求,进而实现多路复用

image.png

image.png

  • 帧的长度、帧的类型、当前帧的状态、保留位、帧所属流的id、当前帧的载荷
  • 得到流id,判断出载荷属于哪个请求,最终在浏览器或者服务器中重组为完整的请求或响应

http2:帧带来的额外好处(下面可以通过不同的帧来实现)

  • 调整响应传输的优先级
  • 头部压缩
  • server push

为什么出现http3?

  • http2解决了http层面的对头阻塞
  • http2在tcp层面仍然可能出现对头阻塞
  • https是主流,http2会有双倍的握手延迟

image.png

image.png

HTTP 3:QUIC(Quick UDP Internet Connection)运输层协议

  • 解决了各自握手了1RTT(首次)、0RTT(后续),独立的流解决对头阻塞的问题
  • 现存网络设备对TCP和UDP支持已经僵化
  • UDP不靠谱但是QUIC靠谱(没有拥塞控制、顺序保证、重传)
  • QUIC可以为除HTTP协议以外的应用层协议提供支持

image.png

image.png CDN:内容分发网络

  • 地理位置

image.png

image.png

  • 拉策略用户,推策略网站

websocket

  • 有状态的持久连接
  • 服务器可以主动推送消息
  • 用websocket发送消息延迟比http低
  • 需要先使用http协议
  • message事件

image.png

image.png

image.png

image.png

  • websocket可以传输二进制的文件

image.png

网络安全

1、网络安全:三要素

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

2、网络安全:对称加密和非对称加密

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

3、网络安全:密码散列函数(哈希函数)

  • 输入:任意长度的内容
  • 输出:固定长度的哈希值
  • 性质:找到两个不同的输入使之经过密码散列函数之后会有相同的哈希值,在计算上是不可能的
  • 和之前的对称加密和非对称加密不同
  • 根据哈希值不能反推出内容

4、网络安全:机密性

  • 加密需要加密算法和密钥等信息(统称为秘密信息)
  • 网络是明文的,不安全

怎么在不安全的信道交换秘密信息?

5、网络安全:完整性和身份验证

完整性和身份验证相互关联

6、网络安全:如何实现机密性?

  • 已知:网络是明文的
  • 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以
  • 所以想要通过明文通信交换秘密信息,通信双方需要先有秘密信息

7、网络安全:如何实现完整性

image.png

image.png

8、网络安全:如何实现身份验证

image.png 非对称加密效率比较低

image.png

image.png

  • 前提是根证书中的公钥

9、HTTPS

image.png

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

image.png

image.png