R1.
R2.
网络体系结构:将通信过程组织成层,例如五层结构。
应用程序结构:客户-服务器体系结构,或P2P体系结构。
R3.
发起通信的进程是客户端;
等待被联系的进程是服务器;
R4.
不。对于P2P文件共享而言,下载文件的为客户进程,上传文件的为服务器进程。
一个进程既可能是客户端,也可能是服务器。
R5.
目标主机的IP地址和目标进程的端口号(套接字)
R6.
我选择UDP。使用UDP,事务可以在一次往返时间(RTT)中完成——客户端将事务请求发送到UDP套接字,服务器将回复发送回客户端UDP套接字。对于TCP,至少需要两个RTTs:一个用于建立TCP连接,另一个用于客户机发送请求,以及服务器发送回复。
R7.
秒杀系统。时间非常敏感,而且订单信息不能出问题。
R8.
运输服务 | TCP | UDP |
---|---|---|
可靠数据传输 | √ | × |
恒定吞吐量 | × | × |
定时 | × | × |
安全保障 | × | × |
R9.
SSL运行在应用层。
研制者必须在应用编码过程进行SSL加密。
R10.
两个通信实体在发送数据之前,需要通过握手来确认一些控制信息,如发送窗口大小、接收窗口等。
R11.
使用这三个协议的应用程序是数据敏感的,所以需要可靠的传输协议。
R12.
当新的客户访问网站时,生成cookie并返回给客户,给浏览器保管,同时服务器也记录一份cookie。等这个客户再次访问或买东西时,浏览器带着这个cookie将请求发送到服务器,服务器再在对应的cookie上添加商品记录。(存储数据结构可用Map
来模拟)
R13.
客户发出请求后,先在Web缓存器中寻找有无请求对象,如果有,就直接作为响应返回给客户,这样的话客户就不用直接请求初始服务器了;相同的,如果Web缓存器里没有请求对象,那就向初始服务器请求该对象,由于上一步就解决了一大批请求,初始服务器链路的流量竞争也缓解了许多。所以Web缓存器能减少请求的所有对象的时延。
R14.
略
R15.
SMS:短信息服务
脸书,微信,Snapchat都使用不同的协议做为SMS。
R16.
Alice使用浏览器作为用户代理,基于HTTP协议将邮件发送到Alice的邮件服务器中。然后Alice的邮件服务器使用SMTP协议将邮件发送到Bob的邮件服务器中。Bob使用POP3协议从他的邮件服务器中下载目标邮件到主机。
R17.
略
R18.
对于下载和删除,用户从POP服务器检索邮件后,邮件将被删除。这给四处奔波的用户带来了一个问题,他们可能通过不同主机(办公室PC、家庭PC等)来访问邮件。
在下载和保留中,邮件不会在被用户检索后被删除。这也很不方便,因为每次用户从新机器检索存储的邮件时,所有未删除的邮件都将转移到新机器 (包括非常旧的邮件)。
R19.
RR(Resource Record):资源记录。DNS储存的资源记录
可以。包含邮件主机名的RR有MX
类型和A
类型,MX
记录邮件服务器的简写全名映射,A
记录邮件服务器的全名和IP地址映射。
R20.
可以;不行;
R21.
答主看不懂题目,下面是原版答案:
It is not necessary that Bob will also provide chunks to Alice. Alice has to be in the
top 4 neighbors of Bob for Bob to send out chunks to her; this might not occur even if
Alice provides chunks to Bob throughout a 30-second interval.
R22.
她会从那个邻居那里请求块。
R23.
P2P文件共享系统中的覆盖网络由参与文件共享系统的节点和节点之间的逻辑链路组成。如果a和B之间有半永久的TCP连接,则从节点a到节点B有一个逻辑链接(图论中的“边”)。一个覆盖网络不包括路由器。
R24.
CDN的两种安置原则:
R25.
还有负载均衡、昼夜问题、热点流量、ISP收费等因素。
R26.
对于UDP服务器,没有欢迎套接字,来自不同客户机的所有数据都通过这个套接字进入服务器。对于TCP服务器,有一个欢迎套接字,每当客户机启动到服务器的连接时,就会创建一个新的连接套接字。因此,要支持 n n n 个同时连接,服务器需要 n + 1 n+1 n+1 个套接字。
R27.
对于TCP应用程序,一旦执行客户机,它就会尝试启动与服务器的TCP连接。如果TCP服务器没有运行,那么客户机将无法握手,当然也无法建立连接。对于UDP应用程序,客户端在执行时不会立即启动连接(或尝试与UDP服务器通信)
P1.
a) 错。文本和图像是通过不同的URL请求的,应该对应4个请求报文。
b) 对。HTTP提供持续连接。
c) 错。非持续连接时,客户发送一个请求报文,服务器做出相应后就关闭了。
d) 错。相应报文中的Date指的是服务器将相应内容封装好准备发送的时间。(接近于客户受到相应的时间)
e) 错。304类型的响应就是空报文体,告诉客户:访问的资源是最新的。
P2.
SMS(短消息服务)是一种允许通过蜂窝网络在移动电话之间发送和接收文本消息的技术。一条短信可以包含140字节的数据,它支持国际语言。消息的最大大小可以是160个7位字符、140个8位字符或70个16位字符。短信通过ss# 7协议的移动应用部分(MAP)实现,短信协议由3GPP TS 23.040和3GPP TS 23.041定义。此外,MMS(多媒体消息服务)扩展了原始文本消息的功能,并支持发送照片、较长的文本消息和其他内容。
iMessage是苹果公司开发的一种即时通讯服务。iMessage支持通过移动数据网络或WiFi发送到iOS设备和mac上的文本、照片、音频或视频。苹果的iMessage是基于专有的二进制协议APNs(苹果推送通知服务)。
WhatsApp Messenger是一种即时通讯服务,支持许多移动平台,如iOS、Android、手机和黑莓。WhatsApp用户可以通过蜂窝数据网络或WiFi相互发送无限制的图片、文本、音频或视频。WhatsApp使用XMPP协议(可扩展消息传递和到场协议)。
iMessage和WhatsApp与SMS不同,因为它们使用数据计划(data plan)来发送消息,并且在TCP/IP网络上工作,但SMS使用的是我们从无线运营商购买的短信计划。此外,iMessage和WhatsApp支持发送照片、视频、文件等,而原来的短信只能发送文本信息。最后,iMessage和WhatsApp可以通过WiFi运行,但SMS不能。
P3.
需要应用层的DNS协议来找到对应的IP地址,DNS寻址过程中会使用运输层的UDP协议来传递信息。当客户获取到IP地址后,就会基于HTTP协议访问目的IP的资源,这个过程运输层使用的TCP协议。
P4.
a) http://gaia.cs.umass.edu/cs453/index.html
b) HTTP/1.1
c) 持续连接
d) 通过该报文无法识别
e) Mozilla / 5.0;服务器需要浏览器类型信息来将同一对象的不同版本发送给不同类型的浏览器
P5.
a) 可以;Tue, 07 Mar 2008 12:39:45GMT
b) Sat, 10 Dec2005 18:27:46GMT
c) 3874bit
d) 前五个字节:;同意持续连接
P6.
HTTP1.1规范(使用Google翻译食用更佳)
a) 都可以。客户端或服务器在连接头字段中标识Connection: close
,即可通知对方关闭连接。
b) HTTP不提供任何的加密服务。
c) 使用持久连接的客户端应该限制它们与给定服务器的同时连接的数量。单用户客户端不应该与任何服务器或代理保持超过2个连接。
d) 是的。当服务器决定关闭“空闲”连接时,客户机可能已经开始发送新的请求。从服务器的角度来看,连接在空闲时被关闭,但从客户端的角度来看,请求正在进行。
P7.
经过 R T T 1 + R T T 2 + ⋯ + R T T n R T T_{1}+R T T_{2}+\cdots+R T T_{n} RTT1+RTT2+⋯+RTTn时间获取到了目标IP地址后,就需要消耗 R T T 0 RTT_0 RTT0的时间来建立TCP握手连接,然后又需要 R T T 0 RTT_0 RTT0的时间来建立TCP数据连接。
对象传输时间为0,所以一共耗时: 2 R T T o + R T T 1 + R T T 2 + ⋯ + R T T n 2 R T T_{o}+R T T_{1}+R T T_{2}+\cdots+R T T_{n} 2RTTo+RTT1+RTT2+⋯+RTTn
P8.
注意!这里是引用了8个小对象,不是只请求8个小对象,所以原来的页面要算进去的。
a) R T T 1 + ⋯ + R T T n + 2 R T T o + 8 ⋅ 2 R T T o R T T_{1}+\cdots+R T T_{n}+2 R T T_{o}+8 \cdot 2 R T T_{o} RTT1+⋯+RTTn+2RTTo+8⋅2RTTo
= 18 R T T o + R T T 1 + ⋯ + R T T n =18 R T T_{o}+R T T_{1}+\cdots+R T T_{n} =18RTTo+RTT1+⋯+RTTn
b) R T T 1 + ⋯ + R T T n + 2 R T T o + 2 ⋅ 2 R T T o R T T_{1}+\cdots+R T T_{n}+2 R T T_{o}+2 \cdot 2 R T T_{o} RTT1+⋯+RTTn+2RTTo+2⋅2RTTo
= 6 R T T o + R T T 1 + ⋯ + R T T n =6 R T T_{o}+R T T_{1}+\cdots+R T T_{n} =6RTTo+RTT1+⋯+RTTn
c) 使用管道的持久连接。这是HTTP的默认模式:
R T T 1 + ⋯ + R T T n + 2 R T T o + R T T o R T T_{1}+\cdots+R T T_{n}+2 R T T_{o}+R T T_{o} RTT1+⋯+RTTn+2RTTo+RTTo
= 3 R T T o + R T T 1 + ⋯ + R T T n =3 R T T_{o}+R T T_{1}+\cdots+R T T_{n} =3RTTo+RTT1+⋯+RTTn
非管道的持久连接,没有并行连接:
R T T 1 + ⋯ + R T T n + 2 R T T o + 8 R T T o R T T_{1}+\cdots+R T T_{n}+2 R T T_{o}+8 R T T_{o} RTT1+⋯+RTTn+2RTTo+8RTTo
= 10 R T T o + R T T 1 + ⋯ + R T T n =10 R T T_{o}+R T T_{1}+\cdots+R T T_{n} =10RTTo+RTT1+⋯+RTTn
管道连接(HTTP Pipelining)其实是把多个HTTP请求放到一个TCP连接中一一发送,而在发送过程中不需要等待服务器对前一个请求的响应。
P9.
a) 接入链路通过15Mbps速度发送一个对象的时间是:
Δ = ( 850 , 000 b i t s ) / ( 15 , 000 , 000 b i t s / s e c ) = 0.0567 s e c \Delta=(850,000 \mathrm{bits}) /(15,000,000 \mathrm{bits} / \mathrm{sec})=0.0567 \mathrm{sec} Δ=(850,000bits)/(15,000,000bits/sec)=0.0567sec
平均到达率:
Δ β = ( 16 requests/sec ) ( 0.0567 sec/request ) = 0.907 \Delta\beta=(16 \text { requests/sec })(0.0567 \text { sec/request })=0.907 Δβ=(16 requests/sec )(0.0567 sec/request )=0.907
注意!这里的平均到达率不是指请求最终能到达多少,而是指的流量强度。所以 Δ β \Delta\beta Δβ接近1时,分母接近0,平均相应时间无限大。
带入公式计算得,发送一个对象的平均时间为: ( 0.0567 sec ) / ( 1 − 0.907 ) ≈ 0.6 (0.0567 \sec ) /(1-0.907) \approx 0.6 (0.0567sec)/(1−0.907)≈0.6 seconds.
由于初始服务器每个请求的平均处理时间为3秒,所以总的平均响应时间为 3.6 s 3.6 \ s 3.6 s。
b) 如果缓存器的命中率为0.4,那么有 16 ∗ 0.4 = 6.4 16 * 0.4=6.4 16∗0.4=6.4个请求能被高速以太网立刻返回(平均响应时间为0)。剩下9.6个请求继续访问初始服务器。
和上面一样的计算流程,发送一个对象的平均时间为: ( 0.0567 sec ) / [ 0.6 ∗ ( 0.907 ) ] = . 089 s (0.0567 \sec ) /[0.6*(0.907)]=.089 \ s (0.0567sec)/[0.6∗(0.907)]=.089 s
所以这9.6个未命中的,平均响应时间为 3.089 s 3.089 s 3.089s
总的平均响应时间为: ( 0.6 ) ( 0 s e c ) + ( 0.4 ) ( 3.089 s e c ) = 1.24 s e c o n d s (0.6)(0 sec) + (0.4)(3.089 sec) = 1.24 seconds (0.6)(0sec)+(0.4)(3.089sec)=1.24seconds
P10.
这种情况,无论是并行不并行、持续连接和非持续连接时间上差不多的。
这里要理解并行的优势在哪,只有在带宽足够大的情况下,才能吃香。这里带宽屁大点,才150bps。并行下载将允许10个连接共享150位/秒的带宽,每个连接只有15位/秒。区别就是这些对象是一个一个到的,还是一起到的,但总时间几乎相同。
持续连接的优势在于避免了每次建立控制连接(握手)的开销,但这数据对象相对于控制分组实在是太大了,一个数据包100000比特,一个控制分组200比特。而且这里只有10个数据包需要发送,多开10对控制连接并不会有大的影响,连一个数据包耗时的零头都比不上。
P11.
a) 是的,因为Bob有更多的连接,他可以获得更大的链路带宽份额。
b) 是的,Bob仍然需要执行并行下载。否则他得到的带宽将少于其他四个用户。
P12.
from socket import *
serverPort=12000
serverSocket=socket(AF_INET,SOCK_STREAM)
serverSocket.bind(('',serverPort))
serverSocket.listen(1)
connectionSocket, addr = serverSocket.accept()
while 1:
sentence = connectionSocket.recv(1024)
print 'From Server:', sentence, '\n'
serverSocket.close()
P13.
SMTP中的MAIL FROM指的是是来自SMTP客户端的消息,它标识发送给SMTP服务器的邮件的发送方。
邮件消息本身的From不是SMTP消息,而是邮件消息正文中的一行。
P14.
SMTP使用一个点.
来标识报文体结束。
HTTP是使用头部属性Content-Length来记录报文的长度。
不能,因为HTTP的报文体中可以是图片、视频等等二进制文件,不能以ASCII符号.
结束,相比,SMTP的报文体只能是7为ASCII字符。
P15.
MTA代表邮件传输代理。主机将消息发送到MTA。消息随后跟随一系列mta到达接收者的邮件阅读器。我们看到这个垃圾邮件遵循一个mta链。一个诚实的MTA应该报告它在哪里收到消息。请注意,在此消息中,“asusus-4b96([58.88.21.177])”没有报告它从何处收到电子邮件。既然我们假设只有发起者是不诚实的,那么“asusus-4b96((58.88.21.177))”一定是发起者。
P16.
UIDL 是唯一识别码列表(unique-ID listing)的缩写。当一个POP3 客户端发出一个UIDL 命令,服务器返回储存在用户邮箱里的所有邮件的唯一邮件识别码。这个命令对下载并保留方式有用。通过保留上次收取的邮件的列表信息,客户能够使用UIDL 命令来确定在服务器上的哪些邮件是已经被阅读过的。
P17.
a)
C: dele 1
C: retr 2
S: (blah blah …
S: ………..blah)
S: .
C: dele 2
C: quit
S: +OK POP3 server signing off
b)
C: retr 2
S: blah blah …
S: ………..blah
S: .
C: quit
S: +OK POP3 server signing off
c)
C: list
S: 1 498
S: 2 912
S: .
C: retr 1
S: blah …..
S: ….blah
S: .
C: retr 2
S: blah blah …
S: ………..blah
S: .
C: quit
S: +OK POP3 server signing off
P18.
a) whois(读作“Who is”,非缩写)是用来查询域名的IP以及所有者等信息的传输协议。简单说,whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库(如域名所有人、域名注册商)。
b) dns8.hichina.com, dns7.hichina.com
c) www.baidu.com有多个IP地址。
d) 略
e) 略
f) 攻击者可以使用whois数据库和nslookup工具来确定目标机构的IP地址范围、DNS服务器地址等。
g) 通过分析攻击包的源地址,受害者可以使用whois来获取来自攻击的域的信息,并可能通知源域的管理员。
P19.
a) 略
b) The answer for google.com could be:
a.root-servers.net
E.GTLD-SERVERS.NET
ns1.google.com(authoritative)
P20.
我们可以定期对本地DNS服务器中的DNS缓存进行快照。在DNS缓存中出现最频繁的Web服务器是最流行的服务器。这是因为如果更多的用户对Web服务器感兴趣,那么用户就会更频繁地发送该服务器的DNS请求。因此,该Web服务器将更频繁地出现在DNS缓存中。
P21.
是的,我们可以使用dig在本地DNS服务器中查询该网站例如,“dig cnn.com”将返回查找cnn.com的查询时间。如果cnn.com在几秒钟前刚刚被访问,那么cnn.com的一个条目缓存在本地DNS缓存中,因此查询时间为0 msec。否则,查询时间会很长。
P22.
P23.
a) 考虑一个分发方案,其中服务器以 u s / N u_{s} / N us/N的速率并行地将文件发送给每个客户机。注意,这个速率小于每个客户机的下载速率,因为假设 u s / N ≤ d min u_{s} / N \leq d_{\min } us/N≤dmin。因此,每个客户也可以收到速率 u s / N u_{s} / N us/N。由于每个客户端接收速率为 u s / N u_{s} / N us/N,所以每个客户端接收整个文件的时间为 F / ( u s / N ) = N F / u s \mathrm{F} /\left(u_{s} / N\right)=N F / u_{s} F/(us/N)=NF/us。由于所有的客户端在 N F / u s N F / u_{s} NF/us中接收文件,所以总的分发时间也是 N F / u s N F / u_{s} NF/us。
b) 考虑一种分发方案,其中服务器以 d min d_{\min } dmin的速率并行地将文件发送给每个客户机。注意,聚合速率 N d min Nd_{\min } Ndmin小于服务器的链接速率 u s u_s us,因为假设 u s / N ≥ d min u_{s} / N \geq d_{\min } us/N≥dmin。由于每个客户机以 d min d_{\min } dmin速率接收文件,因此每个客户机接收整个文件的时间为 F / d m i n \mathrm{F} / d_{\mathrm{min}} F/dmin。由于所有客户都在这个时间内收到文件,所以总体分发时间也是 F / d m i n \mathrm{F} / d_{\mathrm{min}} F/dmin。
c) 略
P24.
略
P25.
覆盖网络中有 N N N 个节点。有 N ( N − 1 ) / 2 N(N-1)/2 N(N−1)/2 条边。
P26.
是的。他的第一个说法是可能的,只要有足够多的同行在群体中停留足够长的时间。Bob总是可以通过其他同行的主动联系接收数据。
他的第二个说法也是正确的。他可以在每个主机上运行一个客户机,让每个客户机“免费运行”。并将从不同主机收集的数据块合并到一个文件中。他甚至可以编写一个小的调度程序,让不同的主机请求文件的不同块。这实际上是P2P网络中的一种Sybil攻击。
P27.
a) N个文件,假设我们对视频版本和音频版本按质量和速率的降序进行一对一匹配
b) 2N
P28.
a) 如果您首先运行TCPClient,那么客户机将尝试与不存在的服务器进程建立TCP连接。将不会建立TCP连接。
b) UDPClient不与服务器建立TCP连接。因此,如果您首先运行UDPClient,然后运行UDPServer,然后在键盘上键入一些输入,那么一切都可以正常工作。
c) 如果您使用不同的端口号,那么客户端将尝试与错误的进程或不存在的进程建立TCP连接。会发生错误。
P29.
没有必要;客户端口号为5432,服务器端口号12000;变化之前客户端口由操作系统选择,服务器端口为12000
P30.
是的,您可以配置多个浏览器以同时打开多个到Web站点的连接。这样做的好处是可以更快地下载文件。缺点是您可能会占用带宽,从而大大减慢共享相同物理链接的其他用户的下载速度。
P31.
对于像远程登录(telnet和ssh)这样的应用程序,面向字节流的协议是非常自然的,因为应用程序中没有消息边界的概念。当用户键入字符时,我们只需将该字符放入TCP连接在其他应用程序中,我们可能会发送一系列在它们之间具有固有边界的消息。
例如,当一个SMTP邮件服务器向另一个SMTP邮件服务器发送多个电子邮件消息时。由于TCP没有指示边界的机制,应用程序必须自己添加指示,以便应用程序的接收端能够区分消息。
如果每条消息都被放到一个不同的UDP段中,接收端就可以这样做在应用程序的发送端不添加任何指示的情况下区分各种消息。
P32.
要创建web服务器,我们需要在主机上运行web服务器软件。许多供应商销售网络服务器软件。然而,目前最流行的web服务器软件是Apache,它是开源的并且是免费的。多年来,开源社区对它进行了高度优化