应用层课后习题
花了点时间简单的阅读了概述和第一章应用层,发现属实是边吃边拉了,所以索性从应用层开始,通过习题来了解计算机网络,题目来自于原书第8版。
2.1网络应用原理
习题
Q1:列出5种非专用的因特网应用以及他们所使用的应用层协议
- Web,HTTP超文本传输协议
- 电子邮件,SMTP简单邮件传输协议
- DNS(域名系统),DNS域名系统协议
- 对等文件分发(P2P),BitTorrent文件分发协议
- 视频流:HLS实时流传输协议
Q2:网络体系结构与应用程序体系结构之间有什么区别
网络体系结构固定,主要是参考OSI模型,同时抽象层级较高,为应用程序提供了特定的服务集合
应用体系结构由开发者决定,主要分为C/S和P2P两种,更关注用户体验和程序功能
网络体系结构为应用程序提供必要的网络服务支持,应用程序体系结构利用网络体系结构提供的服务向用户提供服务。
Q3:对于两个进程之间的通信会话而言,哪个进程是客户,哪个进程是服务器?
在计算机网络中,进行通信的实际是进程,进程通过套接字来收发报文。
发起通信的是客户进程,等待联系的是服务进程。
在Web中(C/S架构),浏览器是客户进程,Web服务器是服务进程
而在P2P体系下,任何一个进程都可以是客户进程或者服务器进程
Q4:对于一个P2P文件共享应用,你同意“一个通信会话不存在客户端和服务端的概念”的说法吗?为什么?
首先,对于P2P架构整体来说,去谈论客户端和服务端确实意义不大,因为P2P架构决定了每个终端必然既是发起请求的客户端又是等待联系的服务端,但对P2P结构下的某一次通信会话来说,客户端和服务端的区分是有意义的,单次会话来说,必然有着客户端和服务端的区分。所以上述说法不妥当。
Q5:运行在一台主机上的一个进程,使用什么信息来标识运行在另一台主机上的进程?
通过Ip和端口号。
首先Ip用来标识主机,每个进程都在监听的指定端口(不同进程可能想要监听同一端口,最终导致端口冲突问题),所以通过Ip和端口号可以找出指定主机下的监听这个端口的进程。
Q6:假定你想尽快处理从远程客户到服务器的事务,你将使用UDP还是TCP?为什么?
TCP/IP网络为应用程序提供了两个运输层协议UDP和TCP
TCP提供面向连接服务,并建立全双工的链接,传输前通过握手来确定建立连接,当传输结束后需要拆除连接,保证了数据无差错的交付,可靠性高,效率比之UDP慢,毕竟建立连接和拆除连接都需要时间
UDP是一种不提供不必要服务的轻量级运输协议,只传输,不负责。牺牲了可靠性的同时大大提高了速度。
因此可以选择UDP,但是如果这个事务需要保证可靠性的话TCP更能胜任这个工作。
Q7:你能设想一个既要求数据无丢失又高度时间敏感的应用程序吗?
证券交易软件
Q8:列出一个运输协议能够提供的四种宽泛类型服务,对于每种服务类型,指出是UDP还是TCP提供?
- 可靠数据TCP
- 吞吐量TCP,TCP的拥塞控制可以来控制吞吐量
- 定时UDP,UDP的实时性刚好一些
- 安全性TCP结合TLS
Q9:前面讲过TCP能用TLS来强化,以提供进程到进程的安全性服务,包括加密,TLS运行在运输层还是应用层?如果程序开发者想要用TLS来强化UDP,需要做什么工作
TLS位于传输层,主要是增强TCP的,但是可以通过处理握手并封装UDP协议来强化UDP。
总结
应用层是处理应用程序的网络数据交互的,对等实体是两个进程。
应用程序架构主要有两种,分别是C/S和P2P。
网络应用体系是TCP/IP的架构模型,进程间通信主要是通过套接字来解决的,套接字类似于插座,建立连接的过程就像请求者拿着插头找对应型号的插座插进去建立连接。
应用层的这种数据交换主要依靠传输层提供的TCP和UDP协议。TCP可靠,但需要建立连接,可以进行拥塞控制,同时可以结合TSL来实现安全性的保证,UDP无需建立连接,速度稍快但是不可靠,适合实时性要求较高的应用。
对于协议来说,需要指出报文类型、语法、语义、发送规则。
- 报文类型(类型):协议定义了不同类型的报文,每种报文都有其特定的功能和用途。
- 语法(格式):语法定义了报文的结构和格式,包括报文的各个字段、字段的长度和顺序等。
- 语义(怎么做):语义定义了报文各个字段的含义和用途,以及如何处理这些字段。它说明了当接收到一个特定的报文时,接收方应该做什么。
- 发送规则(如何发送):发送规则定义了报文发送的条件和时机,包括何时发送、如何发送以及发送的频率等。发送规则还涉及错误处理和重传机制等。
2.2-2.4HTTP、SMTP、DNS
习题
Q10:握手协议的作用是什么?
握手主要是用来确认建立连接的,因此握手协议的作用主要在于:
- 确认双方身份
- 确认传参细节
- 选择加密算法
Q11:为什么HTTP、SMTP及IMAP都运行在TCP而不是UDP上
首先TCP是一种面向连接的、可靠的传输层协议,通过建立连接来达到数据确认、超时重传等功能,具有流量控制和拥塞控制的机制。
而UDP是一种无连接、不可靠的传输层协议,更注重数据的传输效率,但是存在数据丢失和乱序的风险。
HTTP协议用于浏览器和服务器之间的通信,确保用户能够完整的获取网页的内容,对于用户来说,在一定程度上可以接受页面的加载缓慢,但是不能接受数据的丢失。
SMTP和IMAP主要用于电子邮件,对于这种有交付需求的任务,一方发送了必然要求另一方接收到,不能有丢失或者损坏。
因此上述三种协议都应该选择TCP协议
Q12:考虑一个电子商务网站需要保留每一个客户的购买记录。描述如何使用cookie来完成功能
首先HTTP是无状态协议,这意味着他不会记住不同响应之间的但是对于像商务网站这样的需要识别客户信息的网站,我们需要想办法来记录对应的信息来识别客户,所以可以用cookie的会话标识符来进行一个身份识别,当用户首次访问网站的时候,服务器会发送一个唯一标识用来区分用户,当下次访问的的时候携带这个cookie就可以进行身份的区分。
后续就是服务器根据cookie去数据库进行一个身份的查询校验,并加载对应的用户数据。
Q13:描述Web缓存器是如何减少接收被请求对象的时延的,Wbe缓存器将减少一个用户请求对所有对象或只是其中某些对象的时延吗,为什么。
当用户首次请求某个资源的时候,缓存器会从服务器获取副本并进行存储
对于后续的相同请求先检查资源版本的变更,如果没有变更则直接返回缓存器资源,反之重新请求资源
缓存只是对于某些对象只的是变动幅度不大、频率不高的对象,因为如果对所有的数据进行一个缓冲,那些变动频繁的对象,缓冲器起到的作用其实不大,还会带来额外的内存压力。本质上缓存是一个空间换时间的方案,当没有换来时间的时候仍旧使用缓存并不是一个很好的解决方案
Q16:假定Alice使用一个基于Web的电子邮件账户,向Bob发送报文,而Bob使用IMAP从他的邮件服务器访问自己的邮件。讨论该报文是如何从Alice主机到Bob主机的,列出在两台主机间移动报文时所使用的各种应用层协议
首先Alice先通过自己的客户端代理通过SMTP协议将邮件推到自己的邮件服务器,再由Alice的邮件服务器通过SMTP协议将邮件推送到Bob的邮件服务器上,最后Bob从自己的邮件服务器使用IMAP协议拉取发给自己的邮件
Q18:什么是HTTP/1.1中的HOL阻塞问题?HTTP/2试图如何解决这个问题?
HTTP/1.1中的HOL阻塞(Head-of-Line Blocking,简称HOLB)问题主要指的是由于HTTP/1.1协议规定,只有上一个请求得到响应后,才允许发出下一个请求,这种顺序性导致的阻塞现象。具体来说,当一个请求(比如请求一个较大的文件或处理时间较长的请求)被阻塞或处理较慢时,其后续的请求都会受到影响,无法被及时处理,即使这些后续请求并不需要等待前面的请求完成。
HTTP/2试图通过以下方式来解决HTTP/1.1中的HOL阻塞问题:
- 多路复用(Multiplexing):HTTP/2引入了帧、消息和数据流等概念,每个请求/响应被称为一个消息,每个消息都被拆分成若干个帧进行传输,每个帧都分配一个序号。这意味着在同一个TCP连接中,可以并行处理多个请求和响应,而不需要按照顺序等待。这种并行处理能力使得即使某个请求被阻塞,也不会影响到其他请求的处理。
- 二进制分帧层:HTTP/2使用二进制格式传输数据,而不是像HTTP/1.1那样使用文本格式。这使得HTTP/2可以更有效地解析数据,并支持更复杂的传输机制,如多路复用。
- 流控制:HTTP/2还引入了流控制机制,允许客户端和服务器控制数据的发送速率。这有助于防止发送方发送数据过快而导致接收方无法及时处理,从而进一步减少了HOL阻塞的可能性。