TCP/IP 网络协议知识点总结

  1. TCP/IP 模型
  2. TCP 和 UDP
  3. TCP 为什么要三次握手
  4. TCP 为什么要四次挥手
  5. 网页请求一个 URL 的流程
  6. DNS 工作原理
  7. HTTPS 加密原理

1. TCP/IP 模型

应用层:规定应用程序数据格式,处理特定的应用程序细节

传输层:指定端口供特定应用程序处理,建立端口到端口的通信

网络层:主要负责寻址和路由选择,将数据传输到目标地址,建立主机到主机的通信

链路层:数据链路层分为逻辑链路 LLC 子层和介质访问控制 MAC 子层:

  • MAC(Media Access Control)层主要定义了数据包如何在物理介质上传输,包括数据帧的封装/卸装,帧的寻址和识别,帧的接收与发送,链路的管理,帧的差错控制等,MAC 层的存在屏蔽了不同物理链路的差异性
  • LLC(Logic Link Control)层负责识别网络层协议,为上层提供服务,包括传输可靠性保障和控制、传输可靠性保障和控制、数据包的顺序传输

在发送数据的时候,MAC 层可以事先判断是否可以发送数据,如果可以则给数据加上一些控制信息,最终将数据以规定格式发送到物理层;在接收数据的时候,MAC 层首先判断是否发生传输错误,如果没有错误,则去掉控制信息后发送至 LLC 层

物理层:通过光纤、电缆等设备将计算机连接起来,实现二进制数据的传输

2. TCP 和 UDP

TCP 头结构:来源端口、目的端口、序号、确认序号、SYN/ACK 等状态位、窗口大小、校验和、紧急指针
特点:面向连接、面向字节流、可靠、有序、速度慢、较重量,流量控制、拥塞控制
适用场景:文件传输、浏览器等
应用:HTTP、HTTPS、RTMP、FTP、SMTP、POP3

UDP 头结构:来源端口、目的端口、长度域、校验和
特点:无连接、面向报文、不可靠、无序、速度快、轻量、实时性高(无队首阻塞)
适用场景:适用于一对多、即时通讯、视频通话等
应用:DHCP、DNS、QUCI、VXLAN、GTP-U、TFTP、SNMP

3. TCP 为什么要三次握手

TCP 的可靠连接建立是靠包起始序列号来达成的,三次握手主要目的是客户端和服务端对各自的包起始序列号达成共识:

  • 第一次握手:客户端发送 SYN 及客户端包起始序列号给服务端
  • 第二次握手:服务端发送 SYN 及服务端包起始序列号给客户端,并且还发送 ACK 及客户端包起始序列号+1,表示对客户端包起始序列号达成共识
  • 第三次握手:客户端发送 ACK 及服务端包起始序列号+1 给服务端,表示对服务端包起始序列号达成共识

而二次无法达成共识目的,四次则报文数量冗余了

包序列号可以认为是唯一的,因为它是以时间自增生成的,每四个多小时才会重复一次,远大于报文最大生成时间 MSL

4. TCP 为什么要四次挥手

TCP 是全双工的,断开需要确保双向都没有数据要发送了:

  • 第一次挥手:客户端发送 FIN 及客户端包序列号给服务端,表示客户端没有数据要发送了
  • 第二次挥手:服务端发送 ACK 及客户端包序列号+1 给客户端,表示对客户端没有数据发送达成了共识
  • 第三次挥手:服务端发送 FIN 及服务端包序列号给客户端,表示服务端没有数据要发送了
  • 第四次挥手:客户端发送 ACK 及服务端包序列号+1 给服务端,表示对五福端没有数据发送达成了共识

第四次挥手客户端发送 ACK 给服务端后会进入 TIME_WAIT 状态,要等待 2MSL 才真正关闭,两个理由:

  • 1.要确保客户端发送的 ACK 能达到服务端,让服务端知道客户端收到了第三次挥手,服务端进而可以断开了
  • 2.要保证本连接中所有的报文都在网络中死翘翘了,防止下个同端口的新连接收到旧连接的报文

5. 网页请求一个 URL 的流程

1.HTTP 请求的准备
  • 发起 DNS 请求将域名解析成对应的 IP 地址
  • 建立 TCP 连接,如果开启了 Keep-Alive 机制,也可在多次请求中复用 TCP 连接
2. HTTP 请求的构建

按照 HTTP 报文格式构建报文,包括:

  • 请求行:包括请求方法、URL、HTTP 版本信息,请求方法包括 POST、GET、PUT、DELETE 等
  • 首部:包括 Accept-Charset(客户端可以接受的字符集)、Content-Type(正文内容格式)、Cache-control(缓存控制)等
  • 正文实体:当使用 POST、PUT 等请求方法时,通常客户端需要向服务器传递数据,这些数据就存储在请求正文中
3. HTTP 请求的发送

添加 HTTP 头后,报文会经过传输层、网络层、链路层,分别添加上 TCP 头、IP 头和 MAC 头

然后判断目标地址和本机是否在同个局域网,如果是,就通过 ARP 协议获取目标 MAC 地址,放入 MAC 头;如果不在同个局域网,就把网关 MAC 地址放入 MAC 头

网关收到包后取出目标 IP 地址,根据路由协议找到下一跳路由器,获取下一跳路由器 MAC 地址,将包发送过去,这样路由器一跳一跳最终到达目标局域网

最后一跳路由器发现目标地址在自己局域网中,通过 ARP 协议获取目标地址的 MAC 地址,然后将包发送给目标机器

目标机器接收到包后,层层向上,依次解析 MAC 头、IP 头、TCP 头,最后发送给 TCP 头中端口号对应的 HTTP 服务器进程,然后 HTTP 服务器将网页返回给客户端

4. HTTP 返回的构建

HTTP 返回报文包括:

  • 状态行:包括版本、状态码、短语信息,状态码包括 200(OK)、404(Not Found)、503(Service Unavailable) 等等
  • 首部:包括 Retry-After(间隔一定时间后可重试)、Content-Type(正文内容格式)等
  • 正文实体:返回的数据格式,包括 HTML、JSON 等

6. DNS 工作原理

DNS 服务器包括根域名、顶级域名、权威域名三种:

  • 根域名 DNS 服务器:返回顶级域 DNS 服务器的 IP 地址
  • 顶级域名 DNS 服务器:返回权威 DNS 服务器的 IP 地址
  • 权威域名 DNS 服务器:返回相应主机的 IP 地址

客户端先在本地缓存中查找是否有域名对应的 IP 地址,如果有直接返回,没有则向本地 DNS 服务器发起请求,本地 DNS 服务器检查是否有缓存,没有则向根域名服务器、顶级域名服务器、权威域名服务器依次发起请求,最终得到域名对应的 IP 地址

7. HTTPS 加密原理

HTTPS 通过非对称加密生成密钥,然后用这个密钥去对称加密传输的数据,通过对称加密和非对称加密结合的方式,既保证传输安全,也保证传输效

非对称加密的私钥不会在互联网上传输,可以保证私钥的私密性,但公钥是公开的,可能被冒充,所以需要通过证书和权威机构来验证公钥的合法性

服务器需向 CA (Certificate Authority)权威认证机构申请数字证书,CA 用自己的私钥对服务器个人信息与服务器公钥生成数字签名后,再和服务器个人信息与服务器公钥一起形成数字证书

客户端发起请求时,服务器会将数字证书发送给客户端,客户端用 CA 公钥解密数字签名生成服务器信息摘要,再和证书中的服务器信息摘要进行对比,以此验证数字证书是否是 CA 颁发的合法证书

但 CA 的公钥也可能被冒充,为了验证 CA 公钥的合法性,CA 也要有 CA 自身的数字证书,由更可信、更权威的 CA 机构签名生成,由此形成多层级的认证机构,客户端设备默认内置了一部分权威机构的根证书