目前一般用OSI模型或者TCP/IP模型来作为网络体系结构参考
OSI模型从下到上有七层:物理层 physical layer,数据链路层 datalink layer,网络层 network layer,传输层 transport layer,会话层 session layer,表示层 presentation layer,应用层 application layer
TCP/IP模型从下到上共有四层:网络接口层,网络层,传输层,应用层
为了方便理解,还有使用较多的五层混合模型,从下到上为:物理层,数据链路层,网络层,传输层,应用层
数据在网络传输中,需要经过各层,进行封装或解封装,封装过程大致如下:
- 应用层:生成原始数据(如HTTP请求)。
- 传输层:将数据加上TCP或UDP头部(包含端口号),形成段。
- 网络层:给段加上IP头部(包含源和目的IP地址),形成包。
- 数据链路层:给包加上帧头和帧尾(包含MAC地址和差错校验码),形成帧。
- 物理层:将帧转换为比特流,通过物理媒介发送出去。
解封装过程则是以相反的顺序进行
Internet协议
网络层协议
IP协议(Internet Protocol)
IP 协议是实现计算机间通信的重要协议
IP 协议为每个计算机分配一个 IP 地址,数据包传输路径由 IP 地址决定, IP 协议提供的是一个无连接、不可靠的服务
- 无连接:在发送数据包之前不需要建立连接,先发送的数据包不一定先到达
- 不可靠:IP协议不保证数据包的到达,没有确认和重传机制,因为种种原因可以被轻易的抛弃
IP数据报格式
IP 数据报由首部和数据两部分组成,数据是封装的部分与 IP 协议无关,在这里不予讨论,仅说明首部:
一般 IP 数据报首部为20byte,即160bit(“一般”指不带选项的首部),依顺序各个位置含义如下:
- 4bit:协议版本号,目前广泛使用的为IPv4
- 4bit:首部长度除以32(单位为bit),如160bit是32bit的5倍,则为5
- 8bit:服务类型(TOS),通过特定的数值来表明需要何种服务,控制最小时延、最大吞吐量等
- 16bit:数据报总长度,16bit意味着最大长度可以达到65535bit,注意这里指的是IP数据报,并不包括以太网首部或以太网尾部的长度
- 16bit:用于标识发送的报文,通常每发送一份报文该处加一
- 3bit:标志位,第一位为为保留位,第二位为DF(don’t fragment) ,为1指没有分片,第三位为MF(more fragment),为1指有分片(因为数据报最大传输长度的限制,如果有极大的数据报,则需要分开传输,即分片)
- 13bit:分片的偏移量
- 8bit:TTL(time to live),每经过一个路由器该值减一,如果一个路由器收到该值为零的数据报,路由器丢弃该报文,并发送ICMP报文给源主机
- 8bit:用于标识上层协议
- 16bit:首部检验和。
- 32bit:源IP地址
- 32bit:目的IP地址
如有选项,选项的长度需为32bit的倍数,必要时用0填充
IP协议功能
- 寻址:IP 协议通过 IP 地址 来唯一标识网络上的每一台主机。IPv4 使用 32 位地址, IPv6 使用 128 位地址
- 路由:路由器通过内部的路由表,根据数据包的目的 IP 地址,为每个包选择一条最佳的路径,将其转发到下一个路由器(下一跳),直到到达最终目的地
- 分片与重组:不同的物理网络有不同的最大传输单元(MTU),即一帧能携带的最大数据量。当一个 IP 数据报的大小超过下一段网络的 MTU 时,路由器会将其分割成多个较小的分片。每个分片都有自己的 IP 首部(大部分字段相同,但分片相关字段不同),所有分片独立传输,只在最终的目的主机上进行重组,还原成原始的数据报。
IP地址与网络掩码
对于 IPv4 地址来说,是用 32 位二进制数字表示,每 8 位用 . 隔开,例如 192.168.0.1 (接下来所有例子都将使用这个 IP )
其中一部分代表网络号,一部分代表主机号,区别网络号和主机号的办法就是网络掩码
网络掩码是由连续的多个 1 和连续的多个 0 组成的 32 位二进制代码用来与 IP 地址一 一对应,与 1 对应的就是网络号,与 0 对应的就是主机号。
例如掩码 255.255.255.0 ,表示 IP 地址的前 24 位为网络号,后 8 位为主机号
为了更简洁地表示网络掩码,我们常用 CIDR表示法,格式为 IP地址 / 网络号的位数 , 例如 192.168.0.1/24
特殊地址
已知 192.168.0.1/24
- 网络地址为
192.168.0.0主机号全部置0 - 广播地址为
192.168.0.1主机号全部置1 广播地址可用于往向网络内的所有主机发送数据包
ICMP协议(Internet Control Message Protocol)
ICMP 协议是一个辅助协议,与 IP 协议协同工作。传输数据时作为数据载荷封装在 IP 数据报中,主要用于管理网络层和诊断通信状态而非通信
ICMP安全
- 大量发送 ICMP 数据报来形成 DDOS 攻击
- 伪造 ICMP 数据报来劫持流量
OSPF协议(Open Shortest Path First)
OSPF 协议属于内部网关协议,是一种链路状态路由协议
RIP协议(Routing Information Protocol)
RIP 协议属于内部网关协议,是一种距离矢量路由协议
BGP协议(Border Gateway Protocol)
BGP 协议又叫边界网关协议,属于外部网关协议,是一种路径矢量路由协议
IGMP协议
ARP协议
传输层协议
应用层协议
DNS协议(Domain Name System)
DNS协议的主要作用是将便于人类记忆的域名解析为计算机通信需要使用的IP地址,通常使用53端口
接下来以一个例子来阐述DNS的工作过程:
- 在浏览器输入
www.baidu.com,点击访问,此时需要获取wwww.baidu.com的IP地址,浏览器首先检查自己的缓存中是否有对应的IP地址 - 如果浏览器缓存中没有,则操作系统检查本地缓存和
hosts文件是否有对应 IP 地址 - 如果依旧没有,那么就会向 DNS 服务发出解析请求,DNS服务器通常由 ISP 服务商提供,也可以由用户自行规定 DNS 服务器地址
DNS 服务器并非一个无比庞大的中央数据库服务器,而是一个层次化的数据库,由各种不同功能的分布式服务器来实现用户的查询。DNS 服务器中有根域名服务器、顶级域名服务器等等。全球有 13 台根域名服务器,又这些服务器授权的 DNS 服务器叫做权威服务器。
当查询 www.baidu.com 时,首先向根域名服务器发出解析请求,根域名服务器会返回一个 com 顶级域名服务器的地址
接着我们向 com 顶级域名服务器发出请求,com 域名服务器返回 baidu.com 域名服务器地址
接着继续向 baidu.com 域名服务器地址发出请求,最终得到 www.baidu.com 的 IP 地址
由此可见 DNS 查询是一个迭代查询的过程
DNS记录类型
虽然DNS的职责是映射域名和IP地址,但其记录却不止这么简单,DNS记录有多种类型:
- A 记录:最基础记录,将域名指向一个 IPv4 地址
- AAAA 记录:将域名指向一个 IPv6 地址
- CNAME 记录:别名记录,将一个域名指向另一个域名
- MX 记录:邮件交换记录,指定负责接收该域名邮件的服务器
- NS 记录:域名服务器记录,指定该域名由哪个权威 DNS 服务器负责解析
- TXT 记录:文本记录,常用于存放 SPF 信息(反垃圾邮件)、域名所有权验证等
DNS安全
- DNS 污染 / 投毒,:存在伪造的 DNS 数据,用户无法得到正确 IP 地址
- DNS 劫持:伪造 DNS 数据,将用户导向其他 IP
SMTP协议 ( Simple Mail Transfer Protocol ) - 简单邮件传输协议
SMTP 协议是用于发送和转发电子邮件的核心协议
- SMTP 是一个 推 协议,用于将邮件从客户端 " 推 " 送到服务器,或在服务器之间 " 推 " 送,它不用于从服务器“拉取”邮件
- 基于TCP 连接,确保数据传输的可靠性
- 默认端口:
- 25:传统的、用于服务器间转发的端口,由于垃圾邮件和安全性问题,现在很多ISP会封锁此端口
- 587:推荐的邮件提交端口。要求使用 STARTTLS 进行加密,并且通常需要身份验证,这是现代邮件客户端发送邮件时使用的端口
- 465:历史上用于 SMTPS(SMTP over SSL),后来被弃用,但现在又被广泛用于隐式 SSL/TLS 连接
SMTP通信过程:连接 -> 握手 / 加密 -> 认证 -> 声明收发人 -> 传输数据 -> 断开连接
POP3协议
POP3 是一个拉协议,用于从远程服务器"拉取"邮件到本地客户端
属于应用层协议,基于TCP 连接
- 默认端口
- 110:默认的非加密端口
- 995:用于 POP3S(POP3 over SSL),即加密连接。这是现代邮件客户端推荐的端口,所有通信从一开始就是加密的
PGP协议
PGP 不仅仅是一个协议,它更是一个完整的、为数据安全而设计的密码学系统。它的核心目标是提供隐私性、身份认证和完整性,主要应用于电子邮件安全,但也适用于加密任何类型的文件或数据
- 加密:确保只有预期的收件人才能阅读内容
- 数字签名:验证发件人的身份,并确保内容在传输过程中未被篡改
- "端到端加密",数据在发送方设备上被加密,直到到达接收方设备才被解密。中间的邮件服务器、网络提供商等都无法窥探其内容
PGP 巧妙地将多种密码学技术结合,利用了它们各自的优点
- 对称加密(如 AES, IDEA):用于加密实际的消息内容。速度快,适合加密大量数据
- 非对称加密(如 RSA, DSA):用于安全地交换对称密钥和创建数字签名。解决了密钥分发问题
- 散列函数(如 SHA):用于生成数字签名,确保数据完整性
工作原理
我们通过一个经典场景来理解 PGP 如何工作:Alice 想给 Bob 发送一封加密并签名的邮件
准备工作:密钥生成
- Alice 和 Bob 都需要生成自己的一对 PGP 密钥
- 私钥:必须绝对保密,由自己妥善保管,用于解密和创建签名
- 公钥:可以自由地分发给任何人,用于加密消息和验证签名
步骤1:Alice 加密和签名邮件
- 准备明文:Alice 写好要给 Bob 的邮件内容
- 生成会话密钥:Alice 的 PGP 软件会随机生成一个一次性的对称会话密钥(比如一个 AES 密钥)
- 加密邮件内容:使用这个对称会话密钥,通过一个快速的对称加密算法(如 AES)来加密邮件的正文。得到加密后的密文。
- 加密会话密钥:使用 Bob 的公钥,通过非对称加密算法(如 RSA)来加密那个对称会话密钥。这样,只有拥有对应私钥的 Bob 才能解密出这个会话密钥。
- 创建数字签名:Alice 的 PGP 软件对原始邮件内容计算一个哈希值(数字指纹)使用 Alice 的私钥 对这个哈希值进行加密。这个加密后的哈希值就是 数字签名
- 组装发送:Alice 的 PGP 软件将以下内容打包发送给 Bob,用 Bob 的公钥加密后的会话密钥、用会话密钥加密后的邮件密文、Alice 的数字签名
步骤2:Bob 解密和验证邮件
- 分离部件:Bob 的 PGP 软件收到数据包后,分离出加密的会话密钥、邮件密文和数字签名
- 解密会话密钥:Bob 使用 他自己的私钥 去解密那个被加密的会话密钥。成功后,他就得到了 Alice 当初生成的对称会话密钥
- 解密邮件内容:Bob 使用刚刚解密得到的对称会话密钥,去解密邮件的密文,从而得到原始的邮件正文
- 验证签名:Bob 使用 Alice 的公钥 去解密收到的数字签名,得到原始的哈希值 H1,Bob 对刚刚解密得到的邮件正文计算同样的哈希值 H2,比较 H1 和 H2
FTP协议
FTP 是一个专门用于在网络上进行双向文件传输的协议。用户可以上传文件到服务器,也可以从服务器下载文件
- 基于TCP 连接,确保数据传输的可靠性
FTP 使用双重连接,这是 FTP 最显著的特征
- 控制连接:用于发送命令和接收响应
- 数据连接:专门用于传输文件内容或目录列表
默认端口
- 21:控制连接的默认端口。客户端首先连接到此端口,用于认证和发送所有命令(如 LIST, RETR, STOR)
- 20:数据连接的默认端口(主要用于主动模式)
工作原理
FTP 存在主动模式和被动模式
主动模式
在主动模式下,服务器主动发起数据连接到客户端。
工作流程
- 建立控制连接:客户端从一个随机端口 N(例如 5000)连接到服务器的 21 端口,客户端发送 PORT 命令
- 服务器发起数据连接:服务器从 20 端口主动连接到客户端指定的 IP 和端口
- 数据传输:数据连接建立成功,开始传输文件或目录列表。
主动模式的问题
- 对客户端不友好。客户端的防火墙必须允许来自外部(服务器)的入站连接,这通常被视为安全风险,因此很多客户端的防火墙会阻止此类连接,导致连接失败
被动模式
在被动模式下,客户端发起数据连接到服务器。这是现代网络环境中更常用的模式
工作流程
- 建立控制连接:客户端从一个随机端口连接到服务器的 21 端口。客户端发送 PASV 命令,服务器响应
- 客户端发起数据连接:客户端从另一个随机端口主动连接到服务器指定的 IP 和端口
- 数据传输:数据连接建立成功,开始传输
被动模式相较于主动模式
- 对客户端防火墙友好:所有连接(控制连接和数据连接)都是由客户端向外发起的,符合常规防火墙的放行规则
HTTP协议
HTTP 是一个用于传输超媒体文档(如 HTML)的应用层协议。它被设计用于 Web 浏览器和 Web 服务器之间的通信
- 基于TCP(或 TLS 加密的 TCP)连接,默认端口是 80(HTTPS 是 443)
- 无状态:协议本身不对请求和响应之间的通信状态进行保存。每个请求都是独立的,服务器不会记得之前的请求。为了实现状态(如登录),需要用到 Cookie 和 Session
- 明文传输:在 HTTP/1.x 中,请求和响应的报头和内容默认都是明文传输的,容易被窃听和篡改
- 灵活可扩展:HTTP 的请求方法、头部字段等都可以自由扩展
DHCP协议
DHCP 是一个用于局域网的应用层协议,它的主要任务是自动地、动态地为网络中的主机分配 IP 地址和其他配置信息
- 使用 UDP 作为传输层协议。
- 客户端 使用 68 端口,服务器 使用 67 端口
- 解决了手动配置 IP 地址(静态 IP)的痛点:
- 避免地址冲突:手动配置容易导致两台机器IP相同
- 简化管理:网络管理员只需在DHCP服务器上配置,无需逐台配置客户端
- 提高IP地址利用率:IP地址可以租给需要的主机,用完后收回,特别适用于无线Wi-Fi、办公网络等设备频繁变动的环境
一台没有 IP 地址的客户端要获取配置,需要经过四个关键步骤。这个过程被称为 DORA,取自四个主要消息的首字母
- DHCP Discover - 客户端发现网络中的DHCP服务器
- DHCP Offer - DHCP服务器提供一个可用的IP地址
- DHCP Request - 客户端请求使用该IP地址
- DHCP Acknowledgement - 服务器确认并正式分配
Comments NOTHING