写在前面:
快速过了一遍之后就没再管了,所以这篇文章实际上是半成品,希望哪一天有空把它弄完(不过应该不可能了吧),这里简单给一张思维导图

第一章 计算机网络和因特网
网络核心
-
分组交换,不预留路径资源
-
存储转发传输
-
排队时延和分组丢失
分组丢失(丢包),到达的分组货已经排队的分组之一被丢弃
-
转发表和路由选择协议
-
-
电路交换,预留路径资源
协议分层
- 五层因特网协议栈
- 七层 OSI 参考模型
第二章 应用层
网络应用程序体系结构:
-
客户-服务器体系结构
有一个总是打开的主机成位服务器,它服务与来自许多其他称为客户的主机的请求。
客户相互之间不直接通信;服务器有固定的、周知的地址,即 IP 地址。
-
对等(P2P)体系结构
对等方通信不必通过专门的服务器。一个进程既是客户又是服务器
在操作系统的术语中,进行通信的实际上是进程,而不是程序
网络应用程序由成对的进程(一个标识为客户,一个标识为服务器)组成,这些进程通过网络相互发送报文。
进程通过称为套接字的软件接口(应用层与传输层之间的接口)向网络发送和接收报文。
进程寻址,需要主机的地址和目的主机的接收进程的标识符。主机由 IP 地址标识,进程由端口号标识。
- TCP服务
- 面向连接的,传输报文前需要建立连接,传输完成拆除连接。
- 可靠的数据传送服务,没有差错,丢失和冗余。
- 拥塞控制
- UDP服务
- 无连接的
- 不可靠数据传送服务
TCP 和 UDP 都没有提供加密机制,也就是信息在传输过程中可以被嗅探和发现。为此,研制了安全套接字层(SSL),提供安全性服务。
HTTP
超文本传输协议(HTTP),客户程序和服务器程序运行在不同的端系统,通过交换 HTTP 报文进行会话。
HTTP 使用 TCP 作为它的支撑运输协议。
客户和服务器在一个相当长的时间段内通信,客户会间断地发出请求,服务器可以选择一次响应一个请求,也可以一次响应多个请求。
- 非持续性连接,一次响应一个请求。缺点在于必须为每一个请求建立和维护一个新的连接
- 持续性链接,一次响应多个请求
HTTP 请求报文:
- 请求行(第一行),三个字段:方法字段(GET,POST,HEAD,PUT,DELETE),URL 字段,HTTP 版本字段
- GET
- POST
- HEAD,和 GET 类似,但不返回请求对象
- PUT,用户上传对象到服务器
- DELETE,删除服务器上的对象
- 首部行
- 实体主体,GET 方法时为空,POST 方法时使用
HTTP 响应报文:
- 状态行,三个字段:协议版本字段,状态码,响应状态信息
- 首部行
- 实体主体
cookie
-
HTTP 响应报文的 cookie 首部行
-
HTTP 请求报文的 cookie 首部行
-
用户端系统保留的 cookie 文件
-
服务器的后端数据库
用户首次访问网站时,网站将产生一个唯一识别码,然后用包含 cookie 的报文响应,用户的浏览器接收后会在 cookie 文件中添加一行。
Web缓存(代理服务器),替代服务器满足 HTTP 请求,减少对客户请求的响应时间。通过配置用户的浏览器,使所有 HTTP 请求首先指向 Web 缓存器。
条件 GET 方法:Web 缓存的对象可能不是最新的,可以通过条件 GET 确保是最新的,只需要使用 GET 方法请求,且包含 “If-Modified-Since: “ 首部行。
文件传输协议:FTP
首先,用户提供远程主机的主机名,建立 TCP 连接;然后提供用户标识和口令,获得授权;最后,可以随意存取远程主机的文件。
FTP 是带外的,建立了两个并行的 TCP 连接,一个是控制连接,一个是数据连接,即控制连接是独立的。而 HTTP 是带内的,通过首部行传输控制信息。
电子邮件,SMTP
电子邮件系统的组成:用户代理,邮件服务器,简单邮件传输协议(SMTP)
发送方用户代理->发送方邮件服务器->接收方邮件服务器->接收方用户代理
每台邮件服务器既运行 SMTP 的客户端又运行 SMTP 的服务器端
SMTP 是持续连接的,每个报文使用 7 bit ASCII 格式
HTTP 与 SMTP 的对比:
- HTTP 是拉协议,Pull;SMTP 是推协议,Push
- SMTP 每个报文使用 7 bit ASCII 格式
- HTTP 将对象封装到 HTTP 响应报文中,SMTP 把所有报文对象放在一个报文中
从邮件服务器上取回报文以便用户阅读,是拉操作,但 SMTP 是一个推协议,需要引入其他邮件访问协议,如:POP3, IMAP, HTTP
DNS
域名系统(DNS):
- 分层的 DNS 服务器实现的分布式数据库
- 使主机能够查询分布式数据库的应用层协议
当用户请求 URL 时,即发送 HTTP 请求报文到 Web 服务器,需要获取 Web 服务器的 IP 地址。用户主机上的 DNS 应用的客户端根据 URL 中的主机名,向 DNS 服务器发送请求,接收响应,获得 IP 地址,最后浏览器根据 IP 地址,建立 TCP 连接。
DNS 缓存,DNS 服务器缓存接收的来自其他 DNS 服务器的应答信息
第三章 运输层
运输层与网络层的关系:网络层提供了主机之间的逻辑通信;运输层提供了运行在不同主机上的进程之间的逻辑通信。
一个进程有一个或多个套接字。套接字是应用层和运输层之间的接口。套接字的标识即端口号。
多路复用:源主机从不同套接字中收集数据块,生成报文段,传递到网络层
多路分解:接收端将运输层报文段中的数据交付到正确的套接字
UDP
UDP 报文段结构:
| | <——– 32 bit ———–> |
| | 源端口号 | 目的端口号 |
| | 长度 | 检验和 |
| | 应用数据(报文) |
可靠数据传输原理:
由一个简单模型开始,不断完善得到可靠的数据传输协议。
最简单的模型:假设底层信道完全可靠,发送方将分组发送到信道中,接收方从信道接收分组。
改进 1 :考虑实际中底层信道并不可靠,分组会受损。采用基于重传的自动重传请求协议(ARQ)。
ARQ 需要三种功能处理差错:
- 差错检测
- 接收方反馈,ACK 和 NAK
- 重传
既然分组会受损,那么 ACK 和 NAK 也有可能发生差错。也就是说,发送方因为没有接收正确的 ACK 和 NAK ,发生超时时就会重传,而接收方无法区别重传的数据和之前接收的数据,造成冗余。我们引入分组序号来解决,接收方只需要检查序号即可确定收到的分组是否是重传。
改进 2 :除了比特受损外,底层信道还会丢包。丢包,即分组丢失或 ACK 丢失。通过设定计时器,当超时时发送方重传,即可解决。
通过上述两个改进,这个模型协议已经非常可靠了,但是它的信道利用率非常低,性能不够好。我们可以考虑用流水线技术来提升性能,即不使用停等方式运行,允许发送方一次性发送多个分组。
采用流水线的方式,需要注意三个问题:
- 必须增加序号范围,因为有多个分组在传输。
- 发送方和接收方必须缓存多个分组,发送方需要缓存已发送未确认的分组,接收方需要缓存已正确接收的分组。
- 如何处理丢失。两种基本方法:回退 N 步(滑动窗口)和选择重传。
滑动窗口:窗口左部是已发送且已确认的分组,窗口内是已发送未确认的分组,窗口右部是等待发送的分组。
通过限制窗口的大小,可以进行流量控制。
选择重传:让发送方仅重传接收方没有接收到的或者出错的分组,避免了不必要的重传
TCP
最大报文段长度(MSS),取决于下层报文格式的限制。
TCP 报文段结构
累计确认
TCP 三次握手:
- 第一次:客户端 -> 服务器端。SYN 报文段,客户段随机(避免安全性攻击)产生初始序号。
- 第二次:服务器端 -> 客户端。服务器端接受 SYN 报文段,为该 TCP 连接分配 TCP 缓存和变量(使得 TCP 易于受到 SYN 洪泛攻击),向客户端发送允许连接的报文段(SYNACK)。序号为服务器端初始序号,确认号为 SYN 报文段的序号加一。
- 第三次:客户端 -> 服务器端。客户端为 TCP 连接分配缓存和变量,发送允许连接的报文段。序号是初始序号加一,确认号是第二次的序号加一。
TCP 拥塞控制
第四章 网络层
路由器没有网络层以上的部分,每台路由器都有一张转发表
转发:
路由选择:
链路层交换机,路由器,三层交换机
虚电路和数据报网络
虚电路网络:
面向连接
虚电路建立,数据传送,虚电路拆除
数据报网络:
无连接
路由器工作原理
网际协议(IPv4 IPv6)
DHCP
NAT
路由选择算法
因特网中的路由选择
RIP
OSPF
BGP
广播和多播路由选择
第五章 链路层
交换机与路由器的区别
-
路由器(三层交换机)是使用网络层地址转发分组的存储转发分组交换机
-
(链路层)交换机也是存储转发分组交换机,但使用 MAC 地址转发分组