共计 3489 个字符,预计需要花费 9 分钟才能阅读完成。
前端需要了解的计算机网络知识
概述
-
七层网路协议
- 物理层 -> 数据链路层 -> 网络层 -> 传输层 -> 会话层 -> 表示层 -> 应用层
-
http 和 tcp
- http 是应用层协议,tcp 是传输层协议
- 常见的应用层协议还包括:telnet,ssh,smtp,pop,ssl/tls,mime
常见传输层协议还有:udp,sctp
Web 和 HTTP
HTTP 概况
- HTTP 服务器并不保存关于客户的任何信息,因此 HTTP 是一个无状态协议(stateless protocol)
非持续连接和持续连接
- 采用非持续连接的 http 是每个 tcp 最多允许传输一个对象
HTTP 报文格式
-
HTTP 请求报文
-
请求行 = 方法 +sp+URL+sp+ 版本 +cr+lf
- GET /somedir/page.html HTTP/1.1
-
首部行 = 首部字段名 +sp+ 值 +cr+lf
- Host:www.someschool.edu
- Connection:close
- User-agent:Mozilla/5.0
- Accept-language:fr
- 空行 =cr+lf
- 实体主体
-
-
HTTP 响应报文
-
状态行 = 版本 +sp+ 状态码 +sp+ 短语 +cr+lf
- HTTP/1.1 200 OK
-
首部行 = 首部字段名 +sp+ 值 +cr+lf
- Connection:close
- Date:Tue,09 Aug 2011 15:44:04 GMT
- Server:Apache/2.2.3 (CentOS)
- Last-Modified:Tue,09 Aug 2011 15:11:03 GMT
- Content-Length:6821
- Content-Type:text/html
- 空行 =cr+lf
- 实体主体
-
http 状态码
- 101 websocket 双向通信
- 200 成功
- 204 没有响应体
- 206 断点续传
- 301 永久重定向
- 302 临时重定向
- 304 缓存 只能服务端设置
- 401 没登录没有权限
- 403 登录后没有权限
- 404 没有资源
- 405 请求方法不存在或不支持
- 502 负载均衡
发送请求的方式
- 浏览器 默认 get 请求
- postman
- 命令行 mac curl
管线化
- 管线化不需要等待上一次请求得到响应就可以执行下一次请求,实现并行发送请求。只有 GET 和 HEAD 请求可以进行管线化,而 POST 有所限制
请求方法 RestfulApi 根据不同的动作 做对应的处理
- get 获取资源
- post 新增资源
- put 上传文件 修改(restful)
- delete 删除资源
- options 跨域出现 复杂请求时出现 仅是 get/post 都是简单请求 但加上自定义头 header 就会变成复杂请求
用户与服务器交互:cookie
-
cookie 组件
- 在 http 响应报文中的一个 cookie 首部行
- 在 http 请求报文中的一个 cookie 首部行
- 在用户端系统中保留有一个 cookie 文件,并由用户的浏览器进行管理
- 位于 Web 站点的一个后端数据库
-
cookie 安全性
- cookie 是存放在浏览器上的 服务器可以设置 每次请求时都会带上 cookie
- cookie 不安全 不能存放敏感信息
- session 服务端 (基于 cookie) 服务器的内存中,存到 redis 数据库
Web 缓存
- Web 缓存器 (Web cache) 也叫代理服务器(proxy server),它能够代表初始 web 服务器来满足 http 请求的网络实体
-
http 缓存
-
强制缓存
- Cache-Control && Expires
-
对比缓存
- Last-Modified & If-Modified-Since
- ETag & If-None-Match
-
-
Cache-Control
- private 客户端可以缓存 - public 客户端和代理服务器都可以缓存 - max-age=60 缓存内容将在 60s 后失效 - no-cache 需要使用对比缓存验证数据,强制向源服务器再次验证(没有强制缓存) - no-store 所有内容都不会缓存,强制缓存和对比缓存都不会触发(不缓存)
DNS
- DNS 是域名解析系统 Domain Name System
-
DNS 工作原理
-
分布式层次数据库
- 根 DNS 服务器
- TLD 顶级域 (DNS) 服务器 com org edu
- 权威 DNS 服务器
- 本地 DNS 服务器与三个服务器的查询关系 从请求主机向本地 DNS 服务器发出的查询是递归查询,从本地 DNS 服务器向其他三种服务器查询为迭代查询
-
DNS 缓存
- 在一个请求链中,当 DNS 服务器缓存了一台主机名 /IP 地址对,另一个对相同主机名的查询就能够提供所要求的 IP 地址,本地域名服务器一般会缓存顶级域名服务器的映射
-
-
DNS 记录和报文
- 资源记录 (Resource Record,RR) 是一个包含了 (Name,Value,Type,TTL) 的四元组
-
DNS 报文
-
12 字节
- 标识符
- 标志
- 问题数
- 回答 RR 数
- 权威 RR 数
- 附加 RR 数
-
查询的名字和类型自窜
- 问题(问题的变量数)
-
对查询的响应中的 RR
- 回答(资源记录的变量数)
-
权威服务器的记录
- 权威(资源记录的变量数)
-
可被使用的附加 ” 有帮助 ” 的信息
- 附加信息(资源记录的变量数)
-
-
DDos 攻击
- 分布式拒绝服务 (DDos) 带宽洪泛攻击
TCP 连接
TCP 报文段结构
- 源端口号 + 目的端口号
- 序号
- 确认号
- 首部长度 + 保留未用 +URG+ACK+PSH+RST+SYN+FIN+ 接收窗口
- 因特网校验和 + 紧急数据指针
- 选项
- 数据
TCP 连接管理(三次握手)
- 第一步:客户端的 TCP 首先向服务器端的 TCP 发送一个特殊的 TCP 报文段
- 第二步:一旦包含 TCP SYN 报文段的 IP 数据报到达服务器主机(假设它的确到达了),服务器会从该数据包中提取出 TCP SYN 报文段,为该 TCP 连接分配 TCP 缓存和变量,并向该客户 TCP 发送允许连接的报文段
- 第三步:在收到 SYNACK 报文段后,客户也要给该连接分配缓存和变量
IP 地址
IPv4 vs IPv6
-
IPv4 数据报格式
- 版本(0-4)+ 首部长度(4-8)+ 服务类型(8-16)+ 数据报长度(16-31)
- 16 比特标识(0-16)+ 标志(16-19)+13 比特片偏移(19-31)
- 寿命 TTL(0-8)+ 上层协议(8-16)+ 首部检验和(16-31)
- 32 比特源 IP 地址
- 32 比特目的 IP 地址
- 选项(如果有的话)
- 数据
-
IPv6 数据报格式
- 版本(0-4)+ 流量类型(4-12)+ 流标签(12-31)
- 有效载荷长度(0-16)+ 下一个首部(16-24)+ 跳限制(24-31)
- 源地址(128 比特)
- 目的地址(128 比特)
- 数据
IPV4 编址
- 子网:不跨越路由器的路由器接口和主机接口就形成一个子网
- 子网掩码:IP 地址为某个子网分配的一个 223.1.1.0/24 的地址,这种 /24 的记法,称为子网掩码(network mask),指示了 32 比特中的最左侧 24 比特定义了子网地址
class | NetIDs | Blocks |
---|---|---|
A | 10 | 1 |
B | 172.16-172.31 | 16 |
C | 192.168.0-192.168.255 | 256 |
CDN
-
CDN 操作
- 当用户主机中的一个浏览器指令检索一个特定的视频 (由 URL 标识) 时,CDN 必须截获该请求,以便能够确定此时是混合用于该客户的 CDN 服务器集群以及将客户的请求重定向到该集群的某台服务器
-
集群选择策略
- 任何 CDN 部署,其核心是集群选择策略(cluster selection strategy),即动态地将客户定向到 CDN 中服务器集群或数据中心的机制。
-
常见策略:
- 周期性实时测量;IP 任播(客户与 CDN 服务器匹配)
网络安全
密码学基础
-
对称密钥密码机制
- 对称密钥系统(symmetric key system) 双方密钥是相同的并且是秘密的
-
块密码 将要加密的报文处理成 k 比特的块
- DES(Data Encrypiton Standard) 数据加密标准
- AES(Advanced Encryption Standard) 高级加密标准
-
公开密钥系统
- 公开密钥系统(public key system) 使用一对密钥:一个密钥为双方都知道,另一个密钥只有一方知道
-
RSA 算法(Ron、Adi、Leonard 三个人名)
- 大数分解和素性检测
-
密码散列函数
-
MD5 散列算法
- 填充 -> 添加 -> 初始化累加器 -> 循环
- SHA-1(Security Hash Algorithm)
-
-
SSL
- SSL(Secure Socket Layer) 安全套接字层
-
SSL 握手
- 1)客户发送它支持的密码算法的列表,连通一个客户的不重数
- 2)从该列表中服务器选择一种对称算法,一种公钥算法和一种 MAC 算法,并把选择以及证书和一个服务器不重数返回给客户
- 3)客户验证该证书,提取服务器公钥,生成一个前主密钥(Pre-Master Secret),用服务器的公钥加密该前主密钥,并将加密的 PMS 发送给服务器
- 4)使用相同的密钥导出函数,客户和服务器独立地从 PMS 和不重数中计算主密钥(Master Secret),将该 MS 切片申城两个密码和两个 MAC 密钥
- 5)客户发送所有握手报文的一个 MAC
- 6)服务器发送所有握手报文的一个 MAC
正文完
发表至: javascript
2019-09-17