1. 域名系统 DNS
1.1. 概述
域名系统DNS:Domain Name System;是一个联机分布式数据库系统,采用客户服务器方式;其解析如下:当某个应用进程需要将主机名解析为 IP 地址,应用进程调用解析程序,并成为 DNS 的一个客户,待解析的域名放在 DNS 保温,以 UDP 发送给本地域名服务器,本地域名服务器查找域名后,将对应 IP 地址放在回答报文中返回;
1.2. 互联网的域名结构
层次树状结构的命名方法;任何连在互联网上的主机和路由器,都有一个唯一的层次结构的名字,即域名;域是名字空间中一个可被管理的划分,域还可以被划分子域,子域还可以被划分子域的子域;
DNS 规定,域名中标号都是由英文字母和数字构成,每一个标号不超过 63 个字符;标号中除连字符(-)外不可使用其他的标点符号;
顶级域名分为:国家顶级域名、通用顶级域名、基础结构域名;
1.3. 域名服务器
一个服务器所管辖的范围叫做区;每个区设置相应的权限域名服务器;区是 DNS 服务器实际管辖的范围,区可能等于或小于域,但一定不能大于域;
当某个 DNS 不能进行域名到 IP 地址的转换的狮虎,就会设法找到互联网上别的域名服务器进行解析;
- 根域名服务器:root name server,最高层次的域名服务器,也是最重要的域名服务器;根域名服务器采用任播技术,当 DNS 客户向某个根域名服务器的 IP 地址发出查询报文,互联网上路由器可以找到离这个客户最近的一个根域名服务器;
- 顶级域名服务器:负责管理该顶级域名服务器注册的所有二级域名;
- 权限域名服务器:负责一个区的域名服务器;
- 本地域名服务器;
1.3.1. 域名解析过程
1.3.1.1. 注意点
- 主机向域名服务器的查询一般都采用递归查询;如果主机所询问的本地郁闷服务器不知道被查询域名的 IP 地址,那么本地域名服务器以 DNS 客户的身份向其他的根域名服务器继续发出查询请求报文,替该主机继续查询;
- 本地域名服务器向根域名服务器查询通常采用迭代查询;根域名服务器收到本地域名服务器迭代查询请求报文,要么告知 IP 地址,要么告知本地域名服务器,你下一步应该向哪一个域名服务器进行查询,再让本地域名服务器,继续后续的查询;
1.3.1.2. 查询流程:
2. 文件传送协议
2.1. FTP
2.1.1. FTP 概述
FTP 是曾经是互联网上使用最广泛的文件传送协议;
2.1.2. FTP 基本工作原理
在最初,两台主机传送文件,往往是一件困难的事情;需要遇到:1. 计算机存储数据格式不同;2. 文件的目录结构和命名的规定不同;3. 对于相同的文件存取功能,操作系统使用的命令不同;4. 访问控制方法不同;
文件传送协议 FTP 只提供文件传送的一些基本服务,使用 TCP 可靠的运输服务;主要功能是减少或消除在不同操作系统下处理文件的不兼容性;
采用 客户服务器 方式;一个 FTP 服务器进程可以同时为多个客户进程提供服务;FTP 服务器进程由两大部分组成:一个主进程,负责接收新的请求;另外有若干从属进程,负责处理单个请求;主进程的工作步骤如下:
1. 打开端口,使得客户进程可以连接上;
2. 等待客户进程发出连接请求;
3. 启动从属进程处理客户进程发来的请求;从属进程处理完毕后即种植,但是从属进程在运行期间根据需要可能还需要创建一些其他的子进程;
4. 回到等待状态;继续接受其他客户进程发来的请求;
FTP 工作情况如上图,服务端有两个从属进程:控制进程和数据传送进程;文件传输时,FTP 客户和服务器之间建立两个并行的 TCP 链接:控制连接和数据连接;实际用于传输文件的是数据连接,传送完毕后,关闭数据传送连接;采用分离的控制连接,控制信息是用这个来传输的;
客户向服务器发送建立连接的请求时,要寻找熟知的 21 端口,同时告诉服务器进程自己的另外一个端口号码,用来建立数据连接;紧接着,服务器将自己传输数据的数值端口 20 域客户进程所提供端口号建立数据传送连接;因为 FTP 采用两个不同的端口号,所以数据连接域控制连接不会发生混乱;
2.1.3. FTP 劣势
FTP 并非对所有数据传输都是最佳,如果 A 在 B 的很大的文件末尾追加一行;如果使用 FTP,就向要将文件从 B 传至 A,再添加上信息,再用 FTP 传送给 B ;这就浪费很多,因为 A 不需要该文件内容;此时有另一种网络文件系统 NFS ,他允许应用进程打开一个远地文件,并且再某一特定位置上读写数据;
2.2. TFTP 协议
一个很小且易于实现的文件传输协议,采用 UDP 数据包;只支持文件传输不支持交互,且没有庞大指令集,也没有列目录功能,也不能鉴权;但优点:可用于 UDP,占用内存小;用于一些小计算机和特殊用途设备;该设备不需要硬盘,只需要固化了 TFTP、UDP、IP 的小容量只读器;通电后,执行只读器代码,广播一个 TFTP 请求,收到响应,直接将文件放入内存执行运行程序;增加灵活性,也降低开销;(熟知端口号为 69)
2.2.1. 主要特点
- 每次传输数据报文有 512 字节,最后一次可不足;
- 数据报文按序编号,从 1 开始;
- 支持 ASCII 码和二进制传送;
- 可以对文件进行读或写;
- 使用很简单的首部;
3. 远程终端协议 TELNET
TELNET 是一个简单的远程终端协议;用户使用 TELNET 就可以通过 TCP 连接注册到远地的另一台主机;TELNET 又称为终端仿真协议;该协议不复杂,以前应用很多,但是因为计算机功能越来越强,反而现在使用的较少了;
TELNET 可以适应很多计算机和操作系统的差异;TELNET 为了适应差异,定义了数据和命令应该怎么通过互联网;这些定义,就是网络虚拟终端 NVT (Network Virtual Terminal);
4. 万维网 WWW
4.1. 万维网概述
万维网 是一个大规模的、联机式的信息储藏所;
万维网是一个分布式的超媒体系统,是超文本系统的扩充;万维网以客户服务器方式工作;客户程序向服务器程序发出请求,服务器程序向客户程序送回客户索要的万维网文档,再一个客户程序主窗口显示出来的万维网文档称为页面;
4.1.1. 需解决问题
- 怎么标志分布在整个互联网上的万维网文档? -- URL
- 用什么样的协议来实现万维网的各种链接? -- HTTP
- 怎么使不同作者创作不同风格的万维网文档,都可以在互联网上各种主机上显示出来;同时使用户清楚知道在什么地方存储着链接? -- HTML
- 怎么使用户能够很方便地找到所需的信息? -- 搜索工具
4.2. 统一资源定位符 URL
4.2.1. URL 的格式
格式:协议://主机名(:端口)/路径
;
4.2.2. 使用 HTTP 的 URL
格式:http://主机名(:端口)/路径
;
4.3. 超文本传送协议 HTTP
4.3.1. HTTP 操作过程
HTTP 本身是无连接的,无状态的;同时,用户点击某个万维网文档后,协议 HTTP 首先要和服务器建立 TCP 链接,需要使用三报文握手;建立 TCP 连接的三报文握手的前两个报文完成后,将 HTTP 请求报文,作为建立 TCP 连接的第三个报文数据发给服务器,收到后,将所请求的文档作为响应报文返回给客户;
每次请求一个文档都有两倍 RTT 开销,这正是 HTTP/1.0 的主要缺点;协议 HTTP/1.1 较好解决该问题,采用持续连接,即在服务器发送响应后,仍然在一段时间内保留这条连接,后面的请求和响应报文可以继续在这上面工作;并不局限于传送同一个页面上链接的文档,而是只要这些文档都在一个服务器上即可;协议 HTTP/1.1 持续连接有两种工作方式,即:非流水线方式和流水线方式;
非流水线方式:客户收到前一个响应后才发出下一个请求;服务器发送完一个对象后,会处于空闲状态;
流水线方式:客户收到响应报文前,就直接发送新的请求报文;
HTTP/2 是 HTTP/1.1 的升级版本;其主要特点:1. 在 HTTP/1.1 中,客户连续向服务器发出多个请求,但是服务器返回影响,需要逐个;HTTP/2 可以并行返回;2. HTTP/1.1 客户收到服务器返回响应,原来 TCP 连接就释放;HTTP/2 允许服用 TCP 连接进行多个请求;3. HTTP/1.1 请求响应都是面向文本的;当连续发送请求受到响应,TCP 连接上传送的 HTTP 首部成为不小开销,大部分重复字段;为此 HTTP/2 将所有报文划分许多较小的二进制编码的帧,并采用新的压缩算法,不发送重复的首部字段;
4.3.2. 代理服务器
代理服务器是一种网络实体,又称为万维网高速缓存;代理服务器将最近的一些请求和响应暂存在本地磁盘,新请求到达的时候,发现请求和暂时存放的相同,返回暂存的响应;避免再次访问资源;(例如:内容分发网络CDN)
4.3.3. HTTP 的报文结构
4.4. 万维网的文档
4.4.1. HTML
超文本标记语言 HTML;以及 CSS 层叠样式表为 HTML 文档定义布局;
4.4.2. 动态万维网文档
CGJ 程序的正式名字是 CGI 脚本;例如 C、C++、JavaScript 等;不一定是一个独立程序,可以是一个动态装入的库,甚至是服务器的一个子程序;CGI 程序又称为:cgi-bin 脚本;
4.4.3. 动态万维网文档
后面需要屏幕连续更新,一种技术是服务器推送,还有一种是活动文档,由浏览器运行程序的副本;
4.5. 万维网信息检索系统
- Baidu
- BiYing
- ......
5. 电子邮件
5.1. 电子邮件概述
SMTP 简单邮件传送协议[RFC 5321]和互联网文本报文格式[RFC 5322],是两个最重要的草案标准;同时,因为 SMTP 只能传送可打印的 7 位 ASCII 码邮件,因此又发布了通用互联网邮件扩充MIME[RFC 2045];
一个电子邮件系统具有三个主要组成构件:用户代理、邮件服务器、邮件发送协议(SMTP)和邮件读取协议(POP3);
用户代理 UA 是用户域电子邮件的接口,大多数下是客户端软件;需要至少有:1. 撰写;2. 显示;3. 处理;4. 通信;四个功能;
电子邮件由信封和内容两部分组成;信封上最重要是收件人地址,TCP/IP 体系的电子邮件地址规定:用户名@邮件服务器的域名
;
5.2. 简单邮件传送协议 SMTP
SMTP 规定了在两个 SMTP 进程之间应如何交换信息;SMTP 使用客户服务器模式;SMTP 规定了 14 条命令和 21 条应答信息;每条命令用几个字母组成,每种应答信息一般只有一行信息;
5.2.1. 连接建立
发送人的邮件发送到发送方邮件服务器的邮件缓存后,SMTP 客户每隔一定时间对邮件缓存扫描一次;发现有邮件,则与邮件服务器建立 TCP 连接,连接建立后,接收方 SMTP 服务器发出 220 Service Ready 服务就绪;然后 SMTP 客户向服务发送 HELO 命令,附上发送方主机名;SMTP 服务器有能力接受邮件,则回答 250 OK;如果不可用,则回答 421 Service not avaliable 服务不可用;
一定时间内发送不了邮件,邮件服务器会通知发件人;且 SMTP 不使用中间的邮件服务器;
5.2.2. 邮件发送
邮件发送从 MAIL 命令开始;MAIL 命令后跟随发件人地址;SMTP 服务器准备好接收邮件,则回答 250 OK;否则返回无法接收原因代码;
接着是一个或多个 RCPT 命令,取决同一个邮件发送一个或多个收件人;其命令作用:弄清接收方系统是否准备号接收,然后发送;避免浪费通信资源;
接着是 DATA 命令,表示开始传送邮件内容;
5.2.3. 连接释放
邮件发送完毕,客户发送 QUIT 命令;SMTP 返回 221 服务关闭,同意释放;全部过程则结束;
5.3. 电子邮件的信息格式
邮件分为信封和内容;草案文档规定了首部格式,但是对主体部分让用户自由撰写;
5.4. 邮件读取协议 POP3 和 IMAP
邮局协议 POP 非常简单,但功能有限的邮件读取协议;IMAP 网际报文存取协议,比 POP3 复杂得多;
5.5. 通用互联网邮件扩充 MIME
5.5.1. MIME 概述
在前述的 SMTP 协议有缺陷:1. 不可传送可执行文件或其他二进制对象;2. SMTP 限制传送 7 位 ASCII 码;3. 拒绝超过一定长度的邮件;4. 某些 SMTP 的实现没有完全按照 SMTP 互联网标准;
MIME 主要包括了下面三部分内容:
1. 5 个新的邮件首部字段;
2. 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化;
3. 定义了传送编码,可对任何内容格式进行转换,而不会被邮件系统改变;
新增的 5 个邮件首部字段及意义:
1. MIME-Version: 标志 MIME 版本;
2. Content-Description: 可读字符串,说明此邮件是否是图像、音频或视频;
3. Content-Id: 邮件的唯一标识符;
4. Content-Transfer-Encoding: 传送时邮件的主体是如何编码的;
5. Content-Type: 说明邮件主体的数据类型和子类型;
5.5.2. 内容传送编码;
-
ASCII
最简单的:ASCII 编码;每行不可超过 1000 个字符;MIME 对其不进行任何转换;
-
quoted-printable
这种编码,适用于传送数据只有少量非 ASCII 编码;例如:汉字;对于所有可打印 ASCII 码,除特殊字符等号外,军不改变;等号和不可打印的 ASCII 以及非 ASCII 数据,将每个字节的二进制码用两个十六进制的数字表示,在前面加上等号;例如系统二字:11001111 10110101 11001101 10110011 ;十六进制:CFB5CDB3;编码表示:=CF=B5=CD=B3;
-
base64 编码
二进制文件可以使用该编码;
5.5.3. 内容类型
MIME 标准规定 Content-Type 说明必须含有两个标识符,即内容类型和子类型,中间采用 /
分开;诸如下表格:
MIME 类型 | 音频或视频类型 |
---|---|
audio/wave 、audio/wav 、audio/x-wav 、audio/x-pn-wav | 采用 WAVE 容器的音频文件。一般支持 PCM 音频编码(WAVE codec "1"),其他解码器有限支持(如果有的话)。 |
audio/webm | 采用 WebM 容器的音频文件。Vorbis 和 Opus 是 WebM 规范官方支持的最常用的解码器。 |
video/webm | 采用 WebM 容器的音视频文件。VP8 和 VP9 是其最常用的视频解码器。Vorbis 和 Opus 是其最常用的音频解码器。 |
audio/ogg | 采用 OGG 容器的音频文件。Vorbis 是这个多媒体文件格式最常用的音频解码器。现在,同样也支持 Opus。 |
video/ogg | 采用 OGG 容器的音视频文件。常用的视频解码器是 Theora;常用的音频解码器为 Vorbis,不过 Opus 也变得越来越常用。 |
application/ogg | 采用 OGG 容器的音视频文件。常用的视频解码器是 Theora;音频解码器为 Vorbis。 |
6. 动态主机配置协议 DHCP
动态主机配置协议 DHCP,提供一种机制:即插即用连网;该机制允许一台计算机加入新的网络和获取 IP 地址不用手工参与;
DHCP 采用客户服务器方式;需要 IP 地址的主机在启动的时候就向 DHCP 服务器广播发送发现报文(DHCPDISCOVER,目的 IP 地址为 255.255.255.255);只有 DHCP 服务器对此广播报文进行回答;回答报文叫做提供报文(DHCPOFFER);
我们并非愿意在每个网络上都设置一个 DHCP 服务器,这样会使 DHCP 服务器数量太多;因此现在是使每个网络至少有一个 DHCP 中继代理;当 DHCP 中继代理收到发现报文,以单播方式向 DHCP 转发此报文;详见下图,(DHCP 报文只是 UDP 用户数据包的数据,还需呀有 UDP 首部、IP 数据包首部、MAC 帧的首部和尾部);
DHCP 服务器分配的地址是临时的,客户只可以在一段有限的时间使用这个分配到的地址;这段时间称为租用期;租用期是 4 字节的二进制数字,单位秒;范围 1 秒 到 136 年;
详细工作流程:
- DHCP 服务器打开 UDP 端口 67,等待客户端发来的报文;
- DHCP 客户从 UDP 68 发送 DHCP 发现报文;
- 凡是收到 DHCP 发现报文的 DHCP 服务器都发出 DHCP 提供报文;因此 DHCP 客户可能收到多个 DHCP 提供报文;
- DHCP 客户从几个 DHCP 服务器选择其中一个,并向所选择的 DHCP 服务器发送 DHCP 请求报文;
- 被选择的 DHCP 服务器发送确认报文 DHCPACK,这个时候 DHCP 客户可以使用这个 IP 地址了;这种状态叫做已绑定状态,因为 DHCP客户端 IP 地址和 MAC 地址已经完成绑定,并且可以开始使用得到的临时 IP 地址了;DHCP 客户现在要根据服务器提供的租用期 T 设置两个计时器 T1 和 T2,他们的超时时间分别是 0.5T 和 0.875T;当超时时间到达,就需要请求更新租用期;
- 租用期过了一半时间(T1时间到),DHCP 客户发送请求报文 DHCPREQUEST 要求更新租用期;
- DHCP 服务器若同意,则发挥确认报文 DHCPACK;DHCP 客户得到新的租用期,重新设置计时器;
- DHCP 如果不同意,发挥 DHCPNACK;这个时候 DHCP 客户必须要立即停止使用原来的 IP 地址,重新申请 IP 地址回到步骤2;如果 DHCP 服务器不响应步骤 6 的请求报文,则在 T2 时间,DHCP 必须重新发送请求报文,然后继续后面步骤;如果 T2 之后仍然没有任何服务器响应,客户端会进入 INIT 状态,重新开始整个流程(从
DHCPDISCOVER
开始); - DHCP 客户随时可以提前终止服务器所提供的租用期,这时只需向 DHCP 服务器发送 释放报文 DHCPRELEASE;
7. 简单网络管理协议 SNMP
7.1. 网络管理的基本概念
网络管理包括对硬件、软件和人力使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就可以以合理的价格满足网络的一些需求,如实时运行性能、服务质量等;网络管理常简称为网管;
管理站又被称为管理器,是整个网络管理系统的核心;管理站所在部门也常被称为:网络运行中心 NOC(Network Operations Center);管理站中关键构件是管理程序,运行时称为管理进程;管理站或程序都可以被称为管理者或管理器;
在被管网络中有很多被管设备,可以是主机、路由器、打印机、集线器等等...;被管设备可称为:网络元素或简称为网元;当然,也会有一些不被管对象;
每个被管设备中运行一个程序以便和管理站中管理程序进行通信,这些运行的程序被称为网络管理代理程序;其中还有一个重要构件就是网络管理协议,简称网管协议;
简单网络管理协议 SNMP;网络管理有一个基本原理:**若要管理某个对象,则必然会给该对象添加一些软件或硬件,这种添加对原有对象影响需要尽量小;**SNMP 正式按照这个基本原理设计;其由三个部分组成:即 SNMP 本身、管理信息结构 SMI、管理信息库 MIB;
SNMP 定义管理站和代理之间所交换的分组格式;SMI 定义命名对象和定义对象类型的通用规则,以及把对象和对象的进行编码的规则;确定网络管理数据的语法和语义;MIB 在被管理的实体中创建了命名对象,并且规定了其类型;
7.2. 管理信息结构 SMI
管理信息结构 SMI 是 SNMP 的重要组成部分;SMI 功能应该有:1. 被管对象如何命名;2. 用来存储被管对象的数据类型有哪些;3. 在网络上传送的管理数据应该如何编码;
7.2.1. 被管对象命名
SMI 规定,所有被管对象都必须要处在对象命名树上;
7.2.2. 被管对象的数据类型
SMI 使用基本的抽象语法记法1(ASN.1)来定义数据类型,且增加了一些新定义;SMI 将数据类型分为两大类:简单类型和结构化类型;
类型 | 大小 | 说明 |
---|---|---|
INTEGER | 4 字节 | 整数 |
Integer32 | 4 字节 | 同上 |
Unsigned32 | 4 字节 | 无符号整数 |
OCTET STRING | 可变 | 不超过 65535 字节长字符串 |
OBJECT IDENTIFIER | 可变 | 对象标识符 |
IPAddress | 4 字节 | IP 地址 |
Counter32 | 4 字节 | 可从 0 增加到 232 的整数,到达最大返回 0 ; |
TimeTicks | 4 字节 | 记录时间的计数值,单位:1/100 秒; |
BITS | -- | 比特串 |
Opaque | 可变 | 不解释的串 |
SMI 还定义了两种结构化数据类型:sequence
和 sequence of
;sequence
类似 C 中 struct
或者 record
;sequence of
类似于 array
;
7.2.3. 编码方法
SMI 使用 ASN.1 制定的基本编码规则 BER 进行数据编码;BER 指明了每种数据的类型和值;在发送端用 BER 编码,接收端解码;初看,或许俩个字段可表示类型和值,但是因为表示值可能需要多个字节,因此还需要一个指出要用多少字节表示值的长度字段;因此 ASN.1 将所有数据元素都表示为 T-L-V 三个字段组成的序列;T 字段定义数据的类型,L 字段定义 V 字段的长度,V 字段定义数据的值;
-
T 字段:标记字段;占 1 字节;分为三个子字段:
- 类别:2 位;通用类 00,应用类:01,上下文类:10,专用类:11;
- 格式:1 位;指出数据类型的种类;简单数据类型:0;结构化数据类型:1;
- 编号:5 位;标志不同的数据类型;范围:0 ~ 30;大于30 ,T 字段就要扩展多个字节(很少发生)
类型 类别 格式 编号 T 字段 二进制 T 字段 十六进制 INTEGER 00 0 00010 00000010 02 OCTET STRING 00 0 00100 00000100 04 OBJECT IDENTIFIER 00 0 00110 00000110 06 NULL 00 0 00101 00000101 05 Sequence, Sequence of 00 1 10000 00110000 30 IPAddress 01 0 00000 01000000 40 Counter 01 0 00001 01000001 41 Gauge 01 0 00010 01000010 42 TimeTicks 01 0 00011 01000011 43 Opaque 01 0 00100 01000100 44 -
L 字段又叫做长度字段;L 字段位单字节,其高位位 0 ;L 字段为多字节,最高位为 1,后面 7 为定义后续字节的字节数;
-
V 字段又叫做值字段:用来定义数据元素的值;且 V 字段里面可以嵌套其他数据元素的 TLV 字段,并可多重嵌套;
7.3. 管理信息库 MIB
管理信息:互联网的网管框架中被管对象的集合;被管对象必须要维持可供管理程序读写的若干控制和状态信息;这些被管对象构成了一个虚拟的信息存储器,所以被称为:管理信息库 MIB ;
8. 应用进程跨越网络的通信
8.1 系统调用和应用编程接口
大多数操作系统使用系统调用的机制在应用程序和操作系统之间传递控制权;
当某个应用进程启动系统调用,控制权就从应用传递给系统调用接口;然后此接口再传递给操作系统;因此,系统调用接口就是应用进程的控制权和操作系统的控制全进行转换的一个接口;因为应用程序再使用系统调用之前要编写一些程序,特别是需要设置系统调用之中的许多参数,因此这种系统调用接口又称为应用编程接口 API;
现在 TCP/IP 协议软件已驻留再操作系统中;由于 TCP/IP 协议族被设计能运行在多种 OS 下,因此 TCP/IP 标准没有规定应用程序域 TCP/IP 协议软件如何接口的细节,系统设计者可以自己选择;其中 Unix 定义的一套 API 称为套接字接口;微软在其 OS 采用套接字接口 API 形成稍有不同的 API,称为:Windows Socket;
8.2 几种常用的系统调用
- 连接建立阶段
- 数据传输阶段
- 连接释放阶段
9. P2P 应用
例如:BT 下载;PT 下载;还有 PCDN之类的;