系列文章戳这里👇
- 计算机网络第一章知识点总结
- 计算机网络第二章知识点总结
- 计算机网络第三章知识点总结
- 计算机网络第四章知识点总结
- 计算机网络第五章知识点总结
- 计算机网络第六章知识点总结
- 计算机网络第七章知识点总结
- 计算机网络第八章知识点总结
1.应用层
- 几个重要的概念:
- 客户-服务器模式
- 对等模式
- 传输层服务
- 进程与传输层接口
- 几个流行的应用层协议:
- HTTP
- FTP
- SMTP / POP3 / IMAP
- DNS
- 开发网络应用程序: socket API
- 创建一个网络应用的核心,是编写一个分布式程序,使其可以:
- 运行在不同的端系统上,并能通过网络相互通信
- 例如,web服务器软件与浏览器软件
- 应用程序只运行在终端上:应用程序员不需要为网络核心设备编写程序“
- 只在端系统上开发应用”是一个非常重要的设计决定:
1.1网络应用架构
- 在开发一个应用程序之前,首先要决定采用什么样的网络应用架构
- 网络应用架构规定了在各个端系统上组织应用程序的方法
- 目前有两种主流的网络应用架构:
- 客户-服务器架构(Client-server)
- 对等架构(Peer-to-peer ,P2P)
1.1.1客户-服务器架构
- 服务器(server):
- 有一台总是在线的主机,上面运行着服务器程序(server)
- 服务器主机(server machine)具有永久的、众所周知的地址
- 客户(client):
- 用户终端上运行一个客户程序(client),需要时与服务器程序通信,请求服务
- 客户机(client machine)使用动态地址,通常不会总是在线
1.1.2P2P架构
- 没有总是在线的服务器主机
- 任意一对端系统(对等方)可以直接通信
- 对等方多为用户自己的计算机,使用动态地址
- 每个对等方既可请求服务,也可提供服务
- 典型的P2P应用:
1.1.3两种架构的对比
- 客户-服务器架构:
- 资源集中:
- 优点:资源发现简单
- 缺点:
- 集中式计算带来的问题,如服务端扩容压力、网络流量不均衡、响应延迟长
- P2P架构:
- 资源分散:
- 优点:
- 缺点:
-资源发现困难,社会问题(版权、安全性等)
1.2不同终端上的进程通信
- 进程:主机上运行的程序
- 在分布式应用中,不同终端上的进程需要通信
- 进程通信的方法:
- 同一个主机内:进程间通信机制(OS提供)
- 在不同主机上:通过交换报文进行通信
- 在一次确定的通信会话中,总能标示一方为客户进程,另一方为服务器进程:
- 客户进程:主动发起请求的进程
- 服务器进程:接收请求的进程
1.3进程与网络的接口:套接字
- 进程如何将报文送入网络,又如何从网络接收报文?
- 设想在应用程序和网络之间存在一扇门(套接字):
- 发送报文:发送进程将报文推到门外
- 门外的运输设施(因特网)将报文送到接收进程的门口
- 接收报文:接收进程打开门,即可收到报文
- 套接字是应用层和传输层的接口,也是应用程序和网络之间的API
1.4进程如何标识自己:进程编址
- 每个进程需要一个 标识,以便其它进程能够找到它
- Q: 可以用进程所在主机的地址来标识进程吗?
- A: 不能,因为同一个主机上可能运行着许多进程
- 端口号:用于区分同一个主机上的不同进程
- 进程标识包括:
- 主机地址
- 与该进程关联的端口号
- 端口号的例子:
- 众所周知的端口号分配给服务器,成为服务的标识
- 比如,HTTP server使用端口80,Mail server使用端口25
1.5因特网提供的传输服务
- TCP service:
- 面向连接: 保证传输顺序
- 可靠传输:不出错
- 流量控制: 发送进程不会“压垮”接收进程
- 拥塞控制: 网络超载时抑制发送进程
- 不提供: 及时性,最低带宽保证,安全性
- UDP service:
- 通过因特网接收和发送报文
- 不提供: 顺序保证,可靠传输,流量控制,拥塞控制,及时性,最低带宽保证,安全性
小结
- 为创建一个新的网络应用,需要:
- 选择一种网络应用架构:客户-服务器 or P2P
- 选择一种网络服务:TCP or UDP
- 确定一个端口号
- 定义应用层协议
- 编写客户程序和服务器程序(调用套接字接口)
- 网络应用和应用层协议:
- 应用层协议只是网络应用的一部分
- 网络应用还包括客户程序、服务器程序等
- 要求掌握的概念:
1.6Web应用画像
- 应用层资源:网页(web pages)
- 网络应用架构:
- 客户-服务器架构 客户:浏览器
- 服务器:web服务器
- 要求的网络服务:TCP服务
- 端口号:80
- 应用层协议:HTTP(Hyper Text Transfer Protocol)
1.7 HTTP协议
- Web采用客户-服务器模式
- client: 浏览器请求、接收和显示web对象
- server: Web服务器应客户请求发送对象
- HTTP协议:定义了浏览器和web服务器之间的通信规则
- HTTP 1.0(RFC 1945)和HTTP 1.1(RFC 2068)
1.7.1HTTP使用TCP服务
- 客户发起到服务器 80 端口的 TCP 连接(客户端创建一个套接字)
- 服务器接受来自客户的TCP连接(服务器端创建一个套接字)
- 浏览器和服务器交换HTTP报文 (通过各自的套接字)
- 关闭TCP 连接(关闭各自的套接字)
- HTTP是“无状态的”
1.8非持久连接和持久连接
- 非持久 HTTP
- 在一个TCP连接上最多发送一个对象
- HTTP/1.0 使用非持久连接
- 持久 HTTP 在
- 一个TCP连接上可以发送多个对象
- HTTP/1.1 缺省使用持久连接
1.8.1 非持久HTTP
1.8.2非持久HTTP的响应时间
- RTT (Round-Trip Time):
一个小分组从客户发送到服务器,再返回客户的时间 - Response time:
- 建立TCP连接用时一个RTT
- 发送HTTP请求至收到响应的前几个字节用时一个RTT
- 传输文件的时间
- 请求一个网页的时间:
- 请求一个对象用时2RTT(忽略对象传输时间)
- 请求一个完整的网页用时22RTT(11个对象)
1.9持久HTTP
- 非持久HTTP 的问题:
- 获取每个对象需要2个RTT
- 每个TCP连接需要消耗操作系统资源
- 浏览器需要打开多个TCP连接来获取一个网页
- 持久HTTP
- 服务器在发送响应后保持连接
- 同一对客户-服务器之间的后续HTTP报文可以在该连接上传输
- 无流水线方式:
- 客户仅当收到前一个响应后再发送新的请求
- 请求每个对象用时1个RTT
- 请求一个网页用时12RTT
- 流水线方式:
- HTTP/1.1缺省使用该方式客户每解析到一个引用对象就可以发送请求
- 可在一个RTT时间内请求所有引用对象
- 请求一个网页用时约3RTT
1.10HTTP报文格式
-
两类HTTP报文:
-
HTTP报文由ASCII文本构成
-
-
响应报文
-
状态代码
1.11Web缓存(代理服务器)
- 代理服务器: 代表原始服务器满足HTTP请求的网络实体,保存最近请求过的对象的拷贝。
- 用户设置浏览器:所有HTTP请求首先发往web 缓存
- 浏览器将HTTP请求发送给web缓存: 对象在web缓存中:
- web缓存返回对象
- 对象不在web缓存中:web缓存从原始服务器获取对象,缓存在本地,然后返回给客户
- Q: web缓存如何知道对象的原始服务器?
- A: HTTP请求头中的host首部行指出了原始服务器
- Web cache既是服务器又是客户:
- Web cache通常由ISP提供,多级ISP可能形成多级web缓存
- 为什么需要Web缓存:
- 举例:
- Assumptions
- 平均对象长度 = 1Mb
- 从机构浏览器到原始服务器的平均请求速率 = 15/sec
- 从接入路由器到原始服务器的来回延迟(RTT)= 2 sec
- Consequences
- LAN利用率 = 15%
- 接入链路的利用率 = 100%
- total delay = Internet delay + access delay + LAN delay = 2 sec + minutes + milliseconds
- possible solution
- consequence
- LAN利用率 = 15%
- 接入链路利用率 = 15%
- Total delay = Internet delay + access delay + LAN delay = 2 sec + msecs + msecs
- 链路升级的代价高昂!
- 引入Web缓存:
- 安装web cache
- 假设cache命中率为 0.4
- consequence
- 40%的请求可被立即满足
- 60%的请求被原始服务器满足
- 接入链路利用率为60%, 延迟为~10msecs
- total avg delay = Internet delay + access delay + LAN delay = 0.6*(~ 2.01 secs) + 0.4*(~msecs) = ~ 1.2 secs
- 比升级链路的延迟还要低!
小结
- 因特网上的每个资源(对象)都可以通过URL访问
- HTTP使用TCP连接:
- 客户与服务器交互:报文请求/响应
- HTTP服务器是无状态的,利用cookie技术可以保存用户状态
- 使用web缓存提高请求-响应速度:使用条件get获得最新的对象副本
2.文件传输
2.1文件传输概述
- 应用层资源:文件
- 网络应用架构:客户-服务器
- 使用传输服务:TCP
- 端口号:21、20
- 应用层协议:FTP
- 使用命令/响应交互(不是像HTTP那样使用报文交互)
- 通常情况下,用户通过FTP用户代理与文件服务器交互
- 使用分离的控制连接和数据连接:
- 控制连接:
- 使用端口21,传送客户命令和服务器响应
- 控制连接在整个会话期间一直保持
- 数据连接:
- 使用端口20,传输文件
- 每个数据连接只传输一个文件,发送方用关闭连接表示一个文件传输结束
- 有关控制连接与数据连接的问题
- Q:为什么将控制连接与数据连接分开?
- A:不会混淆数据与命令/响应,简化协议设计和实现;在传输文件的过程中可以继续执行其它的操作;便于控制传输过程(如客户可以随时终止传输)
- Q:为什么用关闭数据连接的方式结束文件传输?
- A:允许动态创建文件(不需预先告知文件的大小)
小结
- 使用TCP协议,服务器端口号21、20
- 采用命令/响应交互方式
- 使用两条TCP连接:
- 控制连接(端口21):会话期间始终保持
- 数据连接(端口20):每条连接仅传输一个文件,且客户与服务器角色交换
- 要求理解:
- 为什么使用两条分开的连接,即为什么不在同一条连接上既传输命令/响应、又传输数据?
- 要是用一条连接的话,端口既要处理数据连接数据,又要处理控制连接,很容易出错,而且效率很低。区分控制连接和数据连接后,数据连接的速度要快一些。
- 为什么每条数据连接只传输一个文件?
- 因为数据连接中,发送方用关闭连接表示一个文件传输结束
2.2电子邮件概述
- 应用层传输对象:邮件
- 网络应用架构:客户-服务器架构
- 使用传输服务:TCP
- 应用层协议:
- 邮件传输协议:SMTP(端口号25)
- 邮件访问协议:POP3(端口号110),IMAP(端口号143),HTTP(端口号80)
- SMTP、POP3、IMAP采用命令/响应交互
2.2.1用户代理
- 编辑、阅读、回复邮件等
- 将要外发的邮件发送到用户的邮件服务器
- 从用户邮箱中取邮件
- 一些用户代理: Outlook, elm, Mozilla, Thunderbird
2.2.2邮件服务器
- 邮件服务器包含:
- 用户信箱:存放到来的邮件
- 发送报文队列:存放要发送出去的邮件
- 报文传输代理MTA:运行在服务器后台的系统守护进程,负责在邮件服务器之间传输邮件,及将收到的邮件放入用户信箱
- 电子信箱:
- 由计算机上的一个存储区域(如磁盘上的一个文件)组成
- 每个信箱均被分配了唯一的电子邮件地址
- 电子邮件地址:
- 由两个部分组成,形如:mailbox@computer
- 前者为标识用户信箱的字符串,后者为信箱所在的邮件服务器的名字
2.2.3邮件传输协议
- SMTP:
- 邮件服务器之间传输邮件采用客户-服务器模式:
- 客户: 发送邮件的邮件服务器(报文传输代理)
- 服务器: 接收邮件的邮件服务器(报文传输代理)
- SMTP使用TCP协议,服务器端口为25
- 发送方和接收方的邮件服务器之间直接传输邮件
- SMTP采用命令/响应交互方式:
- 报文只能包含简单ASCII文本,即7位ASCII码(最初仅为英文电子邮件而设计)
- SMTP使用持久连接:
- 可以在一条TCP连接上传输多个报文(FTP只传输一个文件,HTTP可传输一个或多个对象)
- 一个方向的报文传输结束后,可以在另一个方向上传输报文(SMTP特有的)
- SMTP 服务器使用“.”表示报文结束(FTP使用关闭连接表示文件结束,HTTP使用长度域表示报文结束)
- SMTP要求报文(报头和实体)只包含简单ASCII文本(HTTP无此要求)
2.2.4邮件访问
- 邮件访问方式:
- 早期:用户登陆到邮件服务器上,直接在服务器上运行一个邮件阅读程序来阅读邮件
- 今天:用户在终端上安装用户代理,获取和阅读邮件
- Q:能将用户信箱放在本地终端吗?
- Q:用户代理能用SMTP从邮件服务器获取邮件吗?
- A:不能,SMTP是一个“推”协议,只能将邮件从用户代理推送到其邮件服务器,或从发送方邮件服务器推送到收件人邮件服务器
- 解决方案:设计一个新的协议从服务器获取邮件
2.2.5可以从服务器获取邮件的协议
-
POP: Post Office Protocol [RFC 1939]
- authorization (agent <–>server) and download
-
IMAP: Internet Mail Access Protocol [RFC 1730]
- more features (more complex)
- manipulation of stored msgs on server
-
HTTP: gmail, Hotmail, Yahoo! Mail, etc.
2.2.6不同协议对比
- POP3&IMAP :
- More about POP3 :
- 前一个例子使用了“download and delete” 模式,在另一台终端上无法再获取邮件
- “Download-and-keep”模式可将邮件保留在服务器中
- IMAP
- 所有邮件保存在服务器上
- 允许用户将邮件组织在文件夹中
- 允许用户在文件夹之间移动邮件
- 基于Web的邮件访问:HTTP
- 用户代理为普通浏览器:
- 发送邮件:浏览器使用HTTP协议将邮件发送到邮件服务器
- 获取邮件:浏览器使用HTTP协议从信箱取邮件
- 传输邮件:邮件服务器之间仍使用SMTP协议传输报文
- 和IMAP一样,用户可以在远程服务器上用文件夹来组织他们的邮件
- 现代因特网电子邮件系统的组成:
- 用户代理
- 邮件服务器简单
- 邮件传输协议SMTP
- 邮件访问协议(POP3,IMAP,HTTP)
2.3HTTP、FTP、SMTP设计上的不同
- HTTP、FTP、SMTP均是在TCP连接上传输文件,但是在设计上有一些不同
- 使用持久连接或非持久连接:
- HTTP可在一条TCP连接上传输多个对象,SMTP可以传输多个邮件,FTP只传输一个文件
- 文件传输结束的标记:
- HTTP使用长度指示报文结束,FTP使用关闭连接表示文件结束,SMTP 使用“.”表示报文结束
- 文件内容的要求:
- SMTP要求邮件只包含简单ASCII文本,FTP和HTTP无此要求
- 客户-服务器交互方式:
- HTTP采用报文交互,SMTP和FTP采用命令/响应交互
小结
- 电子邮件系统:
- SMTP协议:
- 使用TCP协议,服务器端口号25
- “推”协议:将邮件推向用户信箱
- 命令/响应交互方式
- 信体只能包含简单ASCII文本
- MIME协议:
- 允许信体包含非ASCII文本
- 规定传输编码类型,扩展数据类型
- 两阶段交付过程:
- 邮件投递:邮件从发信方投递到用户信箱
- 邮件访问:收信人从用户信箱获(拉)取邮件
3. 域名系统 (DNS)
- DNS实现为一个应用层服务:
- 由其它网络应用使用的服务
- 客户-服务器模式
- 传输服务:主要使用UDP,有时使用TCP
- 端口号53
- 请求/响应报文交互
3.1DNS提供的服务
- 主机名-IP地址转换
- 主机别名:
- 允许主机除了规范名外,具有一个或多个别名(易于记忆),如www.ustc.edu.cn
- 提供主机别名到规范名的映射
- 迁移服务不需要修改主机名
- 邮件服务器别名:
- 允许使用域名作为邮件服务器的别名如:xxx@ustc.edu.cn
- 负载分配:允许一个规范主机名对应一组IP地址
- 将服务请求在一群相同功能的服务器之间分配\
3.2DNS工作原理
- 将主机名转换成IP地址:
- 应用程序(如浏览器)调用一个本地例程(解析器),主机名作为参数之一传递
- 解析器向网络中的DNS服务器发送查询报文,包含要查询的主机名
- 解析器收到包含IP地址的响应报文
- 解析器将IP地址返回给调用者(如浏览器)
- 对应用程序而言,DNS是一个提供直接转换服务的黑盒子
- DNS是一个分布式数据库
- Q: 为什么不使用集中式的DNS?
- 单点失效
- 流量集中:单个DNS服务器需处理全部查询
- 响应时间长:远距离的集中式数据库
- 需要维护庞大的数据库
3.3域名
- 域名系统 (Domain Name System): 把便于人们记忆的具有特定含义的主机名转换为便与机器处理的 IP 地址. DNS 采用 C/S 模型, 其协议运行在 UDP 之上, 使用 53 端口.
- 层次域名: 国家顶级域名 (.cn, .us), 通用顶级域名 (.com, .org) 等
- 域名服务器: 每个域名服务器不但能进行一些域名到 IP 地址地解析, 而且还必须具有连向其他域名服务器的信息.
- 根域名服务器: 最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的 IP 地址. 若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器 . 根域名服务器用来管辖顶级域(如.com)
- 顶级域名服务器: 收到 DNS 查询请求时,就给出相应的回答 (可能是最后的结果,也可能是下一步应当查找的域名服务器的 IP 地址).
- 授权 (Authorized) 域名服务器 (权限域名服务器): 每台主机都必须在授权域名服务器处登记。许多域名服务器都同时充当本地域名服务器和授权域名服务器。授权域名服务器能将其管辖的主机名转换为该主机的 IP 地址.
- 本地域名服务器: 对于域名系统很重要,当一台主机发出 DNS 查询请求时,这个查询请求报文就 发送给该主机的本地域名服务器.
- 严格来说,本地DNS服务器不属于DNS服务器的层次结构
- 每个ISP都有一台本地DNS服务器,也称“默认的DNS服务器”
- 解析器的DNS查询报文实际上发送给本地DNS服务器
- 本地DNS服务器起着代理的作用,负责将DNS查询报文发送到DNS层次结构中,并将查找结果返回给解析器
3.4 解析
- 递归查询: 如果本地主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向根域名服务器继续发出查询请求报文,在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是递归地在其他几个域名服务器之间进行.
- 迭代查询: 当根域名服务器收到本地域名服务器发出的迭代查询请求报文时, 要么给出所要查询的 IP 地址, 要么告诉本地域名服务器下一步应当向哪个顶级域名服务器进行查询. 然后让本地域名服务器向这个顶级域名服务器进行后续的查询, 如此迭代.
- DNS 缓存: 为了提高 DNS 的查询效率, 并减少因特网上的 DNS 查询报文数量. 当一个 DNS 服务器接收到 DNS 查询结果时, 它可以将该DNS 信息缓存在高速缓存中. 这样后面再遇到相同的域名查询时, 该DNS 服务器就能够直接提供所要求的 IP 地址.
小结
- DNS
- 提供了一种按层次结构命名主机的方法
- 实现了一个由DNS服务器构成的分布式数据库
- 提供了查询域名数据库的应用层协议
- 域名服务器的类型和层次(逻辑层次,物理层次)
- DNS服务的调用方法:
- 向本地DNS代理的一个RPC调用
- 递归+迭代的查询方式
- DNS协议:
- 主要使用UDP,也可以使用TCP,端口号均为53
- 报文请求/响应交互
- DNS缓存
例题
以下哪个协议不能用于访问用户信箱 (属于邮件服务器的一部分)?
A. SMTP B. POP3
C. HTTP D. IMAP
A: SMTP 是一个” 推” 协议
以下有关 DNS 的说法, 哪一个是正确的?
A. 一个域名唯一映射到一个 IP 地址
B. 因特网上的每台主机都需要一个域名
C. 域名解析每次都要从查询根域名服务器开始
D. 本地域名服务器不属于域名服务器层次
D: 严格来说, 本地 DNS 服务器不属于DNS 服务器的层次结构. 本地 DNS 服务器起着代理的作用, 负责将 DNS 查询报文发送到 DNS层次结构中, 并将查询结果返回给解析器. 对于 C, 考虑 DNS 缓存
-
Alice从她的终端登陆到公司的文件服务器上下载了4个文件。请问Alice的终端和公司的文件服务器之间总共建立了几条TCP连接?这些TCP连接分别用来传输什么?
5条连接。一条控制连接,用于传输命令和响应。四条数据连接,每条连接用于传输一个文件。
-
在某个时刻,Alice的邮件服务器和Bob的邮件服务器之间需要交换一批邮件,这两个邮件服务器之间需建立几条TCP连接?
一条TCP连接。
-
以下哪些应用层协议可能会被用来传输一个邮件报文:HTTP,FTP,SMTP,POP,DNS?
HTTP,SMTP,POP
-
Alice向Bob发送了一封邮件,Bob阅读了这封邮件。这封邮件在Alice的用户代理、Bob的用户代理、Alice的邮件服务器、Bob的邮件服务器中停留过。请按顺序列出这封邮件经过的地方,经过邮件服务器时需指出是进入发送队列还是进入信箱。
邮件从Alice的用户代理到达Alice的邮件服务器,进入发送队列;然后到达Bob的邮件服务器,进入Bob的邮箱;最后到达Bob的用户代理。
-
如果TCP服务器支持n个并发连接,每个连接来自不同的客户机主机,TCP服务器将需要多少个套接字?这些套接字是怎么分配的?
服务器需要(n+1)个套接字。一个套接字用于监听来自客户的连接请求;其余n个套接字,每个用于和一个客户进程进行通信。
-
以下是DNS数据库的一些片段,请回答以下问题:
Name type value |
---|
abc.com. NS dns.abc.com |
dns.abc.com. A 202.68.69.1 |
abc.com. MX mail.abc.com |
jupiter.abc.com. A 202.68.69.3 |
mars.abc.com. A 202.68.69.7 |
venus.abc.com. A 202.68.69.11 |
mail.abc.com. CNAME mars.abc.com |
www.abc.com. CNAME venus.abc.com |
ftp.abc.com. CNAME jupiter.abc.com |
(1)abc.com的邮件服务器的别名是: mail.abc.com
(2)abc.com的权威域名服务器的IP地址是: 202.68.69.1
(3)abc.com的web服务器的规范名是: venus.abc.com
(4)abc.com的FTP服务器的IP地址是: 202.68.69.3
(5)邮箱bob@mail.abc.com所在主机的IP地址是: 202.68.69.7