会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 计算机网络自顶向下方法之一一一第二章之二!

计算机网络自顶向下方法之一一一第二章之二

时间:2024-05-02 16:05:50 来源:不龟手药网 作者:娱乐 阅读:293次

计算机网络自顶向下方法之一一一第二章之二

2.2.4 User-Server Interaction :Cookies

上边提到HTTP server是计算机网stateless,这简化了服务器设计并且允许工程师开发可以同时控制上千条连接的高性能的Web server,然而,Web site通常需要识别用户,不管是因为服务器向约束用户的连接,还是想通过用户标识来提供服务 ,所以就有了cookies ,允许网站与用户保持联系 ,当今很多重要的电子商务网站都使用cookies 。


上图显示,cookies技术有四个部件:1).HTTP response message中的络自cookie header line 2).HTTP request message中的cookie header line 3).在用户终端系统中的一个cookie文件并且这个文件由用户的浏览器管理 4).Web site上的一个后端数据库 。
假设,Susan经常在PC上用IE浏览网页,第一次进入Amazon.com,假设以前曾经进入过eBay网站,当request到达Amazon Web server,这个服务器生成一个独一无二的顶向第章识别数字,然后再后端数据库生成一个被这个数字索引的入口,服务器然后回复Susan的浏览器,在HTTP response里有个Set-cookie:行,这个行里包含着识别码,举个栗子 ,Set-cookie: 1678
但Susan的浏览器接收到response,它会检查Set-cookie:行,然后浏览器会在这个cookie file中加入一行,这一行包含服务器的hostname和那个识别码,说明一下,这个cookie file已经有了eBay的入口,因为Susan以前访问过eBay网站了,随着Susan浏览Amazon网站,每次她请求一个网页,她的浏览器会访问她的cookie file,从文件中提取出这个站点的识别码,然后把包含有识别码的cookie header line放入HTTP request中,更准确的说,她对Amazon站点的每一次请求都会包含这个header line ——Cookie: 1678 。
这个方法让Amazon服务器可以追踪Susan在Amazon网站上的下方活动,虽然Amazon网站不用知道Susan的名字,但是可以知道用户1678都访问了哪些网页,是什么时间什么顺序访问的 。Amazon利用cookies提供购物车服务,Amazon可以获得一个所有Susan打算买的计算机网东西的列表,所以Susan可以在这个会话完成后选择性的买下它们 。
如果一周后Susan再次访问Amazon网站,request message还会用Cookie:1678 ,Amazon还会根据她以前访问过的络自网页来给她推荐商品 ,如果Susan在Amazon上提供名字,邮箱,地址和信用卡信息注册登录,那么Amazon就会把这些信息存入它的数据库中,因此就能把Susan的名字和她的cookie关联起来,这就是各种电商网站一键购物的实现方法,当以后访问中Susan想买个东西,她便不再需要输入名字,信用卡号,或者地址 。
我们从上面看到cookie可以用来识别用户,第一次访问某个网站的顶向第章时候用户需要提供些识别信息(或许就是名字),在之后的会话中,浏览器会在向服务器发送的request中包含cookie header line,因此向服务器确认用户 。
Cookies因此可以在stateless HTTP之上生成一个user session layer,举个栗子,当用户登入了网页版的下方email应用,浏览器会向服务器发送cookie信息,允许服务器通过用户在此应用上的会话来识别用户 。
虽然cookies简化了用户的计算机网购物流程,但是这是有争议的,因为这也可以被认为是侵犯隐私,如我们所见,用cookies和用户提供的账号信息结合,网站可以知道用户的很多信息并且可能将信息卖给第三方。

2.2.5 Web Caching

Web cache,也叫做proxy server,是络自个代替origin Web server满足HTTP request的网络实体,Web cache 有自己的磁盘存储器并在里边保存最近所请求object的copy,如图所示,用户的浏览器可以设置,让所有的HTTP requests都先通过Web cache,

举个栗子,假设浏览器请求object——http://www.someschool.edu/campus.gif. 将会发生什么呢?

1).浏览器与Web cache间产生TCP连接,向Web cache发送object的HTTP request
2).Web cache查看它是否有所请求object的拷贝,若果有,Web cache就用一个response message将这个object返回给浏览器
3).如果没有,Web cache就与origin server生成一个TCP连接(就是与www.someschool.edu建立连接),之后Web cache向origin server发送HTTP request ,收到请求后origin server返回给Web cache那个被请求的object
4).Web cache接收到object后,它会在它本地保存一个拷贝,然后再用HTTP response发出一个拷贝给浏览器(通过那个先前就存在的TCP连接),

说明下这里Web cache即是client,也是server,通常Web cache是由ISP购买和安装的,再举个栗子(老外的书果然是事无巨细,,妈的真是好书),大学也许会在校园网络中安装cache,并让校园中所有的计算机都指向这个cache。
Web cache的顶向第章部署有两个原因,第一,Web cache能大大减少请求的回复时间,特别是当client和origin server的瓶颈带宽比client和Web cache间的瓶颈带宽小的时候,第二,Web cache可以大大减少一个机构通往互联网的流量,因此机构可以不升级带宽,也就省下开销,,更重要的,Web cache可以大大减少整个互联网的网络请求流量,让每个应用的性能都能有所改善 。

如果一个机构的下方带宽不够用,当然可以选择升级带宽,但这是个花费很大的选择,如果选择安装Web cache,可以达到同样的效果,但是价格却低得多,多以这是大多数机构的选择 。

CDNs(Content Distrubution Networks)的计算机网使用,让Web cache在互联网中有了更重要的地位,因此让流量本地化,CDNs又分为共享CDNs和专用CDNs .

2.2.6 The Conditional GET

虽然Web cache可以减少用户感知的response time,却产生一个新问题——cache中的拷贝也许会过时,也就是说,当cache还保存着上次的copy的时候,也许服务器里的数据已经被修改了,幸好HTTP有个机制可以让cache证实它内存中的objects are up to date ,这个机制叫做conditional GET,如果符合以下两项,一个请求就可以叫做conditional GET:1).请求方法是GET 2).请求信息包含一个行——If-Modified-Since :
咱举个栗子,proxy cache代替服务器发送请求

然后服务器回复给cache(内含所请求的object)

cache把object发送给浏览器,但是要先备份,更重要的,cache还会一块保存下last-modified date,再然后,一个星期过去了,另个浏览器通过这个cache请求同样的object ,并且cache里还保存着这个object,由于考虑到可能在过去一周里服务器里的这个object已经被修改了,cache就会进行各up-to-date检查通过发出一个conditional GET,具体的,如下

重点指出这个If-modified-since的值和上边Last-Modified值是相同的,这个conditional GET就告知服务器只有从那个日期之后如果那个object有改动才需要发给它改动后的object,假设从7 sep 2011 09:23:24那个object就没有修改过,然后服务器就回复给cache一个message,如下

我们看到这个response中没有包含那个object ,因为带上那个object只会浪费带宽并且增加延迟,如果它还比较大的话更是这样 。这个回复中的络自304 Not Modified告知cache可以把自己本地的拷贝发给浏览器

到这里我们第一个协议的学习就结束了,这是我们第一个网络协议(一个应用程协议)——HTTP

典型的FTP会话中,用户想要从远端的计算机接收文件或发送文件给远端,为了用户能连接远端用户,用户必须提供用户识别和密码,提供这些授权信息之后,用户就可以从本地文件系统发送文件到远端文件系统,反之亦然,
下图是用户通过FTP user agent与FTP进行交互,用户先提供远端计算机的hostname,引发本地计算机的FTP client process与远端计算机的FTP server process建立TCP连接,然后用户提供用户身份证明和密码,这些会被当做FTP commands的一部分通过TCP连接发送出去,一旦服务器核准了这个用户,用户就可以把本地文件系统的文件复制到远端文件系统,反之亦然


HTTP和FTP都属于file transfer protocol,有很多共同点,例如,它们都运行与TCP之上,然而,这两个应用层协议之间也有些重要的不同点,最大的不同就是FTP用两个平行的TCP连接传输文件:a control connection和a data connection ,前者用来在两个host之间发送控制信息——比如用户身份证明,密码,commands to change remote directory,commands to “put”or“get“files,
data connection就是用来传输文件的,因为FTP用单独的控制连接,FTP is said to send its control information out-of-hand,而HTTP,正如你想到的,所有的信息都是通过一个连接来传输,所以,HTTP is said to send its control information in-hand,我们接下来的章节还会看到,email的主要协议SMTP也是sends control information in-hand .
当用户与远端计算机开始FTP对话,client方先会与server方在服务器的21号端口建立control TCP connection,client方会通过这个连接发送用户身份证明和密码,也会通过它发送命令修改remote directory,当服务器收到一个请求文件的命令时,server方就会与client建立TCP data connection ,但是每个data connection发送一个file后就会关闭,下一个文件要发送的时候再建立新的data connection,因此,用FTP协议,这整个过程control connection一直是开着的,但是data connection每个文件都需要生成一个,
整个会话过程中,FTP服务器必须保存用户状态,特别是,服务器必须要用一个特定的用户账户来关联control connection,服务器还必须在用户浏览远端directory tree时随时追踪用户当前位置,为每个正在进行的会话追踪状态信息极大的限制了FTP可以同时支持的会话数目,我们回想HTTP,是stateless,不用追踪任何用户状态,

2.3.1 FTP Commands and Replics

我们用一些极其常用的FTP命令和回应来为这一小节作结,从client到server的命令和从server到client的回应,是以7-bit ASCII的格式通过control connection传输的,向HTTP命令一样,FTP命令也是readable by people ,每个命令由四个大写的ASCII字母组成,有些还有可选参数,下面是一些常用命令:

每个命令都会有个reply ,从server发送到client ,回应是三位数字,数字后边跟着可选的message,这种结构很像HTTP response message中的status code and phrase in the status line,下面是一些reply和可能的messages:

电子邮件是互联网发端时最受欢迎的应用,这些年来变得越来越制作精良而且功能强大,成为互联网上最重要,最有用的应用
in this section we examine the application-layer protocols that are at the heart of Internet e-mail,在这之前,我们先来大体看一下互联网邮件系统和它重要的组成部分


我们能从上图看出它的三个重要组成部分:user agents,mail servers,Simple Mail Transfer Protocol(SMTP),现在我们在发送方的立场下来讲述下这三个部分,Alice要发送邮件给Bob,user agent允许用户阅读,回复,发送,保存和写作messages,Microsoft Outlook和Apple Mail是电邮中user agent的代表,当Alice写完邮件之后,她的user agent会发送这个message到她的mail server,并把它放在mail server的发出队列中,当Bob想要读取message时,他的user agent会从他位于mail server的mailbox中提取出邮件,
mail server组成了电邮基础设施的核心,每个接收者都在mail server里有一个mailbox,Bob的mailbox管理和保存别人发给他的信息,。
信息的顶向第章典型路径是从发送方的user agent开始,到达发送方的mail server,然后再到达接收方mail server,在server中信息会被保存到接收者的mailbox,当Bob想要读取信息的时候,mail server会需要对他进行验证(通过用户名和密码),Alice的mail server还必须能处理Bob的server出现故障的情况,如果第一次发送失败,那么Alice的server会重新把邮件放入队列中之后再发送,一般每30分钟尝试一次,如此往复,如果几天之后还没成功,那么server会抛弃它并发邮件通知发件人,
SMTP是 Internet email最重要的应用程协议,它使用的是TCP协议在mail server间进行传输,同大多数应用层协议一样,SMTP有两个side,client side运行于发送方mail server,server side运行于接收方mail server,也就是每个mail server都会同时运行client side和server side的SMTP,When a mail server sends mail to other mail servers, it acts as an SMTP client. When a mail server receives mail from other mail servers, it acts as an SMTP server.

2.4.1 SMTP

上边说到,SMTP把消息从发送方server传输到接收方server,SMTP要比HTTP岁数大很多,虽然SMTP有很多好品质,在网络中无处不在,但它是个传统技术,有很多古老的特点,例如,它限制所有的信息体为7-bit ASCII,这个限制在1980年代显得合情合理,因为那时候没有人会用邮件发送很大的附件,图片,视频或者音频文件,但是今天,多媒体时代,7-bit的限制真是个痛点——这需要二进制的多媒体数据在通过SMTP传输前被编码成ASCII,还需要经过SMTP传输的ASCII数据再次解码成为二进制,从上边学习我们知道,HTTP传输多媒体数据前就不需要ASCII编码 .
为了阐明SMTP的基本运作,我们看一个common scenario,假设Alice想发送给Bob一个简单的ASCII消息
1).Alice打开agent ,输入Bob的邮件地址,写完message,命令agent将其发送
2).Alice的agent将信息发送到她的mail server,在那里被放入到message queue中
3).client方的SMTP,运行于Alice的mail server,发现队列中的message,然后Alice的mail server就会与Bob的mail server建立一个TCP连接
4).经过初期的SMTP握手,SMTP client就会把Alice的消息发送进入TCP连接
5).在Bob的mail server中,server方的SMTP接收到message,然后Bob的mail server会将message放入到Bob的mailbox中
6).Bob在有空的时候运行agent来读取message

需要注意到的是SMTP通常不用中间的mail server来传输邮件,即使是有两个mail server在世界的两端,如果Alice的服务器在香港而Bob的服务器在圣路易斯,TCP连接就是直接连接这两个服务器的,特别的,如果Bob的服务器坏掉了,邮件就会保留在Alice的服务器中并尝试再次发送——message不会存储在什么中间的服务器
现在让我们详细看看SMTP是怎么将邮件从一个服务器发送到另一个服务器的,我们将会看到SMTP和人们面对面交互的协议有很多相似之处,首先,client SMTP会在和server SMTP在25号端口上建立TCP连接,如果server方不成功,那么client方会稍后再试,一旦TCP连接建立,client和server就会进行写应用层的握手——就像人们彼此交谈之前要先彼此自我介绍一样,SMTP clients和servers在交流之前也要自我介绍,在这个SMTP握手阶段,SMTP client会显示发件人的地址和收件人的地址,client和server自我介绍完之后,client就会发送message,SMTP可以依赖TCP协议的reliable data transfer service来保证服务器能完整无误的收到message,若果client还有message要发送给这个server的话,它还会用同一个TCP连接传输,否则的话就关闭TCP连接
下面我们看个例子,这是个在SMTP client和SMTP server间所传输消息的事例记录,client的主机名是crepes.fr ,服务器的主机名是hamburger.edu,以C打头的正是client发送它自己TCP socket里的lines,同样以S打头的就是服务器发送到它自己的socket里的lines,下面的记录在TCP连接一旦建立就会开始

上边的例子中,client从mail server crepes.fr发送给mail server hamburger.edu一条消息,client发出了五个命令,HELO ,MAIL FROM ,RCPT TO ,DATA ,QUIT .这些命令时不言自明的,The client also sends a line consisting of a single period, which indicates the end of the message to the server. (In ASCII jargon, each message ends with CRLF.CRLF, where CR and LF stand for carriage return and line feed, respectively.)
服务器为每条命令发出回复,每条回复都有个数码和一些(可选择的)英文说明,我们在这里说明SMTP用的是persistent connection ,如果发送方的mail server有好几个消息需要发送给同一个接收方的mail server的话,那么它们可以使用同一个TCP连接,对于每条信息,client会从一个新的MAIL FROM :crepes.fr命令开始重复这个过程,designates the end of message with an isolated
period, and issues QUIT only after all messages have been sent.

2.4.2 Comparison with HTTP

现在我们简单的对比下SMTP和HTTP,两个协议都是用来把文件从一个计算机传输到另一个计算机,HTTP在Web server和Web client之间传输文件,SMTP在两个mail server间传输文件,传输文件时,persistent HTTP和SMTP都是用persistent connection,因此两个协议有共同点,然而,它们还有明显的不同,首先,HTTP is mainly a pull protocol——人们从服务器加载信息并且从利用HTTP从服务器拉信息,特别是,TCP是想要收到文件的机器启动的,另一个方面,SMTP is primarily a push protocol——发送方mail server把文件push给接收方的mail server ,特别是,TCP连接是由想要发送文件的一方启动的
第二个不同,我们是说早期,SMTP需要每个消息,包括消息的内容,都必须是7-bit ASCII 格式,如果消息中含有内容不是7-bit ASCII,那这个消息需要被编码成7-bit ASCII,HTTP协议不实行这种限制
第三个不同关于一个包含有文本和图片(或者其他media types)的文档是怎么被处理的,HTTP会对每个object进行封装,而Internet mail把多有objects放在一个message中

2.4.3 Mail Message Formats

当Alice向Bob发送一个普通邮件,可能她要在邮件头上包含很多周边信息,比如Bob的地址,她自己的地址,还有日期,相同的,你收到的电子邮件也是这样,header会包含很多周边信息放在信息体的前边,这些周边信息就是一系列的header lines,header lines和消息正文是用一个空行隔开的,像HTTP一样,每个header line都包含可读的文本,包括一个关键词后面接冒号然后接值,一些关键字是必须要有的但是还有一些是可选择的,每个header都必须有FROM行和TO行,一个header还可能会包含Subject行或者其他可选择的行,我们得重点指出这些header lines和SMTP commands是不同的(即使有些词是相同的,比如from和to),我们前边将的那些命令时SMTP handshaking protocol 的一部分,这里说的header lines是message的一部分
下面是个典型的message header

这个header之后会接一个空行,然后是message body,

2.4.4 Mail Access Protocols

当SMTP协议把信息由Alice的mail server发送给Bob的mail server,信息就会存在Bob的mailbox里,曾经如果Bob要读这个邮件,他得登录服务器主机然后开启那个主机上的mail reader,一直到1990年代这都是标准的做法,但是今天,mail access uses a client-server architecture——用户用自己计算机上的客户端读取邮件,这个客户端功能更强大,可以浏览多媒体信息和附件
考虑到Bob在PC上使用agent,就很自然的考虑能不能在他的PC上直接安装个mail server,这样Alice的mail server就能直接与Bob的PC直接对话了,但是这个方法有个问题,我们上边提到mail server管理mailbox而且要运行client和server两方的SMTP协议,如果mail server安装在他的PC,为了接收到随时可可能到来的邮件,他的PC就得总是开着而且连接到网络,这是相当不现实的,所以,我们都是在PC上运行agent,而使用总是开着的共享的mail server,这个mail server被很多用户共享而且一般是用户的ISP机构来维护的

由上图可以看出,SMTP协议可以把邮件由发送方agent发送到mail server,然后从这个server再发送到接收方的mail server,但是从mail server到达接收方的agent的时候,用的却不是SMTP,这是因为从agent得到server中的邮件是个拉操作,而SMTP是个push协议,这就需要a special mail access protocol,把mail server中的邮件传输到agent,最近受欢迎的mail access protocol有POP3(Post Office Protocol——version 3),IMAP(Internet Mail Access Protocol),还有HTTP

POP3

POP3是个极其简单的mail access protocol,由此功能也得到限制,当用户agent与mail server之间在110号端口建立TCP连接的时候POP3开始运行,TCP连接建立的同时,POP3通过三个阶段:authorization,transaction,update,第一步的时候用户发送用户名和密码来进行验证,第二个阶段,用户agent开始提取邮件,也在这个阶段,用户agent可以标记要删除的message,取消标记,获取邮件数目,然后第三个阶段会在client发出quit命令后执行,结束POP3 session,这时候,刚刚标记删除的邮件会被删除
在POP3 transaction中,agent会发出命令,然后server会逐条reply,有两种回应:+OK(有些时候会跟随有server-to-client的数据),用来表明前一条命令正确执行;-ERR,表明前一条命令执行中报错
授权阶段(authorization phase)有两种主要命令:user and
pass .为解释这两个命令,我们建议你Telnet到POP3服务器,用110号端口,并发送这些命令,假设mailServer就是你的mail server名,你还看到一下内容:

如果你拼写错了一个命令,POP3服务器就会恢复一个-ERR message

现在我们看一下交易阶段(transaction phase),一个应用POP3的agent可以被设置成“download and delete”和“download and keep”,后来POP3 user agent发出的命令将取决于选择的是以上哪个模式,在download and delete模式中,用户代理会发出list,retr,dele命令,举例,假设用户卖了mailbox中有两封邮件,下面是栗子

用户代理先是让服务器列出所有储存的邮件,然后用户代理从服务器中依次取出并删除了邮件,重点指明在授权阶段后,用户代理就只使用四个命令:list,retr,dele,和quit,执行quit命令后,POP3服务器进入更新阶段,从mailbox中删除message1和2
一个关于这个模式的问题,接收方Bob想要在不同的机器上同步这些邮件,这种模式下如果他现在办公室PC上读了邮件,那晚些时候再在家里用笔记本读取就是不可能的,而download and keep模式,用户代理在下载完邮件之后仍然会让邮件保存在mail server中,然后Bob就可以在不同的终端读到邮件了
在POP3对话中,POP3会保存些状态,特别的,它会记录别标记要删除的邮件,However, the POP3 server does not carry state information across POP3 sessions. This lack of state information across sessions greatly simplifies the implementation of a POP3 server.

IMAP

POP3连接方式中,一旦把邮件下载到计算机,就可以进行各种管理,但是一个nomadic user想要在服务器中有个层次型的文件,能在多个机器上访问,这对于POP3来说是不可能的
为了解决这个问题和其他问题,IMAP协议横空出世,像POP3一样,IMAP也是一个small access protocol ,但是有比POP3更多的性能特点,当然也会使它更复杂(因此服务器端和客户端的执行也会跟复杂)
IMAP会把每个邮件和一个文件夹联系,当邮件到达服务器,它会与接收方的INBOX文件夹关联,然后接收者会把它放入一个新的,由用户创建的文件夹,进行读和删除的操作,IMAP协议提供命令允许用户创建文件夹并把邮件在文件夹之间移动,还提供命令允许用户对远端的文件夹用特定标准进行搜索,重点说明,IMAP服务器不像POP3服务器,它会在绘画中携带用户状态信息,比如,文件夹的名称和哪个文件夹和哪个邮件是关联的
IMAP另一个重要的特点就是它有允许用户代理获得components of messages的命令,比如,用户代理可以只获得message header,当网速慢的时候这个特点是很有用的,比如在网速不好的情况下,用户不想下载mailbox中所有的邮件,特别是那种内含有长文件的邮件,例如音频和视频

Web-Based E-Mail

今天越来越多的用户用浏览器发送和接收email,Web-hased email服务中,浏览器就是用户代理并且用户通过HTTP与远端的mailbox通信,当一个接收者,比如Bob,想要从mailbox读取一个邮件,这个邮件会通过HTTP协议传输到他的浏览器,而不是POP3或者IMAP协议,当一个发送者,比如Alice,想要发送email,这个邮件会通过HTTP协议从她的浏览器发送到mail server,而不是用SMTP,但是两个mail server之间依然是用SMTP传输

就像人们可以有很多种办法被识别一样,Internet host也是一样,一种方式就是hostname,例如 cnn.com , www.yahoo.com , gaia.cs.umass.edu ,都是适合人类记忆的形式,然而,hostname提供很少,甚至根本没有信息来显示这台主机在网络中的位置,再者,hostname包含可变长度的字母数字,这些将是路由器处理它们变得困难,因为这些原因,我们还用IP地址来辨识主机
IP地址由四个字节组成并且有刚性的层次结构,每个字节都是十进制0-255间的数,IP地址是分层次的,因为我们从左到右读的时候,我们会获得越来越精确的信息,关于主机在哪里,就像是我们读信件上的地址一样,越往后读越是清楚地知道精确的地址

2.5.1 Service Provided by DNS

我们介绍了两种识别主机的方法,人们更偏爱易于记忆的一种,而路由器更喜欢长度固定,层次严格的IP地址,为了调和这些偏好,我们需要一种目录服务来把hostname转化成IP地址,这就是DNS(domain name system)的主要任务,
The DNS is (1) a distributed database implemented in a hierarchy of DNS servers, and (2) an application-layer protocol that allows hosts to query the distributed database.
DNS服务器一般是运行BIND(Berkeley Internet Name Domain)软件的UNIX机器,DNS协议运行在UDP协议之上并且使用53端口
DNS通常是被别的应用层协议雇佣——包括HTTP,SMTP , FTP ,来将用户提供的hostname转换成IP地址,举个栗子,想想看浏览器访问www.someschool.edu/index.html,为了能使用户的计算机向Web server发送HTTP request,用户的计算机必须获得这个URL的IP地址,步骤如下
1).这个用户机器必须要运行DNS应用的client side
2).浏览器从URL中提取出hostname,并将hostname发送到client side of the DNS application
3).DNS客户端发送一个包含这个hostname的查询到DNS服务器端
4).DNS客户端收到回复,会包含这个hostname对应的IP地址
5).一旦浏览器得到了IP地址,它就可以与那个IP地址上80端口上的HTTP server process创建一个TCP连接
从上面我们看出DNS又增加了一种delay——有些时候对应用它的application影响还是很大的,幸好,我们需要的IP地址通常都会cached in a “nearby”DNS server,这能帮助减少DNS network traffic和average DNS delay

除了转换hostname为IP地址外,DNS还提供一些其他的服务:

Host aliasing :就是如果主机的hostname很复杂可以有一个或者多个别名,比如hostname : relay1.west-coast.enterprise.com可以叫别名,enterprise.com或者www.enterprise.com ,这种情况下,原来那个长的要命的hostname叫做canonical hostname,应用可以调用DNS通过别名或者IP地址获得canonical hostname
Mail server aliasing :很明显的原因,email address也需要易记,例如Bob有个Hostmail的账号,也许他的email地址很简单,就像bob@hotmail.com ,然而Hostmail的mail server的hostname可就不是这么简单易记了,这里DNS也可以提供向第一条中一样的服务,实际上,the MX record允许一个公司的mail server和Web server用相同的hostname或者别名,例如,一个公司的Web server和mail server可以都叫做enterprise.com
Load distribution :DNS还可以用来执行replicated servers的负载分布,例如replicated Web servers,busy sites,比如cnn.com are replicated over multiple servers,每个server都运行在不同的终端系统并且有不同的IP地址,对于replicated servers,很多IP会与同一个cannoical hostname,DNS数据库会保存这所有的IP地址,the server responds with the entire set of IP addresses, but rotates the ordering of the addresses within each reply,由于HTTP请求消息往往会用列表中的第一个IP,DNS会把这些浏览分发到replicated servers,DNS轮转还被应用到email所以mail servers可以有相同的别名,一些大公司会在更多的领域应用DNS来分发网络流量

2.5.2 Overview of How DNS Works

下面就具体看下hostname-to-IP-adress的转换服务
假设用户主机上的一些应用需要将hostname转换成IP地址,那么这个应用得调用client side of DNS,得到需要转换的hostname,然后DNS就会向网络发送一个query,所有的DNS query都是用UDP datagram在53端口发送的,经过一个毫秒到秒级的延迟,DNS会收到回复消息,提供所请求的mapping ,然后它会被送到那个调用DNS的应用,因此,在那个应用的角度,DNS就是个提供简单直接翻译服务的黑箱,但是事实上,这个黑箱很复杂,有很多分布在全球的DNS服务器组成,就像一个具体阐明DNS服务器是怎么与发送query的计算机交流的应用层协议
设计一个简单的DNS,要有个DNS服务器,里面有所有的mapping,这种集中制的设计,clients直接把所有的query都发送到这个单独的DNS服务器,这个服务器也是直接将回复发送给clients,虽然这种简单的设计很有吸引力,但是对今天的互联网是不适合的,由于今天的hosts数量非常庞大,所以这种设计的主要问题如下:
1).A single point of failure:如果DNS服务器崩溃了,那整个互联网怎么办,
2).Traffic volume,一个服务器得掌控所有的DNS query(所有的HTTP request和从成千上万的计算机上聚集来的email messages)
3).Distant centrallized database:只有一个服务器意味着不可能离每个client都很近,如果把这个服务器放在纽约,那所有的澳洲的query必须穿过大半个地球,或许这时候线路还很拥堵,那么就会造成很大的delay
4).Maintenance :这个单独的服务器得保存互联网中所有主机的记录,不管是这会造成数据库非常大,而且为了让所有的计算机都包含进来得频繁更新

总结一下就是这种集中制的设计师不行的,所以DNS是分布式设计,事实上,DNS是互联网中分布式数据库设置的一个典范

A Distributed ,Hierarchical Database

为了解决规模问题,DNS用了大量的服务器,把他们设计成层次结构样式并且分布到全世界,没有一个DNS拥有互联网中全部主机的mapping,取而代之,这些mapping都是分布在很多DNS服务器里,大致上有三类DNS服务器:root DNS servers ,top-level domain(TLD)DNS servers,understand DNS servers,如下图所示

为理解这三类DNS服务器怎么交互,假设DNS client想要确定www.amazon.com的IP地址,大体上会有下面的步骤,client首先连接root server,这个服务器会返回顶级域名com的IP地址给TLD servers,然后client再与one of these TLD servers连接,这个服务器会返回给一个authoritative server amazon.com 的IP地址,最后,client连接一个authoritative server,这个服务器会返回hostname的IP地址,我们接下来会仔细讲这个过程,但是在那之前我们先看看这三类DNS server

Root DNS servers ,互联网中有13个root DNS server(以A到M标记),大部分坐落在北美,虽然我们好像提到这13个根DNS服务器每个都是一个单独的服务器,为了安全也是为了可靠,其实这每个服务器都是一个服务器群(a network of replicated servers),总起来,截止2011年秋季,总共有247个root servers

Top-level domain(TLD)servers :这些服务器对顶级域名负责,例如,com ,org,net,edu,gov,还有国家顶级域名,例如uk,fr,ca,jp,The company Verisign Global Registry Services maintains the TLD servers for the com top-level domain, and the company Educause maintains the TLD servers for the edu top-level domain

Authoritative DNS servers: Every organization with publicly accessible hosts (such as Web servers and mail servers) on the Internet must provide publicly accessible DNS records that map the names of those hosts to IP addresses. An organization’s authoritative DNS server houses these DNS records. An organization canchoose to implement its own authoritative DNS server to hold these records; alternatively, the organization can pay to have these records stored in an authoritative DNS server of some service provider. Most universities and large companies implement and maintain their own primary and secondary (backup) authoritative DNS server.
除了上边图中的DNS server类型,还有一个重要的类型是local DNS server,这种服务器严格来讲不属于服务器的层次结构,但对于DNS服务器的架构来说却是核心的,每个ISP——例如大学,学术部门,公司,或者a residential ISP——都有a local DNS server(也叫做default name server),当计算机连接了ISP,ISP会为计算机提供IP地址,通过它的一个或者多个local DNS servers 。在Windows或者Unix中你可以通过网络状态窗口轻易的知道你的local DNS server的IP地址,一般一个计算机的local DNS server都会离它比较近,对于一个机构的ISP,本地DNS服务器也许就和计算机在同一个局域网中,通常用几个路由器把它和计算机分隔开,当host发出一个DNS query,这个query会被发送到local DNS server,服务器里会运行一个proxy,把query发送到DNS层次结构中,就像我们前边讲的那样




DNS Caching

我们讨论到这里一路上都忽略了DNS caching,DNS系统的一个非常重要的特征,事实上,DNS广泛的使用DNS caching来改善延迟并且减少在网络中乱跳的DNS message的数量,DNS caching背后的逻辑很简单,在一个query chain中,当DNS服务器收到DNS replay(例如这里边有一个hostname到IP地址的镜像)它就可以在本地内存中存下这个mapping,但这个再次被查询的时候,本地的副本便可以直接发给请求方,由于hostname和IP地址的对应并不是永久的,所以一段时间之后服务器就会丢弃缓存的信息

2.5.3 DNS Records and Messages

DNS服务器一起实现DNS的分布式数据库来存储resource records(RRs),包括提供postname-to-IP-address mapping RRs,每个DNS reply message携带一个或多个resource records
A resource records is a four-tuple that contains the following fields :
(Name,Value,Type,TTL)
TTL代表resource records的生命时间,也就是决定何时这个records会被从cache中清除,下面的例子中我们忽略TTL,这里Name和Value的意义决定于Tyoe
1).若Type=A,这是Name就是hostname,Value就是这个hostname的IP地址,因此,A类型的记录提供了标准的hostname到IP的mapping,举例,(relay1.bar.foo.com, 145.37.93.126, A)就是A类型记录
2).若Type=NS,则Name就时域名(比如,foo.com),Value就是一个authoritative server的hostname,这个server知道怎么在域内获得计算机的IP地址,这种记录使DNS query继续沿查询链前进,例如,(foo.com, dns.foo.com, NS)就是个NS记录
3).若Type=CNAME,Value就是规范主机名,Name就是别名,这个记录可以提供别名到主机名的查询,例如,(foo.com, relay1.bar.foo.com , CNAME)就是个CNAME记录
4).Tyoe=MX,则Value就是mail server的标准名称,Name就是其别名,例如(foo.com, mail.bar.foo.com, MX)就是个MX记录,重点指出,用MX记录,一个公司的mail server和一个其他的服务器(比如Web服务器)可以使用同一个别名,为了获得mail server的标准主机名,DNS client得查询MX记录;为了获得其他类型服务器的标准主机名,DNS client得查询CNAME记录

If a DNS server is authoritative for a particular hostname, then the DNS server will contain a Type A record for the hostname. (Even if the DNS server is not authoritative, it may contain a Type A record in its cache.) If a server is not authoritative for a hostname, then the server will contain a Type NS record for the domain that includes the hostname; it will also contain a Type A record that provides the IP address of the DNS server in the Value field of the NS record. As an example, suppose an edu TLD server is not authoritative for the host gaia.cs.umass.edu. Then this server will contain a record for a domain that includes the host gaia.cs.umass.edu, for example, (umass.edu, dns.umass.edu, NS). The edu TLD server would also contain a Type Arecord, which maps the DNS server dns.umass.edu to an IP address, for example, (dns.umass.edu, 128.119.40.111, A).

DNS Messages


1).前12个字节是header section,这里有若干fields,第一个field是一个16-bit的数字用来识别query,这个识别符还会copy到query的回复中,以便client把query和reply对应起来,flag field中有若干flag,1-bit的 query/reply flag来表明这是一条query(0)还是一条reply(1);1-bit的authoritative flag被放入reply message中当一个DNS服务器是一个被查询name的authoritative server;1-bit的recursion-desired flag会别set当client(或者host,DNS server)因为没有被查询记录而想要DNS服务器来进行递归时;1-bit的recursion-available field会被set在reply中,如果DNS服务器同意递归;在header中,还有四个number-of fields,These fields indicate the number of occurrences of the four types of data sections that follow the header.
2).question section 包含发出的query中的信息,这个部分包含(1)一个name field保存有被查询的name(2).一个type field标识被查询的类型,比如,a host address associated with a name (Type A) or the mail server for a name (Type MX).
3).In a reply from a DNS server, the answer section contains the resource records for the name that was originally queried. Recall that in each resource record there is the Type (for example, A, NS, CNAME, and MX), the Value, and the TTL. A reply can return multiple RRs in the answer, since a hostname can have multiple IP addresses (for example, for replicated Web servers, as discussed earlier in this section).
4).authority section包含了其他authoritative server的记录
5).additional section包含其他有用的记录,For example, the answer
field in a reply to an MX query contains a resource record providing the canonical hostname of a mail server. The additional section contains a Type A record providing the IP address for the canonical hostname of the mail server.
你想如何把一个DNS query从你工作的计算机直接发送到DNS server呢?nslookup program可以轻松的完成这件事,这个program在大多数Windows和Unix平台都有,例如,在Windows计算机上,打开命令行并调用nslookup program,然后你就可以向任何DNS server发送query,从DNS server收到reply之后,nslookup会显示reply中的记录(以人能读懂的方式)。

Inserting Records into the DNS Database

上边的讨论集中于记录是怎么从database中提取的,也许你会先想到这些记录是怎么进入到database的,让我们用一个栗子来看看这是怎么完成的,假设你刚刚搞了家名叫Network Utopia的初创公司,你想做的第一件事肯定是在注册机构注册域名 networkutopia.com ,注册处是个商业组织,保证域名的唯一性,把域名放入到database中,并为它提供给你的服务收取少量费用,
当你注册了你的域名,你还得向注册处提供你的主要的次要的authoritative server的名称和IP地址,假设两者分别是dns1.networkutopia.com dns2.networkutopia.com和212.212.212.1 212.212.212.2,
For each of these two authoritative DNS servers, the registrar would then make sure that a Type NS and a Type Arecord are entered into the TLD com servers. Specifically, for the primary authoritative server for networkutopia.com, the registrar would insert the following two
resource records into the DNS system:
(networkutopia.com, dns1.networkutopia.com, NS) (dns1.networkutopia.com, 212.212.212.1, A)

你还得确认你的Web server的A类型记录和mail server的MX记录已经进入到你的authoritative DNS server中,(知道最近,DNS中的内容还是静态配置的,然后更近的时候,UPDATE选项被加入到DNS协议来允许通过DNS messages来动态的增添或删除数据库中的数据)

当所有这些步骤完成后,人们才可以访问你的网站并且给你公司的员工发送email,让我们通过一个案例来总结我们的DNS discussion,这个案例会加固我们对DNS的掌握
假设澳大利亚的Alice想要访问上边提到的那个刚注册的网站,像我们先前讲到的一样,她的计算机会先给local DNS server发送一条query,然后local DNS server会连接一个TLD com server(如果TLD com server的地址没有被缓存的话还得访问root DNS server),这个TLD服务器中包含上边提到的那个NS类型和A类型的resource record,由于注册机构已经把这些records都插入到TLD com server,然后TLD com server会给local DNS server发送一条reply,里边包含连个resource records,local DNS服务器就会想212.212.212.1发送一条查询信息,请求与www.networkutopia.com对应的A类型记录,这个记录提供被需要的Web server的IP地址212.212.71.4,local DNS会把这个地址发给Alice的计算机,然后Alice的浏览器就可以与这个IP地址建立一个TCP连接并用这个连接发送HTTP request,卧槽,上网的时候往往不是你看到的那么简单(作者就是这么说的)


(责任编辑:娱乐)

相关内容
  • 成都天气
  • 鹰之守护 娜可露露上手指南【新春盛典版本适用】
  • 梦幻妙法慧心怎么玩攻略 梦幻西游妙法慧心任务打法
  • 天龙八部逍遥加点,天龙八部逍遥加点分配
  • 雅虎是如何没落的?
  • 闪耀暖暖洛登之夜密码是什么 闪耀暖暖洛登之夜密码介绍
  • CODM官方漫画:2021-11 凛冬之末(15-16)
  • 祖尔格拉布地图,祖尔格拉布地图:探寻古老世界的秘密之旅
推荐内容
  • 今日立春 2024立春准确时间几点几分
  • 原神帮助丘丘人打到敌人委托任务攻略
  • 神仙道(高清重制版)藏经阁详解升级经脉激活新绝
  • 手机内购破解游戏大全
  • 米聊复活,新「米聊」发布:logo 有点像微信,支持微信邀请
  • 黑翼之巢在哪个入口(黑翼之巢在哪)