域名系统 Domain Name System
概述
· 域名只是一个逻辑概念,是计算机的符号名字。
· IP地址用数字来标识主机名,虽然长度固定,但不便于记忆,而域名就很容易记。
· 在Internet发展初期,使用hosts文件来实现域名解析为IP。
· 后来,DNS被开发,作为一个联机的分布式数据库系统,它采用的是C/S模式。
域名的结构
· 域名采用的是层次结构,由标号序列组成,每个标号由点隔开。
... .三级域名.二级域名.顶级域名
· 因为域名是层次结构的,因此互联网使用一棵树来表示域名空间结构
域名服务器
· 域名服务器按区管理域名,"域"是DNS结构命名和组织方式,而"区"就是这些结构在具体DNS服务器上的物理实现。一个区可以是一个完整的域,但也可以只是一个域的某一部分,即区是域的子集。
· 域名服务器采用层次结构架设,每台服务器只负责部分域名的解析。
· 根域名服务器负责管理顶级域名服务器的域名和IP地址,当本地域名服务器无法解析域名的时候就要请求根域名服务器。
· 顶级域名服务器负责管理在该顶级域名服务器注册的所有二级域名。
· 权限域名服务器负责一个区的域名服务器。
· 本地域名服务器离用户最近,用户发送DNS查询就是给LDNS发。
域名的解析
· 递归查询,较少用。
· 查找流程:PC->LDNS->根域名服务器->顶级域名服务器->权限域名服务器
· 返回流程:(上面倒过来)
· 迭代查询,常用,可以减少中间服务器的查询成本。
· 查找流程:PC->LDNS->根域名服务器返回顶级域名服务器地址->LDNS->顶级域名服务器->顶级域名服务器返回权限域名服务器地址->LDNS->权限域名服务器->权限域名服务器返回结果->LDNS返回结果给PC。
· 总的来说,LDNS承担几乎所有通信成本,一步一步请求,根据结果查下一步。
· 域名实际解析流程:
浏览器查找自身有无本地缓存。
如果没有,去本机hosts文件查找。
还没有,去请求LDNS。
LDNS查询是否有对应的A记录。
如果没有,LDNS查询是否有对应的NS记录,如果有就给该域名发请求。
如果没有,LDNS会查询是否有其二级域名(如.edu.cn)的NS记录,如果有就给该NS发请求。
如果没有,LDNS会查询是否有其顶级域名(如.cn)的NS记录,如果没有就会请求根域名服务器,然后按照迭代查询方式解析。
文件传输协议 File Transport Protocol
· FTP使用TCP传输协议,以C/S方式工作。
· FTP服务包含两大进程,他们并行运行:
主进程:负责接受新的请求。
从属进程:负责处理单个请求,它包含数据进程、数据传输进程。
· 客户端与服务端之间建立两个TCP连接:
控制连接:客户端用于传送控制信息(命令),如登录、列出目录等,通常使用21端口,整个过程一直打开。
数据连接:数据传输进程通过数据连接传送数据,数据传送完毕则关闭该连接。
· 主进程工作流程:
服务启动,开启21端口。
等待接收来自客户端的请求。
启动从属进程(如数据传输进程)来处理客户端发来的请求。传输完毕后关闭进程。
回到等待状态,继续等待其它客户端的请求。
· 从属进程工作流程:
建立控制连接:协商工作模式(主动PORT,被动PASV),协商数据传输的端口号等。
建立数据连接:主动模式下服务器向客户端发送建立连接,被动模式下反之。
关闭数据连接:数据传输进程完成数据传送,关闭数据连接。
· 简单文件传输协议TFTP:
使用UDP,但有自己的差错改正策略。
不支持交互(命令)。
占用内存小。
远程终端协议 TELNET
· 类似SSH,可以远程登录到某台主机上。
· TELNET使用C/S模式,客户端运行TELNET客户进程,服务端运行TELNET服务进程。
· NVT格式(用于数据传输):
客户端把用户的输入(键盘按下等)转换为NVT格式并发给服务器。
服务器把收到的NVT格式转换为本地所需要的工作格式。
服务器返回数据时,也是转换为NVT格式,客户端收到数据后再转换NVT为本地处理格式。
万维网 World Wide Web
· WWW由蒂姆·博纳斯·李(Tim Berners-lee)提出。
· 万维网是分布式的超媒体(Hyper Media)系统,超媒体是超文本(Hyper Text)的扩充。
· 超文本是指包含指向其他文档的链接的文本(<a>标签)。
· 万维网需要解决的问题:
在万维网上标识一个文档:统一资源定位器(URL)。
实现超级链接的协议:HTTP协议。
制作万维网文档:HTML语言。
在万维网上寻找信息:搜索引擎。
· HTTP协议:
使用可靠的TCP连接,通常使用80端口。
本身是一种无连接的协议,交换HTTP报文前不需要进行HTTP连接。
本身是一种无状态的协议,服务器不记录HTTP请求的详细信息,如IP等。
是一种请求/响应协议,客户端(浏览器)发送请求,Web服务器响应请求。
是一种面向事务的协议,要么所有信息交换完成,要么一点都不交换。
· 在浏览器中浏览网页发生的事情:
浏览器分析超链接指向的URL。
浏览器向DNS请求解析网站域名的URL。
DNS解析出URL对应的IP。
浏览器拿到IP,与对应服务器建立TCP连接。
浏览器通过HTTP发出获取文件命令,如GET /index.html。
服务器通过HTTP响应命令,返回对应的文件给浏览器。
释放TCP连接。
渲染返回的HTML文本。
· 代理服务器高速缓存:
· 内容分发网络CDN:
用于加速静态内容的获取,如图片、音视频等。
部署资源服务器在多台服务器上,根据用户地理位置选择最近服务器,加速访问。
使用CDN来做域名解析可以大大降低源站的压力。
· HTTP请求报文的组成:
请求报文由开始行、首部行和实体主体组成。
方法其实就是一些指令,如GET、POST、OPTION、DELETE等。
URL就是请求资源的URL。
版本是HTTP的版本,有1.0、1.1、2.0。
首部(Headers)是请求携带的一些信息,如Token、Cookies等。
· HTTP响应报文的组成:
响应报文由开始行(状态行)、首部行和实体主体组成。
版本就是HTTP版本。
状态码都是三位数字,如成功200,重定向304,资源不存在404,服务器内部错误500等。
· HTTP虽然是无状态协议,但是可以使用Cookie来跟踪用户信息。
电子邮件 E-mail
· 电子邮件三大组成部分——用户代理、邮件服务器、协议。
· 用户代理(User-Agent):其实就是电子邮件客户端软件,提供各种邮件功能,如Foxmail。
· 邮件服务器:用于发送和接收邮件,同时还要向发信人报告邮件的情况(已发送、被拒绝、丢失等)。以C/S模式工作,邮件服务器可同时充当客户端和服务端。
· 协议:
传输方式协议:简单邮件传输协议(SMTP)、通用邮件扩展协议(MIME)。
邮件存取访问方法协议:邮局协议第3版(POP3)、邮件访问协议第4版(IMAP-4)。
· 发送和接收邮件的过程:
编辑与发送:发信人用UA编辑好邮件后,UA用SMTP把邮件发送至邮件服务器。
邮件在队列中等待:邮件在服务器的队列中等待发送。
传送邮件:发送方服务器SMTP客户进程通过TCP向接收方服务器SMTP服务器进程发送邮件。
接收邮件:接收方服务器的SMTP服务器进程把邮件放入接收人信箱。
取信:收信人在UA使用POP3或IMAP将邮件从接收端服务器取回。
· 电子邮件的组成:
电子邮件由信封和内容组成。
信封上会写上发件人(MAIL FROM)和收件人(RCPT TO)的邮箱地址。
邮件内容中的首部(header),包含发件人(From),收件人(To),日期(Date),主题(Subject),抄送(Cc)。
值得注意的是,虽然信封上已经有发件人和收件人了,看起来会和首部的内容有重复,但是这二者在功能上是不一样的,比如,可以通过中继服务器给目标邮箱发送邮件,这样MAIL FROM会改变,但是From是不会改变的。可以理解为,首部里面的信息用于显示给用户看,而信封上的信息主要用于整个工作流程。
· 简单邮件传输协议SMTP:规定了两个相互通信的SMTP进程之间如何交换信息,SMTP基于TCP,以C/S模式工作。
· 邮件发送流程:
UA向邮件服务器建立TCP连接(25端口),服务器返回220 Service Ready。
UA使用HELO指令表示准备投送邮件,服务器返回250 OK。
UA开始使用MAIL FROM等命令投送邮件,全部完成后服务器返回250 OK。
UA向服务器发送QUIT指令,服务器返回221 Service Closed,双方释放SMTP连接。最后释放TCP连接。
· 邮件读取协议:
POP3:一个简单的协议,以C/S模式工作,接收邮件的计算机需要运行POP客户程序。
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)有:
7bit:7位ASCII码编码,每行不超过1000字符,是一种缺省编码。
8bit:8位非ASCII编码,每行不超过1000字符。
binary:8位非ASCII编码,可编码任意长度字符串。
base64:可以把任意长度字节流转换为7位ASCII编码表示的字符串,可用于二进制和非文本数据。
quoted-printable:可以把任意长度的字节流转换为ASCII编码表示的字符串,可用于二进制和非文本数据。
· 常用的邮件类型(Content-Type)有:
· MIME举例:
动态主机配置协议 DHCP
· 连接到互联网的计算机协议软件需要配置的参数包括:
IP地址
子网掩码
默认路由器IP地址
域名服务器IP地址
· 动态主机配置协议(Dynamic Host Configuration Protocol)提供了即插即用的机制,能为计算机自动分配IP地址等参数。
· DHCP会给运行服务器软件、位置固定的计算机指派一个固定的地址;还会给运行客户端软件指派一个临时地址,客户只能在一段有限的时间(租用期)内使用这个IP地址。
· DHCP采用UDP于67号端口工作,以C/S模式运行。DHCP客户端常使用68号端口。
· DHCP工作流程:
DHCP服务器启动,打开UDP的67号端口,等待客户端报文。
客户端从UDP端口68以广播形式发送DHCP发现报文(DISCOVER)。
所有收到广播报文的DHCP服务器都能发出DHCP提供报文(OFFER),因此客户端会收到多个DHCP OFFER。
客户端从收到的OFFER中选择一个,并以广播形式向所选择的服务器发送DHCP请求报文(REQUEST)。
被选择的DHCP服务器回复DHCP确认报文(ACK),进入已绑定状态,这样客户端就可以开始使用临时IP地址了。
客户端要根据服务器提供的租用期T设置两个计时器T1和T2,它们的超时时间分别是0.5T和0.75T,当超时时间到了的时候会请求DHCP服务器更新租用期(REQUEST)。
若发送续租报文后,服务器同意,则会回复确认报文(ACK),客户端重新设置计时器;如果不同意,会回复拒绝报文(NACK),这时客户端会停用当前IP,回到第2步重新申请IP。
客户端可随时提前放弃IP,向服务器发送DHCP释放报文(RELEASE)即可。
简单网络管理协议 SNMP
· 网络管理的一般模型:多台被管机运行服务端程序,一台管理机运行客户端程序,客户端程序向被管端发送指令进行控制。
· 从上图可以看到,网络管理的一般模型由以下内容组成:
管理站:运行管理程序。由网络管理员操作运行。
被管设备:可以是任何可接入网络的设备,主机、路由器等。
代理(Agent):每一个被管设备都要运行一个代理程序,用于接收来自管理站的指令并在本地执行操作。
网络管理协议:网管程序和代理程序之间通信的规则。
· 简单网络管理协议(Simple Network Management Protocol)中的管理程序和被管程序按照C/S模式工作。
· SNMP的基本功能包括监视网络性能、检测分析网络差错、配置网络设备等。
· 委托代理:若被管设备使用的网络管理协议不是SNMP,则可以使用委托代理(Proxy Agent)进行转换、过滤等。
· SNMP的网络管理构成:
SNMP协议本身:完成网管操作。
管理信息结构(Structure of Management Info,SMI):建立规则。
管理信息库(Management Info Base,MIB):对变量进行说明。
· 信息管理结构SMI:
规定:被管对象应如何命名?用来存储被管对象的数据类型有哪些?在网络上传送的管理数据的编码方式?
SMI规定所有被管对象一定要在命名树上。
SMI规定所有的MIB变量必须使用抽象语法记法1(ASN.1)来定义。该记法非常严格,使得数据的含义不存在任何可能的二义性。
SMI使用ASN.1规定的基本编码规则BER(Basic Encoding Rule)对数据进行编码。
· 管理信息库(Management Info Base):
被管对象必须维持可供管理程序读写的若干控制和状态信息。这些信息就是MIB。
MIB在被管对象中创建了命名对象,并规定了其类型,这样管理程序就可以使用MIB中的信息对网络进行管理。
· 实际上,SNMP的操作只有两种基本的管理功能:
读:用get报文来检查各被管对象的状况;
写:用set报文来修改各被管对象的状况。
· 探询操作:SNMP的读写操作依赖于探询操作实现,即管理进程定时向被管进程发送探询信息译获取实时状态。
· 陷阱(Trap):被管对象可以在某些事件被触发的时候(如温度过高、接口关闭等)主动地向管理进程发送消息,这个消息就被称为SNMP陷阱。这样就不需要等待管理进程探询才发现问题,提高了系统的可管理性。
· 综合探询操作和陷阱机制,SNMP就被认为是一种有效的网络管理协议。
· SNMP使用的是UDP连接。
应用进程跨越网络的通信
· 系统调用:App与OS之间传递控制权,若App需要从OS获取服务,就要把控制权传递给OS,OS执行完对应操作后把控制权归还给App。
· 系统调用接口:App与OS之间通信的一个接口。
· 应用编程接口(Application Programming Interface):在这里特指对系统调用接口进行封装,这样在调用系统调用接口的时候,只需要关心传入参数即可,具体实现被屏蔽。
· 对于与OS内核中的TCP/IP协议软件进行交互,不同厂商提供了不同的API:
Berkeley UNIX:定义了套接字接口(Socket Interface)。
Windows:定义了Windows Socket(WinSocket)。
AT&T:定义了Transport Layer Interface(TLI)。
· 只要App要通过TCP/IP协议进行通信,就必须通过套接字与OS交互(通过API):
· 套接字(Socket):当App需要进行网络通信时就会通过API进行系统调用请求OS为其创建一个Socket,OS会把网络通信需要的资源(CPU、存储空间、宽带等)分配给该App,操作系统用一个套接字描述符(一个号码)来标识这些资源。当App完成网络通信后,会再通过API发送一个回收套接字资源的系统调用给OS。
· 执行系统调用的过程(TCP/IP):
连接建立:
- 服务器创建套接字,调用bind指令来指定套接字的本地地址,这样就把本地地址绑定到套接字。
- 服务器使用listen指令把套接字设置为被动方式以便接收客户端的请求(若是UDP则无须设置)。
- 服务器使用accept指令来提取客户端发送来的请求
传送数据:
- 客户端和服务器都在TCP连接上使用send发送数据,使用recv接收数据。通常客户端使用send发送请求,客户端使用send发送回答;服务器用recv接收客户端请求,客户端用recv接收服务器返回的数据。
连接释放:
- 一旦客户端和服务器结束使用Socket,就调用close来释放和撤销Socket。
点对点 Peer to Peer
· P2P是一种网络通信模型,它允许网络中的每个节点之间直接通信,而不需要中心服务器支持。
· 接下来对多个类型的P2P应用进行举例。
· 具有集中目录服务器的P2P工作方式——Napster:
Napster的中心服务器只存储索引而不存具体文件内容。
用户只需要向Napster服务器查询哪台主机上拥有想要的文件,然后根据返回结果使用P2P去请求对应主机下载即可。
这种方式缺点在于可靠性差,而且中心服务器可能成为性能瓶颈。
· 具有全分布式结构的P2P文件共享程序——Gnutella:
不使用集中式的目录服务器,而是使用洪泛法在大量Gnutella用户之间查询。
当然,为了不使查询通信量过大,Gnutella设计了一种有限范围的洪泛查询,但这肯定会影响查询结果的准确性。
· 比特洪流BitTorrent:
与传统的文件下载模式不同,BitTorrent不依靠单一服务器来传输数据,而是通过网络中每个下载者(Peer,或节点)相互传输文件的部分数据。
文件发布者会创建一个种子文件(.torrent),里面包含了文件的元数据以及种子文件的追踪器。
追踪器是一个服务器,用来跟踪哪些对等节点拥有文件的哪些部分。
用户使用BitTorrent客户端打开种子文件后,客户端会根据跟踪器从多个peer中下载文件块数据。
文件是被切为多个小块的,客户端会从多个peer下载不同块,一旦下载一个块,客户端就会上传这个块供其他用户下载。
· 向对等方请求数据时,应遵循最稀有优先(rarest first)的技术,即,若A所缺少的文件块在相邻对等方中的副本很少,那应该先请求这些文件块。
· 若有很多相邻对等方向A请求文件块,那应该遵循,谁以最高速率向A传送文件块,就先对谁传输文件块(谁对我好,我对他好。)
· P2P系统中,对等方数量很多,而且任何对等方可随时加入或退出,那就需要构建一个分布式数据库来有效找到所需要的目标文件。· · P2P采用分布式哈希表(Distributed Hash Table,DHT)来实现这个数据库,这是由多个对等方来同时维护的哈希表。