RaymondHuang
RaymondHuang
发布于 2024-04-21 / 51 阅读
0
0

Chapter 3 —— 应用层

域名系统 Domain Name System

概述

· 域名只是一个逻辑概念,是计算机的符号名字。

· IP地址用数字来标识主机名,虽然长度固定,但不便于记忆,而域名就很容易记

· 在Internet发展初期,使用hosts文件来实现域名解析为IP。

· 后来,DNS被开发,作为一个联机的分布式数据库系统,它采用的是C/S模式

域名的结构

· 域名采用的是层次结构,由标号序列组成,每个标号由点隔开。

... .三级域名.二级域名.顶级域名

· 因为域名是层次结构的,因此互联网使用一棵树来表示域名空间结构

域名服务器

· 域名服务器管理域名,"域"是DNS结构命名和组织方式,而"区"就是这些结构在具体DNS服务器上的物理实现。一个区可以是一个完整的域,但也可以只是一个域的某一部分,即区是域的子集

· 域名服务器采用层次结构架设,每台服务器只负责部分域名的解析。

· 根域名服务器负责管理顶级域名服务器的域名和IP地址,当本地域名服务器无法解析域名的时候就要请求根域名服务器。

· 顶级域名服务器负责管理在该顶级域名服务器注册的所有二级域名

· 权限域名服务器负责一个区的域名服务器。

· 本地域名服务器离用户最近,用户发送DNS查询就是给LDNS发。

域名的解析

· 递归查询,较少用。

· 查找流程:PC->LDNS->根域名服务器->顶级域名服务器->权限域名服务器

· 返回流程:(上面倒过来)

· 迭代查询,常用,可以减少中间服务器的查询成本。

· 查找流程:PC->LDNS->根域名服务器返回顶级域名服务器地址->LDNS->顶级域名服务器->顶级域名服务器返回权限域名服务器地址->LDNS->权限域名服务器->权限域名服务器返回结果->LDNS返回结果给PC。

· 总的来说,LDNS承担几乎所有通信成本,一步一步请求,根据结果查下一步。

· 域名实际解析流程

  1. 浏览器查找自身有无本地缓存。

  2. 如果没有,去本机hosts文件查找。

  3. 还没有,去请求LDNS。

  4. LDNS查询是否有对应的A记录。

  5. 如果没有,LDNS查询是否有对应的NS记录,如果有就给该域名发请求。

  6. 如果没有,LDNS会查询是否有其二级域名(如.edu.cn)的NS记录,如果有就给该NS发请求。

  7. 如果没有,LDNS会查询是否有其顶级域名(如.cn)的NS记录,如果没有就会请求根域名服务器,然后按照迭代查询方式解析。

文件传输协议 File Transport Protocol

· FTP使用TCP传输协议,以C/S方式工作。

· FTP服务包含两大进程,他们并行运行:

  1. 主进程:负责接受新的请求

  2. 从属进程:负责处理单个请求,它包含数据进程、数据传输进程。

· 客户端与服务端之间建立两个TCP连接:

  1. 控制连接:客户端用于传送控制信息(命令),如登录、列出目录等,通常使用21端口,整个过程一直打开

  2. 数据连接:数据传输进程通过数据连接传送数据,数据传送完毕则关闭该连接。

· 主进程工作流程:

  1. 服务启动,开启21端口。

  2. 等待接收来自客户端的请求。

  3. 启动从属进程(如数据传输进程)来处理客户端发来的请求。传输完毕后关闭进程。

  4. 回到等待状态,继续等待其它客户端的请求。

· 从属进程工作流程:

  1. 建立控制连接:协商工作模式(主动PORT,被动PASV),协商数据传输的端口号等。

  2. 建立数据连接:主动模式下服务器向客户端发送建立连接,被动模式下反之。

  3. 关闭数据连接:数据传输进程完成数据传送,关闭数据连接。

· 简单文件传输协议TFTP:

  1. 使用UDP,但有自己的差错改正策略。

  2. 不支持交互(命令)。

  3. 占用内存小。

远程终端协议 TELNET

· 类似SSH,可以远程登录到某台主机上。

· TELNET使用C/S模式,客户端运行TELNET客户进程,服务端运行TELNET服务进程。

· NVT格式(用于数据传输):

  1. 客户端把用户的输入(键盘按下等)转换为NVT格式并发给服务器。

  2. 服务器把收到的NVT格式转换为本地所需要的工作格式。

  3. 服务器返回数据时,也是转换为NVT格式,客户端收到数据后再转换NVT为本地处理格式。

万维网 World Wide Web

· WWW由蒂姆·博纳斯·李(Tim Berners-lee)提出。

· 万维网是分布式的超媒体(Hyper Media)系统,超媒体是超文本(Hyper Text)的扩充。

· 超文本是指包含指向其他文档的链接的文本(<a>标签)。

· 万维网需要解决的问题:

  1. 在万维网上标识一个文档:统一资源定位器(URL)。

  2. 实现超级链接的协议:HTTP协议。

  3. 制作万维网文档:HTML语言。

  4. 在万维网上寻找信息:搜索引擎。

· HTTP协议:

  1. 使用可靠的TCP连接,通常使用80端口。

  2. 本身是一种无连接的协议,交换HTTP报文前不需要进行HTTP连接。

  3. 本身是一种无状态的协议,服务器不记录HTTP请求的详细信息,如IP等。

  4. 是一种请求/响应协议,客户端(浏览器)发送请求,Web服务器响应请求。

  5. 是一种面向事务的协议,要么所有信息交换完成,要么一点都不交换。

· 在浏览器中浏览网页发生的事情

  1. 浏览器分析超链接指向的URL。

  2. 浏览器向DNS请求解析网站域名的URL。

  3. DNS解析出URL对应的IP。

  4. 浏览器拿到IP,与对应服务器建立TCP连接。

  5. 浏览器通过HTTP发出获取文件命令,如GET /index.html。

  6. 服务器通过HTTP响应命令,返回对应的文件给浏览器。

  7. 释放TCP连接。

  8. 渲染返回的HTML文本。

· 代理服务器高速缓存:

· 内容分发网络CDN:

  1. 用于加速静态内容的获取,如图片、音视频等。

  2. 部署资源服务器在多台服务器上,根据用户地理位置选择最近服务器,加速访问。

  3. 使用CDN来做域名解析可以大大降低源站的压力。

· HTTP请求报文的组成:

  1. 请求报文由开始行、首部行和实体主体组成。

  2. 方法其实就是一些指令,如GET、POST、OPTION、DELETE等。

  3. URL就是请求资源的URL。

  4. 版本是HTTP的版本,有1.0、1.1、2.0。

  5. 首部(Headers)是请求携带的一些信息,如Token、Cookies等。

· HTTP响应报文的组成:

  1. 响应报文由开始行(状态行)、首部行和实体主体组成。

  2. 版本就是HTTP版本。

  3. 状态码都是三位数字,如成功200,重定向304,资源不存在404,服务器内部错误500等。

· HTTP虽然是无状态协议,但是可以使用Cookie来跟踪用户信息。

电子邮件 E-mail

· 电子邮件三大组成部分——用户代理、邮件服务器、协议

· 用户代理(User-Agent):其实就是电子邮件客户端软件,提供各种邮件功能,如Foxmail。

· 邮件服务器:用于发送和接收邮件,同时还要向发信人报告邮件的情况(已发送、被拒绝、丢失等)。以C/S模式工作,邮件服务器可同时充当客户端和服务端。

· 协议:

  1. 传输方式协议:简单邮件传输协议(SMTP)、通用邮件扩展协议(MIME)。

  2. 邮件存取访问方法协议:邮局协议第3版(POP3)、邮件访问协议第4版(IMAP-4)。

· 发送和接收邮件的过程:

  1. 编辑与发送:发信人用UA编辑好邮件后,UA用SMTP把邮件发送至邮件服务器。

  2. 邮件在队列中等待:邮件在服务器的队列中等待发送。

  3. 传送邮件:发送方服务器SMTP客户进程通过TCP向接收方服务器SMTP服务器进程发送邮件。

  4. 接收邮件:接收方服务器的SMTP服务器进程把邮件放入接收人信箱。

  5. 取信:收信人在UA使用POP3或IMAP将邮件从接收端服务器取回。

· 电子邮件的组成:

  1. 电子邮件由信封和内容组成。

  2. 信封上会写上发件人(MAIL FROM)和收件人(RCPT TO)的邮箱地址。

  3. 邮件内容中的首部(header),包含发件人(From),收件人(To),日期(Date),主题(Subject),抄送(Cc)。

  4. 值得注意的是,虽然信封上已经有发件人和收件人了,看起来会和首部的内容有重复,但是这二者在功能上是不一样的,比如,可以通过中继服务器给目标邮箱发送邮件,这样MAIL FROM会改变,但是From是不会改变的。可以理解为,首部里面的信息用于显示给用户看,而信封上的信息主要用于整个工作流程

· 简单邮件传输协议SMTP:规定了两个相互通信的SMTP进程之间如何交换信息,SMTP基于TCP,以C/S模式工作。

· 邮件发送流程:

  1. UA向邮件服务器建立TCP连接(25端口),服务器返回220 Service Ready。

  2. UA使用HELO指令表示准备投送邮件,服务器返回250 OK。

  3. UA开始使用MAIL FROM等命令投送邮件,全部完成后服务器返回250 OK。

  4. UA向服务器发送QUIT指令,服务器返回221 Service Closed,双方释放SMTP连接。最后释放TCP连接。

· 邮件读取协议:

  1. POP3:一个简单的协议,以C/S模式工作,接收邮件的计算机需要运行POP客户程序。

  2. IMAP:因特网报文存取协议,以C/S工作,最新版本为IMAP4,好处是用户可以在任何地方使用任何计算机存取邮件,而且可以只允许阅读邮件的某一部分,缺点是需要频繁与IMAP服务器建立连接。

· 小总结:发信人的UA向源服务器发信,以及源服务器向目的服务器发信都是使用SMTP协议,而收信人从目的服务器读取信件则是使用POP3或IMAP协议

· 通用因特网邮件扩充(MIME):因为SMTP不能传送二进制对象(附件)、只能传送7位ASCII码(英文)、长度有限,所以MIME出现了,用于扩展SMTP。

· MIME新增了5个首部字段,MIME-Version,Content-Description(类似主题),Content-Id(邮件唯一标识符),Content-Transfer-Encoding(邮件主体的编码方式),Content-Type(邮件性质)。

· 常用的内容编码方式(Content-Transfer-Encoding)有:

  1. 7bit:7位ASCII码编码,每行不超过1000字符,是一种缺省编码。

  2. 8bit:8位非ASCII编码,每行不超过1000字符。

  3. binary:8位非ASCII编码,可编码任意长度字符串。

  4. base64:可以把任意长度字节流转换为7位ASCII编码表示的字符串,可用于二进制和非文本数据。

  5. quoted-printable:可以把任意长度的字节流转换为ASCII编码表示的字符串,可用于二进制和非文本数据。

· 常用的邮件类型(Content-Type)有:

· MIME举例:

动态主机配置协议 DHCP

· 连接到互联网的计算机协议软件需要配置的参数包括:

  1. IP地址

  2. 子网掩码

  3. 默认路由器IP地址

  4. 域名服务器IP地址

· 动态主机配置协议(Dynamic Host Configuration Protocol)提供了即插即用的机制,能为计算机自动分配IP地址等参数

· DHCP会给运行服务器软件、位置固定的计算机指派一个固定的地址;还会给运行客户端软件指派一个临时地址,客户只能在一段有限的时间(租用期)内使用这个IP地址。

· DHCP采用UDP于67号端口工作,以C/S模式运行。DHCP客户端常使用68号端口。

· DHCP工作流程:

  1. DHCP服务器启动,打开UDP的67号端口,等待客户端报文。

  2. 客户端从UDP端口68以广播形式发送DHCP发现报文(DISCOVER)。

  3. 所有收到广播报文的DHCP服务器都能发出DHCP提供报文(OFFER),因此客户端会收到多个DHCP OFFER。

  4. 客户端从收到的OFFER中选择一个,并以广播形式向所选择的服务器发送DHCP请求报文(REQUEST)。

  5. 被选择的DHCP服务器回复DHCP确认报文(ACK),进入已绑定状态,这样客户端就可以开始使用临时IP地址了。

  6. 客户端要根据服务器提供的租用期T设置两个计时器T1和T2,它们的超时时间分别是0.5T和0.75T,当超时时间到了的时候会请求DHCP服务器更新租用期(REQUEST)。

  7. 若发送续租报文后,服务器同意,则会回复确认报文(ACK),客户端重新设置计时器;如果不同意,会回复拒绝报文(NACK),这时客户端会停用当前IP,回到第2步重新申请IP。

  8. 客户端可随时提前放弃IP,向服务器发送DHCP释放报文(RELEASE)即可。

简单网络管理协议 SNMP

· 网络管理的一般模型:多台被管机运行服务端程序,一台管理机运行客户端程序,客户端程序向被管端发送指令进行控制。

· 从上图可以看到,网络管理的一般模型由以下内容组成:

  1. 管理站:运行管理程序。由网络管理员操作运行。

  2. 被管设备:可以是任何可接入网络的设备,主机、路由器等。

  3. 代理(Agent):每一个被管设备都要运行一个代理程序,用于接收来自管理站的指令并在本地执行操作。

  4. 网络管理协议:网管程序和代理程序之间通信的规则

· 简单网络管理协议(Simple Network Management Protocol)中的管理程序和被管程序按照C/S模式工作。

· SNMP的基本功能包括监视网络性能、检测分析网络差错、配置网络设备等。

· 委托代理:若被管设备使用的网络管理协议不是SNMP,则可以使用委托代理(Proxy Agent)进行转换、过滤等。

· SNMP的网络管理构成:

  1. SNMP协议本身:完成网管操作。

  2. 管理信息结构(Structure of Management Info,SMI):建立规则。

  3. 管理信息库(Management Info Base,MIB):对变量进行说明。

· 信息管理结构SMI:

  1. 规定:被管对象应如何命名?用来存储被管对象的数据类型有哪些?在网络上传送的管理数据的编码方式

  2. SMI规定所有被管对象一定要在命名树上。

  3. SMI规定所有的MIB变量必须使用抽象语法记法1(ASN.1)来定义。该记法非常严格,使得数据的含义不存在任何可能的二义性

  4. SMI使用ASN.1规定的基本编码规则BER(Basic Encoding Rule)对数据进行编码。

· 管理信息库(Management Info Base):

  1. 被管对象必须维持可供管理程序读写的若干控制状态信息。这些信息就是MIB。

  2. MIB在被管对象中创建了命名对象,并规定了其类型,这样管理程序就可以使用MIB中的信息对网络进行管理。

· 实际上,SNMP的操作只有两种基本的管理功能:

  1. :用get报文来检查各被管对象的状况;

  2. :用set报文来修改各被管对象的状况。

· 探询操作:SNMP的读写操作依赖于探询操作实现,即管理进程定时向被管进程发送探询信息译获取实时状态。

· 陷阱(Trap):被管对象可以在某些事件被触发的时候(如温度过高、接口关闭等)主动地向管理进程发送消息,这个消息就被称为SNMP陷阱。这样就不需要等待管理进程探询才发现问题,提高了系统的可管理性。

· 综合探询操作和陷阱机制,SNMP就被认为是一种有效的网络管理协议。

· SNMP使用的是UDP连接。

 应用进程跨越网络的通信

· 系统调用:App与OS之间传递控制权,若App需要从OS获取服务,就要把控制权传递给OS,OS执行完对应操作后把控制权归还给App。

· 系统调用接口:App与OS之间通信的一个接口。

· 应用编程接口(Application Programming Interface):在这里特指对系统调用接口进行封装,这样在调用系统调用接口的时候,只需要关心传入参数即可,具体实现被屏蔽。

· 对于与OS内核中的TCP/IP协议软件进行交互,不同厂商提供了不同的API:

  1. Berkeley UNIX:定义了套接字接口(Socket Interface)。

  2. Windows:定义了Windows Socket(WinSocket)。

  3. AT&T:定义了Transport Layer Interface(TLI)。

· 只要App要通过TCP/IP协议进行通信,就必须通过套接字与OS交互(通过API):

· 套接字(Socket):当App需要进行网络通信时就会通过API进行系统调用请求OS为其创建一个Socket,OS会把网络通信需要的资源(CPU、存储空间、宽带等)分配给该App,操作系统用一个套接字描述符(一个号码)来标识这些资源。当App完成网络通信后,会再通过API发送一个回收套接字资源的系统调用给OS。

· 执行系统调用的过程(TCP/IP):

  1. 连接建立

    - 服务器创建套接字,调用bind指令来指定套接字的本地地址,这样就把本地地址绑定到套接字

    - 服务器使用listen指令把套接字设置为被动方式以便接收客户端的请求(若是UDP则无须设置)。

    - 服务器使用accept指令来提取客户端发送来的请求

  2. 传送数据

    - 客户端和服务器都在TCP连接上使用send发送数据,使用recv接收数据。通常客户端使用send发送请求,客户端使用send发送回答;服务器用recv接收客户端请求,客户端用recv接收服务器返回的数据。

  3. 连接释放

    - 一旦客户端和服务器结束使用Socket,就调用close来释放和撤销Socket。

点对点 Peer to Peer

· P2P是一种网络通信模型,它允许网络中的每个节点之间直接通信,而不需要中心服务器支持。

· 接下来对多个类型的P2P应用进行举例。

· 具有集中目录服务器的P2P工作方式——Napster:

  1. Napster的中心服务器只存储索引而不存具体文件内容

  2. 用户只需要向Napster服务器查询哪台主机上拥有想要的文件,然后根据返回结果使用P2P去请求对应主机下载即可。

  3. 这种方式缺点在于可靠性差,而且中心服务器可能成为性能瓶颈

· 具有全分布式结构的P2P文件共享程序——Gnutella:

  1. 不使用集中式的目录服务器,而是使用洪泛法在大量Gnutella用户之间查询

  2. 当然,为了不使查询通信量过大,Gnutella设计了一种有限范围的洪泛查询,但这肯定会影响查询结果的准确性。

· 比特洪流BitTorrent

  1. 与传统的文件下载模式不同,BitTorrent不依靠单一服务器来传输数据,而是通过网络中每个下载者(Peer,或节点)相互传输文件的部分数据

  2. 文件发布者会创建一个种子文件(.torrent),里面包含了文件的元数据以及种子文件的追踪器

  3. 追踪器是一个服务器,用来跟踪哪些对等节点拥有文件的哪些部分

  4. 用户使用BitTorrent客户端打开种子文件后,客户端会根据跟踪器从多个peer中下载文件块数据。

  5. 文件是被切为多个小块的,客户端会从多个peer下载不同块,一旦下载一个块,客户端就会上传这个块供其他用户下载。

· 向对等方请求数据时,应遵循最稀有优先(rarest first)的技术,即,若A所缺少的文件块在相邻对等方中的副本很少,那应该先请求这些文件块。

· 若有很多相邻对等方向A请求文件块,那应该遵循,谁以最高速率向A传送文件块,就先对谁传输文件块(谁对我好,我对他好。

· P2P系统中,对等方数量很多,而且任何对等方可随时加入或退出,那就需要构建一个分布式数据库来有效找到所需要的目标文件。· · P2P采用分布式哈希表(Distributed Hash Table,DHT)来实现这个数据库,这是由多个对等方来同时维护的哈希表。



评论