《计算机网络 自顶向下方法》第二章课后习题答案

Posted by BY KiloMeter on March 18, 2019

复习题

2.1节

R1、列出5中非专用的因特网应用及它们所使用的应用层协议。

Web应用和HTTP协议

电子邮件应用和SMTP

因特网目录服务DNS和DNS协议

P2P应用和P2P协议

远程终端访问和Telnet

文件传输和FTP

R2、网络体系结构与应用程序体系结构之间有什么区别

网络体系结构指的是通信系统的整体设计,即指五层结构

应用程序体系结构由程序开发者设计和规定的广泛结构应用,如客户端-服务端

R3、对两进程之间的通信会话而言,哪个进程是客户,哪个进程是服务器

发起通信的进程是客户端,等待联系的进程是服务器端。

R4、对一个P2P文件共享应用,你同意“一个通信会话不存在客户端和服务器端的概念”的说法吗?为什么?

不同意,根据通信会话中客户端和服务器端的定义来说,在P2P中有文件的接收和发送,接收文件的一方仍然为发起通信的一端,因此文件的接收端为客户端,文件的发送端为服务器端。

R5、运行在一台主机上的进程,使用什么信息来标识运行在另一台主机上的进程

主机的IP地址和套接字中的端口号。

R6、假定你想尽快地处理从远程客户到服务器的事务,你将使用UDP还是TCP,为什么?

使用UDP,因为TCP是面向连接的可靠数据传输协议,如果使用TCP,在数据流动之前,客户端先需要和服务器端完成三次握手,此外,TCP的拥塞控制机制也会使得数据的传输产生额外的开销。UDP没有拥塞控制机制,数据可以以任何速率从应用层向网络层注入。

R7、参见图2-4,我们看到在该图中所列出的应用程序没有一个同时既要求无数据丢失又要求定时的。你能设想一个既要求无数据丢失又高度时间敏感的应用程序吗?

不存在这种应用,如果要保证无数据丢失且进行可靠控制,这种要求势必无法保证时间敏感的要求,如果对时间敏感度较高的应用,一般是使用类似UDP的轻量级协议,但这样就无法保证数据的可靠运输。

R8、列出运输协议能够提供的4种宽泛类型的服务。对于每种服务类型,指出是UDP还是TCP(或这两种协议)提供这样的服务。

1、可靠传输服务:TCP有,UDP没有

2、吞吐量:两者都无法保证

3、定时:两者都无法保证

4、安全性:TCP可以通过SSL保证安全,UDP没有安全保证

R9、前面讲过TCP能用SSL来强化,以提供进程到线程安全性服务,包括加密。SSL运行在运输层还是应用层?如果某应用程序研制者想要用SSL来强化UDP,该研制者应当做些什么工作?

SSL运行在应用层

研制者的主要工作在于接收者如何高效解密数据

2.2~2.4节

R10、握手协议的作用是什么?

提示客户端和服务器端做好分组传输的准备。

R11、为什么HTTP、FTP、SMTP、POP3都运行在TCP而不是UDP之上?

因为HTTP、FTP、SMTP、POP3都要求可靠的数据传输,而UDP是无连接、不可靠的运输层协议

R12、考虑一个电子商务网站需要保留每一个客户的购物记录。描述如何使用Cookie来完成该功能。

Cookie技术有4个组成部分:1、在HTTP响应报文中有一个Cookie首部行。2、在HTTP请求报文中有一个Cookie首部行。3、在用户端系统中保留一个Cookie文件,由用户的浏览器进行管理。4、在Web站点上有一个后端数据库。

当请求报文到达一个电子商务网站服务器时,该服务器站点将产生一个唯一识别码,并以此作为索引在它的后端数据库中产生一个表项。接下来该服务器用一个含set-cookie:首部行的HTTP响应报文对客户的浏览器进行响应,其中set-cookie:首部行含有识别码。当客户的浏览器收到了该HTTP响应报文时,它会看到该set-cookie首部。该浏览器在它管理的特定cookie文件中添加一行,其中包含该服务器的主机名和set-cookie:首部中识别码。当客户继续浏览该网站时,每请求一个web页面,其浏览器就会从它的cookie文件中获取这个网站的识别码,并放到HTTP请求报文中含有该识别码的cookie首部行中。特别是,发往该站点服务器的每个HTTP请求报文都包括该首部行,在这种方式下,网站服务器就可以跟踪客户在该站点的活动。

R13、描述Web缓存器如何减少接受被请求的对象的时延。Web缓存器将减少用户请求的所有对象的时延还是其中的某些对象?为什么?

Web缓存器也叫代理服务器,它是能够代表初始web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间,并在该存储空间中保存最近请求过的对象的拷贝。 (1) 浏览器建立一个到web缓存器的TCP连接,并向web缓存器中的对象发送一个HTTP请求。 (2) Web缓存器检查本地是否存储了该对象拷贝。如果有,web缓存器就用HTTP响应报文向客户机浏览器返回该对象。 (3) 如果web缓存器没有该对象,它就与该对象的初始服务器打开一个TCP连接。Web 缓存器则在TCP连接上发送获取该对象的HTTP请求。在收到请求后,初始服务器向web缓存器发送具有该对象的HTTP响应。 (4) 当web缓冲器接收该对象时,它在本地存储空间存储了一份拷贝,并用HTTP响应报文向客户机的浏览器发送该拷贝。 Web缓存器可以大大减少对客户机请求的响应时间,特别是当客户机与初始服务器之间的瓶颈带宽远低于客户机与web缓存器之间的瓶颈带宽时更是如此。如果在客户机与web 缓存器之间有一个高速连接,并且用户所请求的对象在web缓存器上,则web缓存器可以迅速将该对象交付给用户。

Web缓存能够减小用户请求的所有对象的时延,即使是该对象没有被缓存,因为缓存能够减少链路上的流量,因此改善了所有应用的性能。

R14、用Telnet向Web服务器注册并发送一个多行的请求报文。在该请求报文中包含If-modified-since:首部行,迫使响应报文中出现304 Not Modified状态代码。

If-modified-since:仅当该字段指定的时间之后对请求的对象发生了修改,才发送该对象,否则发送304 Not Modified状态代码

R15、列出几种流行的即时通信应用。它们使用相同的协议作为SMS吗

微信,QQ

R16、假定Alice 使用一个基于web的电子邮件账户(如Hotmail或gmail)向Bob发报文,而Bob使用pop3访问他的邮件服务器来获取自己的邮件。讨论报文是怎样从Alice主机到达Bob主机的。列出在两台主机间移动该报文时所使用的各种应用层协议

从Alice的代理到Alice的邮件服务器是HTTP协议,而从Alice的邮件服务器到Bod的邮件服务器是SMTP协议,从Bob的邮件服务器到Bob的代理是POP3协议。

R17、将你最近收到的报文首部打印出来。其中Received:首部行有多少行?分析该报文中的报文首部行中的每一行。

R18、从用户的观点看,POP3协议中“下载并删除”模式和“下载并保留”模式有什么区别?

“下载并删除”是指用户在一台机器上收取一个邮件之后,那么在其它的机器上将不能再次收取这个邮件。而“下载并保留”是在一台机器上接受这个邮件之后,用户在其他客户端也可以接受这个邮件。

R19、一个机构的web服务器和邮件服务器可以有完全相同的主机名别名(如foo.com)吗?包含邮件服务器主机名的RR有什么样的类型?

可以。

RR(resource record),即资源记录,提供了主机名到IP地址的映射。MX记录被用来映射邮件服务器的主机名到它的 IP 地址。

如果 type=A,则 Name 是主机名, Value 是该主机名的 IP 地址。

如果 type=NS,则 Name 是域(如 foo.com ),而 value 是知道如何获得该域中主机 IP 地址的权威 DNS服务器的主机名。

如果 type=CNAME,则 value 是别名为 Name 的主机对应的规范主机名。该记录能够向请求主机提供一个主机名对应的规范主机名。

如果 Type=MX,则 value 是别名为 Name 的邮件服务器的规范主机名。

R20、仔细检查收到的电子邮件,查找由使用.edu电子邮件地址的用户发送的报文首部。从其首部,能够确定发送该报文的主机的IP地址吗?对于由gmail账号发送的报文做同样的事情。

略。

2.5节

R21、在BitTorrent中,假定Alice向Bob提供一个30秒间隔的文件块吞吐量。Bob将必须进行回报,在相同的间隔中向Alice提供文件块吗?为什么?

是, 因为每过 30 秒 Alice 将随机地选择一名新的对换伙伴并开始与那位伙伴进行对话。 如果这两个对等方都满足此对换要求, 那么它们会将对方放入其前四位列表中并继续与对方进行对话, 直到对等方之一发现了一个更好的伙伴为止。 这样, 对等方就能以趋于满意的速率上载。

**R22、考虑一个新对等方 Alice 加入 BitTorrent , 但她没有任何文件块。 由于没有任何文件块, 没有什么可上载所以她不能成为任何其他对等方的前四位上载者。那么, Alice 将怎样得到她的第一个文件块呢? **

在决定响应谁的请求时,Bob会把优先权让给当前以最高速率向自己提供数据的4个邻居。每过10秒,Bob会重新计算这4个邻居。重要的是,每过30秒,Bob会随机选择另一个邻居并发送块,此时,新加入的对等方Alice就有可能被Bob随机选中,然后Alice就能获取Bob的文件块。

R23、覆盖网络是什么?它包括路由器吗?在覆盖网络中什么是边?

覆盖网络是一种面向应用层的网络,包括对等方和对等方之间由虚拟联络构成的抽象的逻辑网。因为是面向应用层的,所以不包括路由器。在覆盖网络中“边”就是对等方和对等方之间的逻辑链路。

2.6节

R24、CDN通常采用两种不同的服务器放置方法之一,列举并简单描述它们

1、深入

该方法是通过在遍及全球的接入ISP中部署服务器集群来深入到ISP的接入网中,目标是靠近端用户,通过减少端用户和CDN集群之间链路和路由器的数量,从而改善用户感受的时延和吞吐量

2、邀请做客

该方法是在少量关键位置建造大集群来邀请到ISP做客。这些CDN通常将集群设置在因特网交互点(IXP),与上面的方法相比,维护和管理开销较低,但会牺牲端用户的时延和降低吞吐量。

R25、除了时延、丢包和带宽性能等网络相关考虑外,设计一种CDN服务器选择策略时还有其他重要因素,它们是什么?

文件保存。

CDN集群不会把每个文件的副本都保留在每个集群中,而是当客户端请求时,如果该集群中没有,会向其他CDN集群拉取文件并在本地保留一份副本。如果存储器即将满了,会删除不经常访问的文件。

2.7节

R26、2.7节中所描述的UDP服务器仅需要一个套接字,而TCP服务器需要两个套接字。为什么?如果TCP服务器支持n个并行连接,每条连接来自不同的客户主机,那么TCP服务器将需要多少个套接字

UDP服务器中,是没有welcoming socket的,来自不同客户机的所有数据通过该一个scoket进入服务器。

TCP服务器中,有一个welcoming socket,而每个客户机发起到服务器的连接时,一个新的套接字被创建。因此,为支持n个联立连接时,服务器将需要n + 1个socket。

R2、对于2.7节所描述的运行在TCP之上的客户-服务器应用程序,服务器程序为什么必须先于客户程序运行?对于运行在UDP之上的客户-服务器应用程序,客户程序为什么可以先于服务器程序运行?

因为TCP是面向连接的可靠数据协议,客户端和服务器端得先建立起TCP连接后才能进行通信,如果服务器端没有启动,TCP连接无法建立,因此无法进行通信。而UDP是无连接的协议,无须建立连接即可发送数据。

习题

P1、是非判断题

a.假设用户请求由一些文本和3幅图片组成的Web页面。对于这个页面,客户将发送一个请求报文并接受4个响应报文。

错误。在Web中,request和response是成对出现的,这里会产生四个请求和接收四个响应报文

b. 两个不同的Web页面可以通过一个持久连接发送

正确。请求第一个Web页面的时候,客户端和服务端已经建立了TCP连接,可以在这个连接上连续传递多个对象

c. 在浏览器和初始服务器之间使用非持久连接的话,一个TCP报文段可能携带两个不同的HTTP服务请求报文

错误。在非持久连接中,对于要传送的每一个web object都需要建立相应的TCP连接,在对应于每一个object的TCP连接建立完成后,客户端就向服务器发送request,然后在服务器收到request之后就会发回一个包含客户端请求的object的response,然后就关闭TCP连接,因此在一个TCP连接中不可能有两个不同的HTTP request message.

d.HTTP响应报文中的Date:首部指出了该报文中的对象最后一次修改的时间

错误。Date指的是响应报文的创建时间

e.HTTP响应报文决不会具有空的报文体

错误。当HTTP请求并没有请求任何数据,或者请求的对象不存在时,响应报文为空

P2、SMS、iMessage和WhatsApp都是稚嫩手机即时通信系统。在因特网上进行一些研究后,为这些系统分别写一段它们所使用协议的文字,然后撰文解释它们的差异所在。

P3、考虑一个要获取给定的URL的Web文档的HTTP用户。该HTTP服务器的IP地址开始时并不知道,在这种情况下,除了HTTP外,还需要什么运输层和应用层协议?

应用层:DNS协议

运输层:TCP协议(HTTP协议所依赖),UDP协议(DNS协议所依赖)

注:这里DNS协议依赖于UDP协议并不是很准确,在查询的时候使用的确实是UDP协议,但是DNS服务器之间互相通信时,由于为了确保数据的可靠性,互相使用的是TCP协议。

P4、考虑当浏览器发送一个HTTP GET报文时,通过Wireshark俘获到下列ASCII字符串(即这是一个HTTP GET报文的实际内容)。字符<cr><lf>是回车和换行符(即下面文本中的斜体字符串<cr>表示了单个回车符,该回车符包含在HTTP首部中的相应位置)。回答下列问题,指出你在下面HTTP GET报文中找到答案的地方。

a.由浏览器请求的文档的URL是什么?

该文件要求是 http://gaia.cs.umass.edu/cs453/index.html

b.该浏览器运行的是HTTP的何种版本?

HTTP/1.1

c.该浏览器请求的是一条非持续连接还是一条持续连接?

keep-alive.持续连接

d.该浏览器所运行的主机的IP地址是什么?

此信息不包含在HTTP消息任何地方。因此,没有办法从看HTTP交换讲这个单独的消息。

e.发起该报文的浏览器的类型是什么?在一个HTTP请求报文中,为什么需要浏览器类型?

Mozillas/5.0。由服务器所需要的浏览器类型的信息来发送不同相同的对象,以不同类型的浏览器的版本。

P5、下面文本中显示的是来自服务器的回答,以响应上述问题中HTTP GET报文。回答下列问题,指出你在下面报文中找到答案的地方。

a.服务器能否成功地找到那个文档?该文档提供回答是什么时间?

响应码为200,成功找到文档,回答时间为Tue,07 Mar 2008 12:39:45GMT

b.该文档最后修改是什么时间?

Last-Modifieed:Sat,10 Dec2005 18:27:46 GMT

c.文档中被返回的字节有多少?

Content-Length:3874

d.文档被返回的前5个字节是什么?该服务器同意一条持续连接吗?

<!doc

同意一条持续连接

Connection:Keep-Alive

P6、获取HTTP/1.1规范(RFC 2616)。回答下面问题:

a.解释在客户和服务器之间用于指示关闭持续连接的信令机制。客户、服务器或两者都能发送信令通知连接关闭了吗?

可以,只需要在请求报文或者响应报文中的connection-header field字段值设置为close即可。

b.HTTP提供了什么加密服务?

HTTP没有提供加密服务

c.一个客户能够与一个给定的服务器打开3条或更多条并发连接吗?

不能。客户端可以与给定的服务器打开持续的TCP连接,一个客户端不能和一个给定的服务器有超过一条的连接

d.如果一个服务器或一个客户检测到连接已经空闲一段时间,该服务器或客户可以关闭两者之间的传输连接。一侧开始关闭连接而另一侧通过该连接传输数据是可能的吗?请解释。

可能的。(网上的英文解释直接重复了下RFC文档里面的说明)

P7、假定你在浏览器中点击一条超链接获得Web页面。相关联的URL的IP地址没有缓存在本地主机上,因此必须使用DNS lookup以获得该IP地址。如果主机从DNS得到IP地址之前已经访问了n个DNS服务器;相继产生的RTT依次为RTT1、…、RTTn。进一步假定与链路相关的Web页面只包含一个对象,即由少量的HTML文本组成。令RTT0表示本地主机和包含对象的服务器之间的RTT值。假定该对象传输时间为零,则从客户点击该超链接到它接收到该对象需要多长时间?

首先获取到IP 地址需要RTT1+RTT2+…+RTTn

获取到IP地址后,客户端和服务器建立TCP连接,三次握手的过程中,客户端先向服务器发送一个小TCP报文段,服务器用一个小TCP文段做出确认和响应,最后客户端向服务器端返回确认。前两次握手花费了1个RTT0时间,最后一次确认的时候客户端会把HTTP请求报文也发向服务器,最后服务器再返回请求对象,这里又花费了1个RTT0时间。所以总的时间花费是2RTT0+RTT1+RTT2+…+RTTn

P8、参照习题7,假定在同一个服务器上某HTML文件引用了8个非常小的对象。忽略发送时间,在下列情况下需要多长时间?

a.没有并行TCP连接的非持续HTTP

由于第一次获取HTML文件后,客户端已经有了服务器的IP地址,因此只需要额外花费8个对象的RTT0时间

2RTT0+RTT1+RTT2+…+RTTn+8*2RTT0 = 18RTT0+RTT1+RTT2+…+RTTn

b.配置有5个并行连接的非持久HTTP

2RTT0+RTT1+RTT2+…+RTTn+2*2RTT0 = 6RTT0+RTT1+RTT2+…+RTTn

c. 持续HTTP

这里最后的RTT0是花在所有的小对象请求全部在这个TCP连接上持续发出并持续接受到响应的时间,由于是像流水线一样地发出请求和接受请求,因此只有1个RTT0的时延。

2RTT0+RTT1+RTT2+…+RTTn+RTT0 = 3RTT0+RTT1+RTT2+…+RTTn

P9.考虑图2-12,其中有一个机构的网络和因特网相连。假定对象的平均长度为850 000比特,从这个机构网的浏览器到初始服务器的平均请求率是每秒16个请求。还假定从接入链路的因特网一侧的路由器转发一个HTTP请求开始,到接收到其响应的平均时间是3秒(参见2.2.5节)。将总的平均响应时间建模为平均接入时延(即从因特网路由器到机构路由器的时延)和平均因特网时延之和。对于平均接入时延,使用Δ/(1-Δβ),式中Δ是跨越接入链路发送一个对象的平均时间,β是对象对该接入链路的平均到达率。

a.求出总的平均响应时间。

注:下面的15Mbps为课本数据

平均响应时间 = 平均接入时延 + 平均因特网时延之和

平均接入时延 = Δ/(1-Δβ)

Δ是跨越接入链路发送一个对象的平均时间

发送一个大小为L的对象经过链路大小为R所需要的平均时间为

Δ = (850,000bits)/(15,000,000bits/sec) = 0.0567sec

β是对象对该接入链路的平均到达率

βΔ = (16 requests/sec)(0.0567sec) = 0.907

因此,平均接入时延为(0.0567)/(1-0.907) = 0.607sec

所以 总的平均响应时间为0.607+3 = 3.607sec

b.现在假定在这个机构LAN中安装了一个缓存器。假定命中率为0.4,求出总的响应时间。

由于缓存器命中率为0.4,也就是有40%的请求直接通过缓存器返回请求对象,所以总的响应时间为

0.4*(850,000/100,000,000)+0.6*3.607 = 2.1676