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

120 阅读8分钟

01前言&课程介绍

课程介绍

  • 通过一个示例建立对计算机网络的整体认识

  • 建立对网络协议分层的认知

  • 分析HTP1、2、3的关系

  • 介绍CDN运行的基本原理

  • 了解网络安全的最基本原侧

分析方法

自底向上

  • 从简单开始,逐渐变复杂
  • 将模块逐步拼凑成一个系统

自顶向下

  • 从复杂开始,逐渐变简单
  • 从复杂的系统问题入手,拆分为模块问题

02蟹堡王帝国

你是否看过海绵宝宝呢?现在蟹老板有一个小目标。你是一个军师,需要为他实现这个目标。你执行了一个三步走战略

image.png

image.png

image.png

image.png

03网络基础

网络组成部分

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

网络结构:网络的网络

  • 比奇堡和小区网络:本地网络
  • 北京和上海分店+比奇堡:三个本地网络节点的网络
  • 全国通信网络:本地网络的网络
  • 区域网络、城域网和广域网

信息交换方式

  1. 电路交换
  2. 分组交换(可以看成传真)

网络分层

  • 快递员不关心包裹内容
  • 卡车司机不关心车厢里拉的是什么
  • 高速公路不关心开的什么车

网络层、运输层和应用层。每一层都有对自身层级逻辑的封装,对于上一层来说相当于一个黑盒子。

网络层相当于高速公路,他不在乎上面跑的是什么车。

运输层相当于一个卡车,不在乎里面运输的是什么,也不关心有没有路可以走。

应用层可以看作是快递公司,不需要操心包裹和卡车怎么运行。

协议

两个实体必须能交换信息,否则没有意义。计算机都是以二进制进行存储数据的。可以类比人类社会中的语言。

image.png

标头和载荷

image.png

HTTP协议

  • HTTP(Hyper Text Transfer Protocol):  全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
  • HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的
  • 协议:  为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式

HTTP协议示例(第一行)

右边的左半部分是以十六进制展现的结果

image.png

HTTP协议示例:链路层-本地帧头部(第二行)

另一个是以ascall码值展现的数据

image.png

HTTP协议示例:链路层-IP协议头部(第三行)

image.png

HTTP协议示例:运输层-TCP协议头部(第四行)

image.png

HTTP协议示例:应用层-HTTP协议头部(第五行)

image.png

TCP协议格式

http2重要的一点:在http协议中需要留意的一个重点是http1.1及以前的版本中,头部和载荷是通过换行和回车来划分的

image.png

小结

  • 网络组成部分:主机、路由器、交换机等组成
  • 网络结构:网络的网络
  • 信息交换方式:电路交换和分组交换(主要)
  • 网络分层:物理层、链路层、网络层、运输层和应用层(分清职责,降低各层的使用成本)
  • 网络协议:标头和载荷(每一层的标头和载荷视为这一层的载荷,并添加自己的标头)

04Web中的网络

HTTP1协议

image.png

image.png

HTTP1.1:无法多路复用

image.png

HTTP2:帧

image.png

结构图

image.png

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的帧

HTTP2: 3RTT启动

image.png

HTTP 3: QUIC

image.png

HTTP 3:QUIC-1 RTT

image.png

HTTP:QUIC-0 RTT

image.png

CDN:你无法突破物理极限的

image.png

CDN:你的钱包够鼓吗?

image.png

CDN:你,够强大吗?

image.png

CDN:最多跳两次

image.png

CDN:DNS劫持

image.png

WebSocket

image.png 小结

  • HTTP123的演进历史
  • CDN解决了HTTP协议之外的问题
  • WebSocket从HTTP协议升级而来

05网络安全

网络安全:三要素

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

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

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

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

  • 输入:任意长度的内容

  • 输出:固定长度的哈希值

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

网络安全:机密性

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

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

  • 蟹老板向银行发起了转账请求

  • 银行需要确认

    • 这个请求真的是蟹老板发起的
    • 目标账户和转账金额没有被篡改

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

  • 已知:网络是明文的

  • 如果双方可以通过明文通信商量出秘密信息,那么攻击者也可以

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

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

  • 密码散列函数性质:找到两个不同的输入使之经过密码散列函数后有相同的哈希值,在计算上是不可能的
  • 有明文m,密码散列函数H
  • 计算H(m)获得哈希值h
  • 将m和h组合成新信息m+h
  • 接收方拆分m+h,重新计算H(m)得h',对比h'和h

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

  • 有明文m,密码散列函数H,以及一个密钥s
  • 计算H(m+s)获得哈希值h
  • 将m和h组合成新信息m+h
  • 接收方拆分m+h,重新计算H(m+s)得h',对比h'和h
  • 所以想要实现完整性,通信双方需要先有秘密信息

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

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

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

  • 数字签名:对明文内容的哈希值使用私钥加密,验证者使用公钥验证
  • 数字签名(指纹)=私钥加密(密码散列函数(原文))
  • 消息=原文+数字签名
  • 一般用于对公开内容(如包含公钥的证书)进行数字签名,防止篡改

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

  • 可信的人验证蟹老板的公钥
  • 那谁验证可信的人的公钥?
  • 根证书是证书链的尽头
  • 验证的一连串证书称为证书链
  • 分发证书、验证证书的基础设施称为PKI,Public Key Infrastructure
  • 所以想要实现身份验证,通信双方需要先有秘密信息,即根证书中的公钥

网络安全:HTTPS

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

HTTPS HTTP TLS TLS=身份验证+加解密 身份验证靠PKI

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

小结

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