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

75 阅读5分钟

网络基础

网络的组成部分

  • 主机:客户端和服务端
  • 路由器。
  • 网络协议。

区域网络、城网络、广网络

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

HTTP协议示例:链路层 - 本地帧头部、IP协议头部、TCP协议头部、HTTP协议头部

小结

  • 网络组成部分:由主机、路由器、交换机等组成。
  • 网络结构:网络的网络。
  • 信息交换方式:电路交换和分组交换。
  • 网络分层:分清职责,物理层。电路层。网络层。运输层和应用层。
  • 网络协议:标头和载荷。

Web中的网络

HTTP协议

HTTP连接模型

队头堵塞(Head of Line Blocking)

HTTP1.1:无法多路复用。

HTTP2:帧

  • 前三个字节:载荷长度。
  • 第四个字节:类型。
  • 第五个字节:类型对应的Flags
  • 第六到第九字节:第一位保留位,第2-32位流ID
  • 随后的8192字节:载荷。 HTTP2:帧带来的额外好处:
  • 调整响应传输的优先级。
  • 头部压缩。
  • Server Push HTTP2:队头堵塞,但是在TCP上。
  • TCP包0:包含了(包含了style.css的第1行内容)的HTTP2的帧
  • TCP包1:包含了(包含了main.js的全部内容)的HTTP2的帧
  • TCP包2:包含了(包含了style.css的第2行内容)的HTTP2的帧
  • TCP包3:包含了(包含了style.css的第3行内容)的HTTP2的帧 TCP包1丢包了

HTTP2:3RTT启动

  • HTTP客户端:我要和大哥说话!
  • TCP客户端默默对HTTP客户端说。我知道你很急。那你先别急。
  • TCP客户端:Hi。服务端你在吗。
  • TCP服务端:Hi。客户端。我在。你在吗。
  • TLS客户端:Hello。能给我把钥匙吗。
  • TLS服务端:Hello。给,你的钥匙。
  • HTTP客户端:终于到我了。我要index.html!

HTTP3:QUIC

Quick UDP Internet Connection

  • 现存网络设备对 TCP 和 UDP 支持已经僵化
  • UDP 不靠谱但是 QUIC 靠谱
  • QUIC 可以为除 HTTP 协议以外的应用层协议提供支持

QUIC 第一次访问:

  • HTTP 客户端:我要和大哥说话!
  • QUIC 客户端:嗨!服务端,你在吗?在的话能给我把钥匙吗?
  • QUIC 服务端:嗨!客户端,我在,这是你的钥匙!
  • HTTP 客户端:今天这么快?我要 index.html!
  • QUIC 服务端(偷偷地告诉客户端):这还有把钥匙,下次找我可以不用问,直接用

QUIC 第二次访问:

  • HTTP 客户端:我要和大哥说话!
  • QUIC 客户端:嗨!服务端,你在吗?后面的话我已经用上次你给我的钥匙加密过了,HTTP 那小子肯定要 index.html!
  • QUIC 服务端:嗨!客户端,我在,我知道你要 index.html,给你!
  • HTTP 客户端:?

CDN:DNS劫持

  • 域名解析一般由网站自己处理
  • 要加速的域名则重定向到 CDN 厂商的域名解析服务处理
  • CDN 厂商根据来源确定最近的 CDN 服务器的IP。
  • 用户直接访问最近的 CDN 服务器

WebSocket

  • 有状态的持久连接
  • 服务端可以主动推送消息
  • 用WebSocket 发送消息延迟比 HTTP 低

网络安全

网络安全:三要素

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

网络安全:对称加密和对称加密

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

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

  • 输入:任意长度的内容。
  • 输出:固定长度的哈希值
  • 性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的

网络安全:机密性

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

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

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

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

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

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

  • 签名:用于鉴别身份和防止伪造
  • 非对称加密性质:加密、解密使用不同的密钥(公钥和私钥),而且公钥加密只能用私钥解密、私钥加密只能用公钥解密
  • 蟹老板用自己的私钥对信件进行加密,并发送给海绵宝宝
  • 海绵宝宝使用蟹老板的公钥进行解密,获得原文
  • 保证了机密性、完整性和身份验证

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

  • 可信的人验证蟹老板的公钥

那谁验证可信的人的公钥?

  • 根证书是证书链的尽头

  • 验证的一连吕证书称为证书链

  • 分发证书、验证证书的基础设施称为 PKI,Public Key Infrastructure

  • 所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥

小结

  • 网络安全三要素:机密性、完整性和身份验证
  • 在没有提前交换秘密信息的前提下,无法在不安全的信道交换秘密信息
  • PKI 保证了普通用户不需要“面对面”和根证书机构交换根证书
  • HTTPS 使用 PKI 完成了除客户端身份验证以外的特性,客户端身份验证靠HTTP 协议实现