网络协议(network protocol)
网络协议是为进行网络中的数据交换而建立的规则、标准或约定。协议规定了通信实体之间所交换的消息的格式、意义、顺序以及针对收到消息或发生的事情所采取的动作。协议的三要素:
- 1.语法(syntax):数据于控制信息的结构或格式;信号电平。
- 2.语义(semantics):需要发出何种控制信息;完成何种动作以及做出何种响应;差错控制。
- 3.时序(timing):事件顺序;速度匹配。
通俗的说协议就是通信双方能够理解的一种数据格式。文本协议(text protocol):一般由一串ASCII字符组成的数据。二进制协议(binary protocol):是一串字节流,通常包括消息头(header)和消息体(body),消息头的长度固定。
协议分层
在实际的计算机网络中,两个实体之间的通信情况非常复杂。为了简化这一过程,将整个网络的通信功能划分为多个层次(分层描述),每层各自完成一定的任务,并且功能相对独立。这种分层设计的好处是可以将复杂的问题分解为更小、更容易处理的子问题,并且每个层次都可以独立地开发和改进,而不会影响到其他层次。分层原则:
- 网络中各结点都有相同的层次
- 不同结点相同层次具有相同的功能
- 同一结点相邻层间通过接口通信(通过服务访问点SAP(service access point),交换原语,指定请求的特定服务)
- 每一层可以使用下层提供的服务,并向上层提供服务
- 不同结点的同等层间通过协议来实现对等层(peer layer)间的通信(PDU)
TCP/IP四层模型和OSI七层模型
OSI(Open System Interconnection)/ISO:开放系统互联模型定义了异构计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI属于参考模型(reference model)。并把网络通信的工作分为7层。 TCP/IP(Transmission Control Protoco/Internet Protocol):TCP/IP模型包含了一系列构成互联网基础的网络协议,是Internet的核心协议,目前已经成为事实上的国际标准;该模型分为4层:链路层(Link Layer)、网络层(Internet Layer)、传输层(Transport Layer)、应用层(Application Layer),属于协议层模型。NIC(Network interface Card)网卡工作在物理层及数据链路层,用于接收和发送计算机数据。
| 层级 | TCP/IP四层模型 | OSI七层模型 | 功能 |
|---|---|---|---|
| 7 | 应用层 | 应用层(Application) | 为用户提供接口使用网络服务 |
| 6 | 表示层(Presentation) | 处理两个系统间交换信息的语法与语义(syntax and semantics);为用户提供数据呈现的方式(数据格式、数据压缩、数据加密) | |
| 5 | 会话层(Session) | 为用户管理会话(dialog controlling)(建立、维持、关闭) | |
| 4 | 传输层 | 传输层(Transport) | 为用户提供数据可靠或不可靠传输;负责端到端(进程间)完整报文传输;报文分段与重组、SAP寻址(端口号)、连接控制、流量控制、差错控制 |
| 3 | 网络层 | 网络层(Network) | 分组(packet)提供三层逻辑寻址(logical address),通过路由器实现路由(routing)和分组转发 |
| 2 | 链路层 | 数据链路层(Data Link) | 组帧(framing)提供二层物理寻址(physical address),流量控制(flow control),差错控制(error control),访问控制(access control),通过交换机实现数据转发; |
| 1 | 物理层(Physical) | 用于提供通信介质、接口标准、比特编码、数据率、比特同步、传输模式 |
通信过程
- 在源终端设备的应用层创建数据。
- 数据在源终端设备沿协议族向下传递时对其分段和封装。
- 在协议簇链路层的介质上生成数据。
- 通过介质和任意中间设备组成的网际网络传输数据。
- 在目的终端设备的链路层接收数据。
- 当数据在目的终端设备中沿协议簇向上传递时对其分用和重组。
- 将此数据传送到目的终端设备应用层的应用程序。
应用层协议
应用层使用在应用程序和服务中实现的协议;应用程序为我们提供创建消息的方法,应用层服务负责创建于网络交互的接口,协议则负责提供进行数据处理的规则和格式。网络应用体系结构有:client/server 、p2p服务和混合结构。
网络应用的基础:进程间通信(消息交换)。客户机进程是发起通信的进程,服务器进程是等待通信请求的进程。进程间通信利用socket发送/接收消息实现;传输基础设施向进程提供API:传输协议的选择和参数的设置。不同主机上的进程通信,那么每个进程必须拥有标识符(IP地址+端口号)。 应用层协议的内容:消息的类型、消息的语法格式、字段的语义、规则。
常用应用层协议
Web应用(world wide web)
web应用是由网页(包含多个对象)和网页互相连接。其中对象通过URI寻址。Web应用遵循HTTP(HyperText Transfer Protocol)协议。
HTTP(Hypertext Transfer Protocol)协议
超文本传输协议是一种用于分布式、协作式和超文本信息系统的无状态应用协议。HTTP协议是无状态协议,指明协议对于事务处理没有记忆能力。每次HTTP请求都是独立的,任何两个请求之间没有必然的联系。HTTP是一种不保存状态,无状态协议,协议对于发送过来的请求或是响应都不做持久化处理。但是为了实现期望的保持状态功能,于是引入了Cookie技术,有了Cookie,和HTTP协议通信,就可以管理状态了。HTTP 默认使用端口 80。
(1) 消息语法
HTTP/1.1消息由一个后面跟着CRLF的起始行和一系列八位字节组成,其格式类似于Internet消息格式:零个或多个标头字段行(统称为“标头”或“标头部分”)、一个指示标头部分结束的空行和一个可选的消息正文。
HTTP-message = start-line CRLF
*( field-line CRLF )
CRLF
[ message-body ]
start-line = request-line / status-line
(2) Request Line
请求行以方法开始,后跟单个空格、请求目标和另一个单个空格,并以协议版本结束。请求方法指示要在目标资源上执行的请求方法,请求方法区分大小写。请求目标标识应用请求的目标资源。
request-line = method SP request-target SP HTTP-version
请求方法:
| Method | Description |
|---|---|
| GET | 请求指定页面信息,并返回实体主体 |
| HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
| POST | 向指定资源提交数据进行处理请求,数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改 |
| PUT | 用请求内容替换目标资源 |
| PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 |
| DELETE | 删除目标资源 |
| CONNECT | 建立到目标资源标识的服务器的隧道 |
| OPTIONS | 描述目标资源支持的通信选项 |
| TRACE | 沿目标资源的路径执行消息环回测试 |
(3) Status Line
响应消息的第一行是状态行,由协议版本、空格、状态码和另一个空格组成,并以描述状态码的可选文本短语结尾。
status-line = HTTP-version SP status-code SP [ reason-phrase ]
状态码是一个3位整数代码,描述服务器试图理解和满足客户端相应请求的结果。如果状态码被接收者识别,则接收者根据为该状态码定义的语义解析和解释响应消息的其余部分。状态码的第一位数字定义了响应类。最后两位数字没有任何分类角色。第一个数字有五个值:
| Status | Description |
|---|---|
| 1xx (Informational) | 已收到请求,正在继续处理 |
| 2xx (Successful) | 请求被成功接收并处理 |
| 3xx (Redirection) | 需要进一步的操作以完成请求 |
| 4xx (Client Error) | 请求包含语法错误或无法完成请求 |
| 5xx (Server Error) | 服务器在处理请求的过程中发生了错误 |
(4) Field Syntax
每个标头字段行由不区分大小写的字段名、冒号(“:”)、可选的前导空格、字段行的值和可选的尾空格组成。
field-line = field-name ":" OWS field-value OWS
字段名不区分大小写,应在超文本传输协议(HTTP)字段名注册表中注册。常见的HTTP头部字段:
| Field name | Description |
|---|---|
| Accept | 表示客户端期望服务器返回的媒体格式 |
| Accept-Charset | 表示客户端期望服务器返回的内容的字符集编码格式 |
| Accept-Encoding | 表示客户端期望服务器返回的数据压缩格式 |
| Accept-Language | 表示客户端期望服务器返回的内容的语言 |
| Cache-Control | 用于缓存控制,指示浏览器或其他缓存代理如何缓存页面 |
| Content-Type | 表示返回数据的媒体类型和编码格式 |
| Content-Length | 表示返回数据的长度 |
| Connection | 表示是否允许建立持久连接 |
| Cookie | 用于在客户端应用程序的系统上存储和检索状态信息 |
| Set-Cookie | 服务器响应 HTTP 请求,该请求用于在用户的系统上创建 Cookie |
| Host | 表示请求的主机名 |
| If-Modified-Since | 表示自某个时间以来,资源是否被修改过,用于缓存验证 |
| If-None-Match | 用于缓存验证,但是是基于实体标签的 |
| Last-Modified | 表示资源的最后修改时间 |
| Location | 用于重定向响应,指示客户端应访问的新位置 |
| User-Agent | 表示发出请求的用户代理(如浏览器)的类型、版本等信息 |
| Referer | 指示请求当前页面的来源页面 |
| WWW-Authenticate | 用于在HTTP 401响应中向客户端发出认证挑战,要求客户端提供合法的用户名和密码等身份验证信息 |
| Authenticate | 用于在客户端向服务器发送请求时,包含由用户提供的身份验证凭据 |
| Transfer-Encoding | 表示消息体的传输编码方式 |
(5) Message Body
消息体(如果有)用于承载请求或响应的内容。除非应用了传输编码,否则消息体与内容相同。
message-body = *OCTET
(6) 消息解析
解析HTTP消息的正常过程是:将起始行读取到结构中,按字段名将每个标头字段行读取到哈希表中,直到空行为止,然后使用解析的数据来确定是否需要消息正文。如果已经指示了消息体,则将其作为流读取,直到读取等于消息体长度的八位字节数量或关闭连接。当接收到与HTTP消息语法不匹配的八位字节序列时,服务器将以400(Bad Request)响应响应并关闭连接。
HTTPS(Hypertext Transfer Protocol Secure)协议
https在http协议的基础上增加了SSL/TLS(Secure Sockets Layer/Transport Layer Security)安全层。HTTPS默认使用端口443。
HTTP/2 协议
HTTP/2所有性能增强的核心在于新的二进制分帧层,它定义了如何封装 HTTP 消息并在客户端与服务器之间传输。有不同的帧类型:HEADERS frame、DATA frame、SETTINGS frame、WINDOW_UPDATE frame等。新的二进制分帧机制改变了客户端与服务器之间交换数据的方式。
(1) 二进制替换文本:HTTP1.1采用的是文本描述,也就是通过ASCII文本进行传输,采用文本描述的好处是调试程序方便,能够直接看出数据包中的数据情况。而HTTP2使用的二进制来进行传输,二进制传输计算机解析方便,体积小,性能高。
(2) 头部压缩:HTTP1.1主要是对Body进行压缩,而头部却没有压缩。HTTP2通过HPACK算法对头部进行压缩,减少了传输时间。
(3) 数据流:已建立的连接内的双向字节流,可以承载一条或多条消息。为了防止两端流ID冲突,客户端发起的流具有奇数ID,服务器端发起的流具有偶数ID。
(4) 消息:与逻辑请求或响应消息对应的完整的一系列帧。
(5) 帧:HTTP/2 通信的最小单位,每个帧都包含帧头,至少也会标识出当前帧所属的数据流(Type、Length、Flags、Stream、frame payload)。
Email应用
由邮件客户端(user agent)、邮件服务器、电子邮件协议组成。常见邮件协议有SMTP、POP、IMAP。 IMF(Internet Message Format):互联网消息格式是在计算机间发送电子邮件的文本消息语法(RFC5322)。 它描述了邮件的各个组成部分(如发件人、收件人、主题、正文(body)、附件(attachment)等),通常以ASCII编码的文本形式表示(即IMF定义了文本信息的标准;后面通过MIME多用途互联网邮件扩展类型定义了非ASCII编码文件的形式)。
SMTP(Simple Mail Transfer Protocol) 协议
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。它使用TCP作为传输协议,通过端口25来发送邮件。
(1) SMTP Commands
SMTP命令定义用户请求的邮件传输或邮件系统功能。命令本身为字母字符,命令和参数之前用空格分隔,以回车符换行终止。
| Command | Description |
|---|---|
EHLO <SP> <Domain> <CRLF> | 向服务器标识用户身份。服务器应答250,确认SMTP客户端和SMTP服务器都处于初始状态,即没有邮件事务正在进行中,并且所有状态表和缓冲区都已清除 |
MAIL <SP> < FROM:<Reverse-Path>> <CRLF> | 用于启动邮件事务,其中邮件数据被传递给一个SMTP服务器,可以向其传递给一个或多个邮箱 |
RCPT <SP> <TO:<Forward-Path>> <CRLF> | 用于标识单个邮件数据的收件人 |
DATA <SP> <CRLF> | 通知服务器要传输邮件数据,该命令行后的行视为发件人的邮件数据,以字符序列.终止。服务器响应354以.表示邮件数据结束 |
RSET <SP> <CRLF> | 当前邮件事务将被中止。必须丢弃存储的发件人、收件人和邮件数据,并清除所有缓冲区和状态表 |
VRFY <SP> <String> <CRLF> | 要求接收者确认参数标识的用户或邮箱 |
EXPN <SP> <String> <CRLF> | 要求接收者确认参数标识的邮件列表 |
HELP <SP> <String> <CRLF> | 服务器向客户端发送有用的信息 |
NOOP <SP> <String> <CRLF> | 无操作 |
QUIT <SP> <CRLF> | 关闭连接 |
(2) SMTP Replies
SMTP命令的应答用于确保邮件传输过程中的请求和操作的同步,并保证SMTP客户端始终知道SMTP服务器的状态。每个命令必须生成一个明确的应答。一个应答被定义为以下序列:三个数字代码、空格、一行文本和回车换行符,或多行回复。 应答的三位数字各有特殊意义。第一个数字表示响应是好、坏还是不完整(state diagram)。想要大致知道发生了哪种错误可以检查第二个数字。第三个数字为最精细的信息等级。
| Reply code | Description |
|---|---|
| 1yz | Positive Preliminary reply |
| 2yz | Positive Completion reply |
| 3yz | Positive Intermediate reply |
| 4yz | Transient Negative Completion reply |
| 5yz | Permanent Negative Completion reply |
POP(Post Office Protocol) 协议
POP允许用户从邮件服务器上下载邮件到本地计算机上,并支持删除邮件。它主要用于离线访问邮件,并且在下载后只能查看已下载的邮件。通过TCP的110端口提供服务。在会话期间传输的所有消息都符合IMF文本消息的格式标准。
(1) POP Commands
POP3命令由不区分大小写的命令,和后面可能跟有一个或多个参数组成。所有命令都由一对终止。命令和参数由格字符分隔。命令有三到四个字符长。每个参数最多可以有40个字符长。
| Command | Description |
|---|---|
USER <SP> <Name> <CRLF> | 用于提供用户名 |
PASS <SP> < String> <CRLF> | 用于提供密码进行身份验证 |
STAT <SP> <CRLF> | 用于获取邮箱的统计信息,如邮件数量和总字节数 |
LIST <SP> <Parameter> <CRLF> | 用于获取指定邮件的大小等信息 |
RETR <SP> <Parameter><CRLF> | 用于获取指定邮件的全部内容 |
DELE <SP> <Parameter> <CRLF> | 用于标记邮件为删除 |
RSET <SP> <CRLF> | 用于撤消所有标记为删除的邮件 |
NOOP <SP> <CRLF> | 用于执行无操作,通常用于保持会话活跃 |
QUIT <SP> <CRLF> | 关闭连接 |
TOP <SP> <Parameter> <SP> <Parameter> <CRLF> | 取出某个信件的信头和指定的行数 |
(2) POP Replies
POP应答包括一个状态指示器和后面可能跟有关键信息,以终止。应答可能长达512个字符,包括终止。目前有两个状态指示器:+OK和-ERR。
IMAP(Internet Mail Access Protocol) 协议
IMAP允许用户从本地邮件客户端访问和操作远程服务器上的邮件。包括分类管理服务器上的邮件、标记已读/未读等。它支持在线访问和管理邮件,允许用户直接在邮件客户端上对邮件进行操作,而不需要下载到本地计算机上。通过TCP的143端口提供服务。
(1) IMAP Commands
服务器处于四种状态之一(Non-Authenticated、Authenticated、Selected、Logout),多数命令仅在某些状态下有效。当命令处于不适当的状态时,客户端尝试一个命令是一个协议错误。客户端和服务器传输的所有交互都以行的形式存在;即以CRLF结尾的字符串。客户端或服务器读取一行,或读取已知个数的八位字节序列。每个客户端命令前面都有一个标识符(通常是一个短的字母数字字符串,例如A0001、A0002等),被称为标签,客户端会为每个命令生成一个不同的标签。
| Command | Description |
|---|---|
Tag <SP> AUTHENTICATE <SP> <authentication mechanism name> <CRLF> | 用于进行身份验证 |
Tag <SP> LOGIN <SP> < user name> <SP> <password> <CRLF> | 用于提供用户名和密码进行身份验证 |
Tag <SP> SELECT <SP> <mailbox name> <CRLF> | 选择一个邮箱,以便可以访问该邮箱中的邮件 |
Tag <SP> EXAMINE <SP> <mailbox name> <CRLF> | 用于获取邮箱的统计信息,如邮件数量和总字节数 |
Tag <SP> FETCH <SP> <message data item names> <CRLF> | 用于获取邮件的头信息和正文等 |
Tag <SP> CLOSE <SP> <CRLF> | 用于关闭当前选定的邮箱 |
Tag <SP> LOGOUT <SP> <CRLF> | 关闭网络连接 |
Tag <SP> NOOP <SP> <CRLF> | 用于执行无操作,通常用于保持会话活跃 |
(2) IMAP Replies
服务器响应有三种形式:状态响应、服务器数据和命令继续请求。
状态响应:状态响应可以带标签也可以不带标签。带标签的状态响应指示客户端命令的完成结果(OK(表示成功)、NO(表示失败)或BAD(表示协议错误)),并具有与该命令匹配的标签。
服务器数据:服务器数据响应总是不带标签的(用*标识)。这是消息数据从服务器传输到客户端的方式,通常是同名命令的结果。紧接*的是一个表示消息序列号的数字。
命令继续请求:命令继续响应使用+替代标签。这些响应由服务器发送,以指示接受不完整的客户端命令并准备好执行该命令的剩余部分。
FTP应用
FTP应用向用户提供了一组用来管理计算机之间文件传输的应用程序。
FTP(File Transfer Protocol) 协议
文件传输协议是用于在网络上进行文件传输的一套标准协议。主要作用是在服务器和客户端之间实现文件的传输和共享。FTP使用了两个并行的TCP连接:一条是控制连接(port:21),用于传送控制信息;一条是数据连接(port:20),用于数据传送。传输文件类型支持ASCII文件和二进制文件。(PI: Protocol Interpreter,DTP: Data Transfer Process )
(1) 传输模式
FTP支持两种模式:Port(PORT,主动方式),Passive(PASV,被动方式)。 Port模式:FTP客户端首先和服务器的TCP的21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP的20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。 Passive模式:建立控制通道和Port模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
(2) FTP Commands
FTP协议的命令是可读的,每个命令通常由4个大写的ASCII字符组成,有些命令还带一些可选参数,命令和参数之前用空格分隔,以回车符换行终止。
| Command | Command | Command |
|---|---|---|
USER <SP> <username> <CRLF> | PASS <SP> <password> <CRLF> | ACCT <SP> <account-information> <CRLF> |
CWD <SP> <pathname> <CRLF> | CDUP <CRLF> | SMNT <SP> <pathname> <CRLF> |
QUIT <CRLF> | REIN <CRLF> | PORT <SP> <host-port> <CRLF> |
PASV <CRLF> | TYPE <SP> <type-code> <CRLF> | STRU <SP> <structure-code> <CRLF> |
MODE <SP> <mode-code> <CRLF> | RETR <SP> <pathname> <CRLF> | STOR <SP> <pathname> <CRLF> |
STOU <CRLF> | APPE <SP> <pathname> <CRLF> | ALLO <SP> <decimal-integer> [<SP> R <SP> <decimal-integer>] <CRLF> |
REST <SP> <marker> <CRLF> | RNFR <SP> <pathname> <CRLF> | RNTO <SP> <pathname> <CRLF> |
ABOR <CRLF> | DELE <SP> <pathname> <CRLF> | RMD <SP> <pathname> <CRLF> |
MKD <SP> <pathname> <CRLF> | PWD <CRLF> | LIST [<SP> <pathname>] <CRLF> |
NLST [<SP> <pathname>] <CRLF> | SITE <SP> <string> <CRLF> | SYST <CRLF> |
STAT [<SP> <pathname>] <CRLF> | HELP [<SP> <string>] <CRLF> | NOOP <CRLF> |
(3) FTP Replies
FTP客户端每个发出的命令都会对应一个FTP服务器发出的应答。应答被定义为包含3位代码,后跟空格<SP>,后跟一行文本,以回车符换行终止。 应答的三位数字各有特殊意义。第一个数字表示响应是好、坏还是不完整(state diagram)。想要大致知道发生了哪种错误可以检查第二个数字。第三个数字为最精细的信息等级。
| Reply code | Description |
|---|---|
| 1yz | Positive Preliminary reply |
| 2yz | Positive Completion reply |
| 3yz | Positive Intermediate reply |
| 4yz | Transient Negative Completion reply |
| 5yz | Permanent Negative Completion reply |
DNS应用
DNS应用它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
DNS(Domain Name System) 协议
DNS域名解析系统是多层命名服务器构成的分布式层次式数据库;应用层协议完成名字的解析。主要有3个组成部分:域名空间(domain name space)和资源记录(resource record)、域名服务器(name server)、解析器(resolver)。
DNS使用TCP和UDP端口53。区域传输的时候会使用TCP协议(即DNS服务器之间迁移记录的时候会使用到TCP协议);其它时候则首选使用UDP协议。域名格式:三级域名.二级域名.顶级域名[根域名.]。
(1) 资源记录
资源记录(RRs,Resource Records)是DNS协议中的核心概念,用于存储域名系统中的各种信息。标准资源记录指的是在DNS区域中定义的标准记录类型,用于将域名映射到IP地址、别名、邮件交换器等资源。所有RR具有相同的顶级格式,如下所示:
| Filed | Length | Description |
|---|---|---|
| NAME | 不定长 | 资源记录包含的域名 |
| TYPE | 2字节 | 表示资源记录的类型,指出RDATA数据的含义。如A(a host address)、NS(an authoritative name server) |
| CLASS | 2字节 | 表示RDATA的类。如IN(the Internet) |
| TTL | 4字节 | 无符号整数,表示资源记录可以缓存的时间。0代表只能被传输,但是不能被缓存 |
| RDLENGTH | 2字节 | 无符号整数,表示RDATA的长度 |
| RDATA | 不定长 | 字符串,表示记录,格式跟TYPE和CLASS有关 |
(2) 报文格式
DNS报文格式分为DNS查询和响应的报文格式。这个报文由12字节长的首部和4个长度可变的字段组成。报文中问题字段是由客户填入的,由服务器返回问题的回答、授权和附加信息字段。报文格式如下:
Header段是必须存在的,它定义了报文是请求还是应答,也定义了其他段是否需要存在,以及是标准查询还是其他。头后面的Question段包含描述向名称服务器查询的字段,这些字段是查询类型(QTYPE)、查询类(QCLASS)和查询域名(QNAME)。最后三个段有相同的格式:可能为空的连接的资源记录列表;Answer段包含回答问题的资源记录;Authoriy段包含指向权威名称服务器的资源记录;Additional段包含与查询相关的资源记录,但不是该问题的严格答案。
FYI
- RFC(Request For Comments)是一系列以编号排定的文件。文件收集了有关互联网相关信息,以及UNIX和互联网社区的软件文件。基本的互联网通信协议都有在RFC文件内详细说明。
- 协议(protocol):网络通信时要遵守预先规定的规则,由IEEE和IETF标准化网络协议。
- 协议簇(protocol suite):是一个网络通信模型,以及一整个网络传输协议家族,为互联网的基础通信架构。网络协议规定什么是必须完成的任务,而不规定如何完成——技术无关协议。
- 实体(entity):表示任何可发送或接受信息的硬件或软件进程。协议是控制两个对等实体进行通信的规则的集合,协议是“水平的”。下层协议的实现对上层的服务用户是透明的,服务是“垂直的”。
- PDU(Protocol Data Unit):协议数据单元是指对等层次之间传递的数据单位。 物理层的 PDU是数据位(bit),数据链路层的 PDU是数据帧(frame),网络层的PDU是数据包/分组(packet),传输层的 PDU是数据段(segment),其他更高层次的PDU是报文(message)。
- Payload: 在网络通信中,Payload指的是在网络请求或响应中携带的有效数据部分。它是除去协议头、元数据等控制和管理信息之外的实际数据内容。
- PS(Protocol Stack):协议栈是指网络中各层协议的总和;一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。
- 封装(encapsulation):当应用程序传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络,其中每一层对收到的数据都要增加一些首部。封装增加控制信息(地址、差错检测编码、协议控制),构造协议数据单元。
- 分用(demultiplexing):当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部的协议标识,以确定接受数据的上层协议,这个过程称作分用。
- MIME(Multipurpose Internet Mail Extensions):多用途互联网邮件扩展类型是一种用于描述数据类型的互联网标准,它在电子邮件和其他应用程序中定义了文本、音频、视频和图像的格式。
- 五元组(quintet):传输层协议、源IP地址、目的IP地址、源端口、目的端口。
- 以太网数据格式: