网络综述

1. 网络模型

OSI 7 层模型 TCP/IP 4 层模型 协议
应用层
表示层
会话层 应用层 HTTP,FTP等
传输层 传输层 TCP,UDP
网络层 网络层 IP
数据链路层
物理层 网络接口层 MAC

2. 协议

协议 协议名 协议概述
DNS 域名解析协议 将域名指向 IP,便于人们记忆
DHCP 动态主机配置协议 局域网自动分配 IP
FTP 文件传输协议 远程文件共享
HTTP 超文本传输协议 简单请求-响应
HTTPS 安全超文本传输协议 http + ssl
ICMP internet控制信息协议 传输网络本身的消息
SMTP 简单邮件传送协议 基于 FTP 的邮件服务
NAT 网络地址转换 使用少量 IP来代表更多的节点
STUN NAT会话穿越应用程序 穿越 NAT 的简单 UDP 传输
TCP 传输控制协议 面向连接,可靠的,基于字节流传输层通信协议
UDP 用户数据报协议 无连接的报文交换协议

2.1. DNS

DNS(Domain Name Server) 域名服务器, 将域名指向 IP,人们通过注册的域名可以方便地访问到网站的一种服务.

以在linux 下 chrome 浏览器地址栏中输入www.baidu.com 为例,内部流程为:

  1. 查询本地DNS 缓存
    a. chrome 本地缓存 chrome://net-internals/#dns
    b. /etc/init.d/nscd DNS缓存服务
    c. hosts 文件 /etc/resolv.conf
  2. Local DNS 服务器(每台 PC 都会有)请求解析域名,
  3. Local DNS 服务器迭代的向上一级域名服务器查找直至到根域名服务器
  4. 根域名服务器会解析根域名部分, 把顶级的域名的记录返回给 LDNS
  5. LDNS 服务器向 二级域名服务器进行访问请求,找到一条 A 记录,会把 A 记录 返回给 LDNS
  6. LDNS 收到 A 记录将其缓存到本地,并把其返回给客户端.
  7. 客户端使用解析的 IP 访问源站.

2.1.1. A 记录和 CNAME

  • A 记录 域名解析 IP 地址
  • CNAME 域名解析域名, 在需要将多个域名映射到同一个 IP 时,可以将一个域名做 A 记录指向 IP,其他域名做 CNAME 指向该域名.

2.1. DHCP

DHCP(动态主机配置协议)是一个局域网的网络协议.指由服务器控制一段 IP 地址范围,客户机登录服务器时就可以自动获得服务器分配的 IP 地址和子网掩码.

流程:

  1. 客户端在局域网内发起一个 DHCP Discover 包,
  2. 可用的DHCP服务器接收到 Discover 包后,通过发送 DHCP offer 包基于客户端应答,告诉它可以提供的 IP 地址
  3. 客户端收到 Offer 包之后,发送 DHCP Request 包请求分配 IP
  4. DHCP 服务器发送 Ack 数据包,确认.

2.3. NAT

解决使用私有 IP 来直接访问互联网的问题,使用专用的 NAT 路由器,将私有 IP 转换为全球 IP 地址.解决了全球网络 IP 数量不足的问题,提供了宽带共享和安全

按照NAT 端口映射方式分类

  • 全锥形 NAT
    一旦内部主机端口对(iAddr:iPort)被NAT网关映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);任何一个外部主机发送到(eAddr:ePort)的报文将会被转换后发到(iAddr:iPort)。
  • 限制锥形 NAT
    一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有 (iAddr:iPort)向特定的外部主机hAddr发送过数据,主机hAddr从任意端口发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。
  • 端口限制锥形 NAT
    一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机端口对(hAddr:hPort)发送过数据,由 (hAddr:hPort)发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。
  • 对称性NAT
    NAT网关会把内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接,在网关上创建一个公网“地址端口对”映射进行转换,只有收到报文的外部主机从对应的端口对发送回应的报文,才能被转换。即使内部主机使用之前用过的地址端口对去连接不同外部主机(或端口)时,NAT网关也会建立新的映射关系。

2.4. TCP

TCP(Transmission Control Protocol)传输控制协议,面向连接的、可靠的、基于字节流的传输层通信协议.

TCP 首部结构

  1. 16 位 源端口号
  2. 16 位 目的端口号
  3. 32 位 序号
  4. 32 位 确认序号
  5. 4 位 首部长度
  6. 6 位 保留
  7. 6 位 标志位, URG(紧急指针),ACK(确认),PSH(立即从 TCP 缓冲区读走), RST(复位),SYN(同步), FIN(结束)
  8. 16 位 窗口大小
  9. 16 位 校验和
  10. 16 位 紧急指针
  11. 选项
  12. 数据

2.4.1 三次握手和四次挥手

三次握手和四次挥手

2.4.2 拥塞控制

由慢开始、拥塞避免、快重传、快恢复四个核心算法组成 拥塞窗口(cwnd),其大小取决于网络的拥塞控制,并且动态地在变化

  • 慢开始 指数增长cwnd大小
  • 拥塞避免 线性增长cwnd大小
  • 快重传 接收方收到失序的报文段发送重复确认,发送方收到3个重复确认就认为前面的已经丢失,不必等待超时重传处罚
  • 快恢复 收到3个重复确认后,发送方认为网络很可能没有拥塞,ssthresh减半,把cwnd设为ssthresh,并直接执行拥塞避免算法
  1. 初始时cwnd大小为1,并执行慢开算法,指数增长大小,
  2. 当cwnd超过设置值(ssthresh),执行拥塞避免算法,线性增长拥塞窗口
  3. 当网络拥塞时将ssthresh设置为当前一半,并将cwnd置为1
  4. 如果收到 3 个重复的确认,就不必等待其之前未确认的包超时直接重复
  5. 且因为收到 3 个重复的确认,可以认为网络没有拥塞,将ssthresh减半,把cwnd设为ssthresh,并直接执行拥塞避免算法

2.4.3 TIME_WAIT

即主动关闭TCP 连接的一方在连接断开后,连接状态在进入2MSL 的 TIME_WAIT 状态后在进入 CLOSE 状态.理由如下

  1. 确保最后一个确认报文能够到达. 如果没能到达被动关闭的一方会再次发送 FIN 请求释放连接,这有一定的概率终结掉再次建立的连接(如果没有 TIME_WAIT 的话).
  2. 让本连接发送的所有报文在网络中消失,防止新的连接收到旧的报文.

2.5 HTTP

http 请求格式

  • 请求行: 请求方法 + URL + 协议版本
  • 请求头部: 头部字段名: 值
  • 请求正文

http 响应格式

  • 响应行: 协议版本 + 状态码 + 状态
  • 响应头部: 头部字段名: 值
  • 响应正文

2.5.1 HTTP 1.1 流水线

在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和延迟.但服务端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容.

2.5.2 HTTP 2.0

特点:

  1. 引入二进制分帧层介于 HTTP 应用层和 TCP 传输层之间,并分别构建头信息帧和数据帧.
  2. 首部压缩: 对 header 压缩,并在两端维护索引表,用于记录出现过的 header,传输对应键名就可以找到对应的值
  3. 多路复用: 每一个 TCP 连接里有多个流, 交错传输的帧最后组装成完整的数据
  4. 请求优先级: 优化帧的交错和传输顺序
  5. 服务器推送: 主动向客户端推送需要但未请求的东西

2.5.3 HTTPS

即 HTTP + SSL

https流程:

  1. 客户端发送请求,告诉服务端自己支持的加密算法
  2. 服务端向客户端发送自己的证书(公钥, 网站地址, 证书颁发机构,失效日期等)
  3. 客户端验证证书合法性
  4. 生成对称加密秘钥,使用服务端公钥加密后传输给服务端
  5. 服务端使用私钥解密得到对称加密公钥.
  6. 后续使用该秘钥加密传输

https 证书

由可信机构颁发的多层级的证书,使用上级机构证书的公钥加密其颁发的证书得到数字指纹,然后对本机证书的公钥进行数字摘要算法,与数字指纹对比,相同则代表安全.

posted @ 2022-04-20 17:34  哪吒young  阅读(38)  评论(0编辑  收藏  举报