计算机网络知识梳理
[TOC]
概念和功能
参考:Computer Networking: A Top-Down Approach 配套网课, 考研计网
概念:计算机网络是互联的、自治的计算机集合。
功能:包括数据通信和资源共享等。
组成及分类
组成
硬件、软件和协议
不同工作方式
以下各工作方式都属于边缘部分。除了边缘部分外,核心部分用于为边缘部分提供服务。简单来说就是提供接口实现。
C/S 方式
(Client and Server). 客户端与服务端的端到端服务方式。服务端处理/响应客户端发送的请求。
P2P 方式
(Peer to Peer). P2P 方式下不存在专门的服务机,所有端系统既是客户又是服务器。和 C/S 方式相反,请求的主机越多响应越快。
B/S 方式
(Browser and Server). 浏览器到服务器的服务方式。
功能组成
通信子网
一般包括网络层、数据链路层和物理层(OSI)
资源子网
包括应用层、表示层、会话层和传输层(OSI)
计算机网络的分类
按分布范围分类
广域网WAN(交换技术)、城域网MAN、局域网LAN(广播技术)、个人区域网PAN。应该按最大通信距离和实现技术分类,而不是主机距离。
按使用者分类
公用网和专用网
按交换技术分类
电路交换、报文交换和分组交换
其中报文交换和分组交换使用存储转发技术。
按拓扑结构分类
星型、环型、网状型、总线型。。
按传输技术分类
广播网络:共享公共通信信道
点对点网络:使用存储转发和路由选择机制
计算机网络标准化
为了实现不同厂商软硬件连通,计算机网络必须遵从统一的标准。
目前流行的标准为 TCP/IP. 也有权威机构制定的法定标准 OSI。
标准化审批流程:
因特网草案->建议标准(RFC 文档)->(草案标准->)因特网标准
相关组织:
ISO、ITU、IEEE、IETF
性能指标
速度相关指标
速率
每单位时间传输的数据量。
带宽
单位时间内从某一点到另一点能通过的最高数据率。(发送速率)
吞吐量
单位时间内通过某个网络的数据量。
时间相关指标
时延
分为发送时延(传输时延)、传播时延、排队时延和处理时延。
发送时延:将数据从机器内部推送到信道上的时间。
传播时延:在信道上传播的时间。取决于电磁波传播速度和链路长度。
排队时延:等待输出/输入链路可用的时间。
处理时延:寻找合适的出口信道以及检错的时间。
时延带宽积
传播时延和带宽的乘积。单位一般为 bit.
感觉可以理解为信息通量(?),可以描述某段链路现在有多少正在传播的比特。
往返时延 RTT
从发送数据开始,到发送方收到接收方的确认总共经过的时延。
RTT越大,在收到确认之前可以发送的数据越多。(废话)
有时候也会忽略末端处理时间。
利用率
1) 信道利用率
2)网络利用率
体系结构和参考模型
OSI
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
TCP/IP
应用层、传输层、网际层、网络接口层。
要注意 OSI 的网络层是无连接和面向连接都有,而 TCP/IP 的网络层是无连接;OSI 的传输层是面向连接的,而 TCP/IP 的传输层是无连接+面向连接。
TCP/IP 协议栈
应用层包括 HTTP、FTP、DNS 等协议。
传输层包括 TCP、UDP 等协议。
网际层为 IP 协议。
网络接口层包括 Ethernet、ATM、Frame Relay 等。
5层模型
放一张图看一下数据封装与解封装。
应用层
C/S 通信方式
服务端特点:
- 主机永远在线
- 有固定 IP
客户端特点:
- 与服务端连接
- 连接非长时间,通常是间歇连接
- 不与其他客户端通信
- 动态 IP
C/S 实例:HTTP
客户端 -> web browser,服务端 -> web server
P2P 通信方式
特点:
- 没有 always-on server
- 任意 peer 可以向其他 peer 提供服务,或接受服务
- peers 直接 communicate
- 与 C/S 中的客户端一样,非长时间连接,且动态 IP
- 网络鲁棒性强
P2P 实例:P2P 文件共享
多主机进程间通信
单一主机内进程间通信:defined by OS
多主机间进程:exchanging message
客户端进程初始化本次通话(communication),服务端进程等待连接。
使用传输层创建的 socket 进行通信。
- 每个对话中,2 sockets are involved. 每端各一个。
定址
每个进程需要一个 identifier. 我们给每个主机设置一个独有的 32 位 IP 地址。然后,再设置一个端口。端口指向我们具体的进程。
应用层协议
协议要素:
- 定义 exchanged message 的类型(request,respone)
- 定义 message 的语法。
- 定义 message 语义。
- 定义 rules. 在发送或接收信息后进行什么动作。
open protocols
- 在 RFC 中定义。所有人都可以查看协议内容
- allows for interoperability
- 实例:HTTP、SMTP
- 独立于系统平台。不受主机影响
HTTP
Web
一个 web page 包含各种各样的对象。包括 html 文件、jpg 图像、等等。每个对象都有自己的 URL. HTTP 使用的是 C/S 模式。
特点
- 使用 TCP 传输协议。通常 port 80.
- HTTP 是无状态协议。
non-persistent HTTP
- 最多只有一个 Web 对象发送 TCP 连接请求。传输多个对象就需要建立多个连接。
- 第一步(1):HTTP 客户端初始化一个指向 HTTP 服务端的 TCP 连接。
- 第一步(2): HTTP 服务端接收连接,完成连接后通知服务端。
- 第二步:客户端将 HTTP request message 息发送至 TCP 套接字(Socket)。消息包括客户端希望获得的单个对象。
- 第三步:HTTP 服务端接收消息后,将 response message 发送至它的 TCP 套接字。
- 第四步:HTTP 服务端关闭 TCP 连接
- 第五步:HTTP 客户端接收到 response message,然后显示对应的 html file.
- 第六步:假如解析 html 后,其中又有许多 referenced objects,那么又需要重复 1-5 步来获取这些对象的内容。
问题:一次单对象的 non-persistent HTTP 传输需要多长时间:
答:2 个 RTT + 传输文件所需时间(time to trasmit file)
persistent HTTP
persistent HTTP 可以将传输时间从 2 rtts + trasmit time 缩减到 1 rtt + transmit time. 因为传输多个对象只需要初始化一次了。
- TCP 连接建立后,多个对象都可以向单一 TCP 连接进行串行传输。
- 和 non-persisent HTTP 不同,在发送 response message 后不会立即关闭连接,而是保持开启。
HTTP 格式
request message
request line. 请求方法+URL+其他(HTTP 协议版本)。例:
GET xxx.com/index.html HTTP/1.1\r\h
。除了GET
方法外,还有POST
,HEAD
,PUT
等。header lines. 包括发出请求的主机名称、浏览器类型、对象类型、首选语言、连接是否 keep-alive 等附加信息。
body. 并不是必要。用于发送其他附加信息。
response message
- status line. 版本号+状态码+短消息。e.g.
HTTP/1.1 200 OK
- header lines. 包括时间、服务端类型等附加信息。
- body. 包括需要传输的对象本身。
- status line. 版本号+状态码+短消息。e.g.
HTTP 各版本
HTTP/0.9
唯一单行命令:GET URL,如 GET /mypage.html
HTTP/1.0
引入了版本信息、请求响应头等,格式已经完整
HTTP/1.1
对 HTTP/1.0 进行了标准化,消歧义。HTTP/1.1 默认建立 persistent HTTP 连接。
HTTP/2
HTTP/2 不再是一个 ASCII 文本协议,而是二进制协议。
HTTP/2 支持多路复用,移除了 HTTP/1.x 中对顺序和阻塞的约束。
HTTP/2 压缩了标头。
HTTP/3
…
HTTP 状态码
100 Continue
200 OK
202 Accepted
300 Multiple Choice
301 Moved Permanently
302 Found
400 Bad Request
401 Unauthorized
404 Not Found
502 Timeout
Cookies 技术
cookies 用于维护用户和服务器的状态。
包括四个组件:
- cookie header line of HTTP response message
- cookie header line in next HTTP request message
- cooke file kept on user’s host
- back-end database at Website
HTTPS
安全 HTTP 协议,端口 443. 通过 SSL 或者 TLS 加密,验证访客身份,保护数据完整性。
FTP
以 ASCII 码格式控制连接,传输控制信息。
通常端口 21,7位 ASCII 码。
FTP 也是基于 C/S 模式的协议。
过程:
- 登录。需要 FTP 地址,可能需要用户名和密码。
- 使用 TCP 进行可靠传输。
Anonymous FTP 服务器:可以使用户与远程主机建立连接且以匿名身份从远程主机上拷贝文件,而不需要注册。
电子邮件
电子邮件包括两个部分:信封、内容
- 信封:电子邮件地址
- 内容
- 首部:1. 发件人电子邮件地址 2. 收件人电子邮件地址 3. 主题 4. 发送日期
- 主体。电子邮件内容
用户代理:电子邮件的客户端软件
SMTP 是一种基于 TCP 连接的应用层协议,用于电邮发送,端口 25.
POP3/IMAP 是基于 TCP 连接的应用层协议,用于电邮接收。
SMTP 无法传输二进制对象,只支持 ASCII 编码,且长度限制比较大。
因此,通用因特网邮件扩充 MIME 被用于将其他内容转化成 7 位 ASCII 编码,从而通过 SMTP 传输。
POP3 协议即第三代 POP(邮局)协议,端口号 110.
IMAP 网际报文存取协议比 POP 更复杂。使用 IMAP 程序打开 IMAP 服务器的邮箱时,用户可以看到邮箱的首部,打开某个邮件时,才会把完整的主体传到计算机上。IMAP 允许用户多平台随时阅读处理邮件,也允许只读取邮件的一个部分(正文与附件分开)。
现代万维网电子邮件。从服务器到用户代理的收发基于 HTTP。
DNS 域名解析系统
域名解析顺序:
- 浏览器缓存
- 本机hosts文件
- 路由缓存
- 均没有,向客户端发送域名
- DNS服务器(本地域名、顶级域名、根域名等多级服务器)迭代解析,递归查询
- 传输回解析结果 IP
- DNS 传输层采用 UDP 协议实现
DHCP(动态主机配置协议)
一种局域网协议。属于应用 UDP 的应用层协议。
作用:为临时接入局域网的用户分配 IP 地址、子网掩码、默认网关、DNS 服务器名称与 IP 地址等内容。
为主机配置 IP 时,我们通常需要配置 IP 地址、子网掩码和默认网关,这称为静态配置。
RIP
一种分布式的基于距离向量的路由选择协议。
RIP 要求路由器中维护一个表,记录到每一个其他网络的最佳距离。
RIP 要求距离 $\leq$ 15,距离 16 表示网络不可达。
RIP 原理:初始只有相邻节点的距离信息。每次更新都交换相邻节点的 RIP 表信息并更新,原理类似 Bellman-Ford 算法。
每一定时间进行一次更新。如果多次更新都没有收到某个相邻节点的信息,就认为该节点已不在网络中,相关表项置为 16(不可达).
RIP 在传输层使用的协议是 UDP. 传输过程中,可将封装好的 RIP 报文封装到 UDP 数据报中。
传输层
功能:
- 建立在主机上,实现进程与进程的通信。
- 复用与分用。复用:应用层所有应用进程都可以通过传输层传输信息到网络层;分用:传输层从网络收到数据后,交付给应用层指定的应用进程。
- 对收到的报文段进行差错检测
Socket
主机IP地址:端口号。用于唯一标识主机中的某个进程。
一些重要的端口号:
FTP->21
TELNET->23
SMTP->25
DNS->52
TFTP->69
HTTP->80
SNMP->161
HTTPS->443
应用层对传输协议的要求
- 数据完整性(文件传输,网上交易)
- 时效性(多媒体通话,在线游戏)
- 吞吐量(Live)
- 安全性
TCP(Transmission Control Protocol)
TCP 面向连接,提供全双工通信。
TCP 确保:1. 可靠传输 2. 流量控制 3. 拥塞控制
TCP 报文段首部格式:
4x5.
窗口:允许接收的数据量。
检验和:加上 12B 伪首部,第四个字段为 6.
确认号与数据偏移的区别:
紧急指针:紧急数据的字节数量
选项:其他扩展功能。
TCP 连接管理
TCP 连接建立采用 C/S 方式。发起方为客户端。
三次握手:
- 客户端发送连接请求报文段。无应用层数据。SYN=1, ACK=0, 序号=x
- 服务器为 TCP 连接分配缓存与变量,并返回确认报文段。无应用层数据。SYN=1, ACK=1, 序号=y, 确认号=x+1.
- 客户端为 TCP 连接分配缓存与变量,像服务器返回确认的确认,可以携带应用层数据。SYN=0, ACK=1 , 序号=x+1, 确认号=y+1
SYN 洪泛攻击即客户端不断发送 TCP SYN(进行第一次握手),并对服务器不响应第三次握手,导致服务器分配许多 TCP 缓存但都处在挂起状态
解决办法:SYN cookie
四次挥手:
- 客户端发送连接释放报文段。FIN=1,序号=x
- 服务器回送一个确认报文段。ACK=1, 确认号=x+1
- 服务器发送连接释放报文段。FIN=1,ACK=1,确认号=x+1
- 客户端回送一个确认报文段,等到 2MSL(最长报文段寿命)后,连接彻底关闭。
TCP 可靠传输
只有应用层和传输层能实现保障传输可靠性的逻辑,网络层及之下的都只能尽最大努力交付,而不能保证可靠传输。
TCP 可靠传输机制:
- 校验。增加伪首部用于校验。
- 序号。序号字段指代报文段第一个字节的序号,用以保证传输内容位置正确。
- 确认。表示确认,并提示期待接收的下一个序号。如果发生了传输顺序不正确的问题,TCP 默认使用累计确认。
- 重传。重传发生的情况:(1)累计确认的配套措施,发送冗余 ACK.(2)超时重传。TCP 发送方在规定时间内没有收到接收方的收到确认,就要重传。对于超时重传的时间规定,一般采用动态改变,计算加权平均往返时间 RTTs。
TCP 流量控制
TCP 使用滑动窗口实现流量控制。
接收方根据自己接收缓存的大小,在确认报文段中设置窗口字段通知发送方窗口大小 x。于是,在收到下一个接收方确认前,发送方可以从确认号的位置开始,连续发送大小总计 x 的内容。
但是,超时重传机制不受窗口大小影响。
另外,当接收方收到零窗口确认时,就启动持续计时器。如果持续计时器时间到期,发送方就发送一个探测报文段,接收方给出现在的窗口值。如果仍是 0,就重新设计持续计时器。
TCP 拥塞控制
与接收方类似,发送方的 TCP 报文首部也会使用窗口值。它根据自己估算的网络拥塞程度设置窗口值,反应当前容量。
图中拥塞控制方法为 TCP Tahoe,已弃用。
快重传与快恢复:
快重传:收到冗余 ACK.
快恢复:恢复 cwnd 不用降到 1,而是降到新的 ssthresh.(TCP Reno,当前常用)
ssthresh 计算方法: 发生网络拥塞后, ssthresh 变为拥塞窗口的一半值.
UDP(User Datagram Protocol)
补充性质:UDP 是面向报文的,适合一次性传输少量数据。
为什么 UDP 什么也不保证,也有使用 UDP 的:
答:速度更快,适合实时通信。UDP 首部字段 8B, TCP 20B,UDP 开销小。而且也可以在应用层 build 追加 service 来确保这些要求。
UDP 校验
网络层
路由器的最高层次是网络层。例如对于家用设备,我们可以通过主机->路由->路由->主机的方式进行通信。
IPv4
IP 地址分类:
其中,特殊的私有 IP 地址:
NAT(Network Address Translation)
因为路由器对目的地址是私有 IP 地址的数据报一律不转发,通过为路由器安装 NAT 软件,我们可以将该路由器作为 NAT 路由器,其至少拥有一个有效的外部全球 IP 地址。
(俗称内网穿透)
之后,使用本地地址的主机经过 NAT 路由器进行外部地址转换,即可与外界通信。
注意 LAN 端可能有多个主机 IP,但可能共用同一个 NAT 端的 IP 地址。这时路由会选取一对空闲的 IP:端口号分配给需要发送至 WAN 的本地报文。这种方式被称为 NAPT(Network Address Port Translation)。
另一种方式为 Basic NAT,本地 IP 地址经过 NAT 转换时一一对应。
子网
划分子网:
将原来的 “网络号.主机号” 模式增改为 “网络号.子网号.主机号”。以此避免向 ISP(网络服务提供商)过多申请 IP 地址。
子网划分案例:
将一个外部信息传给具体的主机,需要使用子网掩码。
子网掩码中,全 1 部分为非主机号,全 0 部分为主机号。通过与运算得到子网网络地址,再确定主机号。
CIDR 无分类编址
CIDR:IP 地址后加上 “/“,再写上网络前缀的位数。那么地址块中的地址就等于固定前缀,然后后面剩下的位数为主机号。类似于页表项。
应用:路由聚合,构成超网。取不同子网 IP 的最大相同前缀,来形成一个更高一级的子网。
要发送到理论最准确的位置,就使用最长前缀匹配。
ARP (Address Resolution Protocol)
在实际网络的链路上传输数据帧时需要使用物理地址。
ARP 协议根据 IP 地址获取物理(MAC)地址。
工作流程:
(如果在同一网段)
- 查看 ARP 缓存是否有目标主机的 ARP 表项。
- 如果没有,就缓存该报文,然后广播一个 ARP 请求报文。目标主机会对该请求进行处理。
- 目标主机比较自己的 IP 地址与请求报文中的目标 IP 地址。如果相同,就发送相应报文,其中包含自己的 MAC。
- 原主机收到后,将目标主机的 MAC 地址加入 ARP 表,然后将与其相关的缓存报文封装好发送出去。
(如果不在同一网段)
先向网关发起 ARP 请求,目标地址为网关的 IP 地址。获得网关的 MAC 地址后,将报文封装,发给网关。由网关再代为向目标主机发送报文(网关使用自己的 ARP 缓存,或者广播 ARP 请求报文)。
广播 ARP 请求分组格式:
自身IP-目标IP-自身MAC-FF-FF-FF-FF-FF-FF(目的 MAC 地址全 1,表示为广播分组)
单播 ARP 响应分组格式:
目标IP-目标 MAC 地址
ICMP
用于差错报告。发送特定的 ICMP 报文。
ICMP 差错报告报文:
- 终点不可达。无法向上层交付数据报。
- 源点抑制。因为网络拥塞而丢失数据报。
- 时间超过。生存时间 TTL=0 时,除了丢弃该数据报之外,还要发送时间超过报文。
- 参数问题。首部字段不正确时,丢弃数据报,并向源点发送参数问题报文。
- 改变路由(重定向)。让主机知道下次应当将数据报发送给另外的路由器(更优的路由器)。
ICMP 询问报文:
- 回送请求与回答报文。主机或路由器向特定主机发出询问,目标主机需要回送以测试可达性,并了解相关状态。
- 时间戳请求和回答报文。请某个主机或路由器回答当前日期与时间。
应用:
- PING. 使用 ICMP 回送请求与回答报文。
- Traceroute. 跟踪分组从源点到终点的路径。依次发送 TTL 为 1,2,3,… 的报文,每当中间路由收到 TTL 降为 0 的报文后,就发回一个时间超过差错报告报文,以此让源点知道路径上该点路由的位置。
IPv6
IPv6 格式:
共 128 位,分 8 组,每组 16 位,每一组用 4 个十六进制数表示,各组用:隔开,如:
1080:0:0:0:8:800:200C:417A
当 IPv6 包含其 IPv4 地址时,最后两组通常可以写成 IPv4 的十进制+ ‘.’ 形式。
IPv6 地址结构:
前 48 位为 Global ID,全球网络标识符;之后 16 位为本地子网标识符。后 64 位为主机标识符。
无校验阶段
IPv6 不需要校验,加快了处理速度。
扩展首部代替可选字段
IPv6 不需要对扩展首部大小进行额外检查。
即插即用
不需要 DHCP 配置,可以自动配置 IP 地址。
QoS
IPv6 协议可以满足 QoS,保证一定带宽和时延的应用。
ICMPv6
配套的增强 ICMP 协议,附加了报文类型 “分组过大”。
OSPF
另一种路由选择协议。和 RIP 使用分布式 Bellman-Ford 类似,OSPF 使用的是 Dijkstra 算法。
- 向自治系统内所有路由器广播链路信息,包括它们之间链路的费用、时延、带宽等。
- 只在链路状态变化时执行步骤 1.
数据链路层
封装成帧
使用帧定界符,让接收端知道报文的每一帧。
透明传输:数据封装成帧要求满足透明传输条件,即数据中不会包含会被误认为控制信息的内容,以让链路层可以正确识别帧。
组成帧的方法:
字符计数法
字首段使用一个计数字段,标明该段帧字符数。
缺点:如果有字首段传输时因出错改变,则后面发生多米诺效应,导致整段数据出错。
字符节填充法
一种简单的方法是使用 SOH 和 EOT 字段。具体字段使用特定的比特组合来标识帧开始和帧结束。如果传输为 ASCII 文本,则可以使用该方法。因为 ASCII 文本不包含全部 8 位二进制数,因此不会出现误识别的情况。
但如果不是这种情况,就需要使用字符填充法,即当数据内部出现和控制字段一样的数值时,在其前面添加一节转义字符。
零比特填充法
首部和尾部的标识符一样,通常为 $01111110$. 然后在发送端对数据进行加工:每遇到连续的 5 个 1,就填入一个 0. 这样数据中就不会包含 $01111110$ 了。
在解包时,每遇到连续的 5 个 1,就删除一个 0.
违规编码法
在物理层实现。
SAP 服务类型
- 有确认的面向连接服务
- 有确认的无连接服务(无连接为永久链路,如局域网)
- 无确认的无连接服务
物理层
物理层用于解决传输比特流的方法。
物理层主要任务:确定与传输媒体接口有关的特性、标准
通信基础
经典数据通信模型:
通信方式
- 单工通信。单方交互,只需要一条信道。
- 半双工。两边都可以发送或接收,但不能同时发送和接收。需要两条信道。
- 全双工。可以同时发送和接收。需要两条信道。
数据传输方式
- 串行传输。例如将一个字节的 8 个 bit 由低位到高位按顺序依次发送。
并行传输。例如将 8 个 bit 同时通过 8 条信道发送。相比于串行传输速度更快,费用更高。适合近距离传输。
同步传输(区块传输)。数据以一个数据区块为单位传输。传送时,先送出同步字符,再送出整批数据。
- 异步传输。数据以比特或者小组为单位传输。传送数据时要加起始位和终止位。
其他概念
码元:指一个固定时长的信号波形或数字脉冲。作为数字信号计量单位。码元宽度指时长。有 $x$ 个状态的码元被称为 $x$ 进制码元。
码元传输速率:单位时间内传输的码元量。与进制无关, 只与码元宽度有关。
波特:码元传输速率的单位。1 波特表示每秒传输一个码元。如果一个码元携带 $n\ {\rm bit}$ 信息量,则 $M\ {\rm Baud}$ 的码元传输速率对应每秒能传输 $Mn\ {\rm bit}$ 信息。
带宽(模拟信号):单位为 Hz. 最高频率和最低频率之间的差值。
带宽(数字设备):单位为 bit/s. 前面提到过。链路最高数据传输能力。
通信定理
前置概念:
失真:带宽受限、有噪声、干扰导致的波形磨损。影响因素:码元传输速率,过快容易受磨损;信号传输距离;噪声干扰;传输媒体质量。
码间串扰: 频率过高,导致接收端收到的波形失去了码元之间的清晰界限。
奈氏准则
理想低通(无噪声,带宽受限)条件下,如果要避免码间串扰,极限码元传输速率为 2W Baud. 其中 W 为信道带宽,单位 Hz.
则极限数据传输速率
$V$ 指有几种码元(码元离散电平数目)。
香农定理
在带宽受限且有噪声的信道中,为了不产生误差,信息数据传输存在上限。
信噪比:信号平均功率/噪声平均功率 $S/N$(单位 dB),或者用如下公式表示:
香农定理公式:
编码和调制
信道分类:模拟信道与数字信道(按传输的信号分),无线信号和有线信号(传输介质)