计算机网络概论 | 青训营笔记
——通过蟹堡王了解计算机网络的运行机制
1、分析方法
1)自底向上:
- 从简单开始,逐渐变复杂
- 将模块逐步拼凑成一个系统
2)自顶向下
- 从复杂开始,逐渐变简单
- 从复杂的系统问题入手,拆分为模块问题
2、计算机网络基础
1)网络组成部分
- 主机:客户端和服务端
- 路由器
- 网络协议
- 交换机
2)网络结构:网络的网络
- 比奇堡和小区网络:本地网络
- 北京和上海分店+比奇堡:三个本地网络节点的网络
- 全国通信网络:本地网络的网络
- 区域网络、城域网和广域网
3)信息交换方式:电路交换 & 分组交换
4)网络分层:物理层、链路层、网络层、运输层、应用层
- 快递员不关心包裹内容(应用层)
- 卡车司机不关心车厢里拉的是什么(运输层)
- 高速公路不关心开的什么车(网络层)
5)协议:协议的存在依赖于连接
协议定义了在两个或多个通信实体之间交换的报文格式和顺序,以及报文发送和/或接受一条报文或其他事件所采取的动作。
网络协议基本结构:标头和载荷 --> 标头:快递面单,载荷:包裹内的东西
6)TCP协议格式
3、Web中的网络
1)HTTP协议
2)HTTP连接模型(请求响应模型):容易存在队头堵塞问题(Head of Line Blocking)
HTTP 1.1: 无法多路复用
// main.js
console.log('hello world')
/* style.css */
body {
color: red;
}
HTTP 2: 帧 (前三个字节:载荷长度、第四个字节:类型、第五个字节:类型的对应的Flags、第六到第九字节:(第1位:保留位、第2-32位:流ID)、随后的的8192字节:载荷
body {
console.log('hello world')
color: red
} =>
request = style.css, content = 'body {
request = main.js, content = 'console.log('hello world')'
request = style.css, content = 'color: red'
request = style.css, content='}'
-
调整相应传输的优先级
- 头部压缩
- Server Push
HTTP 2: 3 RTT 启动
-
HTTP 客户端:我要和大哥说话
- TCP服务端默默对HTTP客户端说,我知道你很急,但是你别急
- TCP客户端:嗨!服务端,你在吗?
- TCP服务端:嗨!客户端,我在,你在吗?
- TLS客户端:Hello! 能给我把钥匙吗?
- TLS服务端:Hello!给!你的钥匙!
- HTTP客户端:终于到我了,我要index.html
HTTP 3: QUIC
-
Quick UDP Internet Connection
- 现存网络设备对 TCP 和 UDP 支持已经僵化
- UDP 不靠谱 但是 QUIC 靠谱
- QUIC 可以为除 HTTP 协议意外的应用层协议提供支持
HTTP 3: QUIC - 1 RTT
QUIC 第一次访问
- HTTP客户端:我要和大哥说话!
- QUIC客户端:嗨!服务器,你在吗?在的话能给我把钥匙吗?
- QUIC服务端:嗨!客户端,我在,这是你的钥匙!
- HTTP客户端:今天这么快?我要index.html
- QUIC服务端(偷偷告诉客户端):这还有把钥匙,下次找我可以不用问,直接用
CDN :DNS 劫持
- 域名解析一般由网站自己处理
- 要加速的域名则重定向到CDN 厂商的域名解析服务处理
- CDN 厂商根据来源确定最近的CDN服务器的IP
- 用户直接访问最近的CDN 服务器