网络应用的体系结构

客户机/服务器结构(C/S)

image-20220507105233916

  • 服务器
    • 永久性访问地址/域名
    • 不间断提供服务
    • 利用大量服务器实现可扩展性
  • 客户机
    • 与服务器通信,使用服务器提供的功能
    • 间歇性接入网络
    • 可以使用动态IP
    • 不会与其它客户机直接交互

image-20220507105443390

点对点结构(P2P)

image-20220507105507846

  • 没有永久在线的服务器
  • 任意端系统之间可以直接通讯
  • 间歇性接入网络
  • 节点可能改变IP地址

优点:高度可伸缩

缺点:难于管理

混合结构(Hybird)

Napster

image-20220507105907224

  • 文件传输用P2P结构
  • 文件搜索采用C/S结构——集中式

网络应用进程通信

进程

同一主机上运行的进程之间:

  • 进程舰通信机制
  • 操作系统提供

不同主机上运行的进程舰通信:

  • 消息交换

客户机进程:发起通信的进程

服务器进程:等待通信请求的进程

套接字

image-20220507111130591

  • 进程间利用socket发送/接收消息
  • socket是传输基础设施向进程提供的API

如何寻址

不同主机上的进程舰通信,每个进程都必须有标识符

我们通过IP地址寻址主机,但同一主机上可能同时有多个进程需要通信,需要为主机上每个需要通信的进程分配一个端口号,通过IP地址+端口号作为进程的标识

域名解析系统DNS

概述

Domain Name System

  • 多层命名服务器构成的分布式数据库
  • 应用层协议:完成名字的解析
    • 提供Internet核心功能,用应用层协议实现
    • 网络边界复杂

解决Internet上主机/路由器的识别问题:互联网中的主机以IP地址为唯一标识符,IP本身是数字,不利于人使用,日常使用的是域名。DNS能够将域名解析为IP地址

DNS服务

  • 域名向IP地址的翻译
  • 主机别名
  • 邮件服务器别名
  • 负载均衡:Web服务器

负载均衡就是分摊到多个操作单元上进行执行

为什么不采用集中式的DNS

  • 单点失败问题,如果采用集中式而DNS出现问题会使整个网络瘫痪
  • 流量问题
  • 距离问题
  • 维护性问题

DNS采用分布式层次式数据库

image-20220507191147912

客户端想要查询www.amazon.com的IP

  • 客户端查询根服务器,找到com域名解析服务器
  • 客户端查询con域名解析服务器,找到amazon.com域名解析服务器
  • 客户端查询amazon.com域名解析服务器,获得www.amazon.com的IP地址

DNS域名服务器

根域名服务器

本地域名服务器无法解析域名时,访问根域名服务器,如果根域名服务器不知道映射,访问权威域名服务器获得映射,向本地域名服务器返回映射

image-20220507191708761

顶级域名服务器(TLD)负责com,org,net,edu等顶级域名和国家级域名,例如cn,uk,fr等

  • 由一些公司来维护

权威域名服务器:组织的域名解析服务器,提供组织内部服务器的解析服务

  • 组织负责维护
  • 服务提供商负责维护

本地域名解析服务器

  • 不严格属于层次体系
  • 每个ISP有一个本地域名服务器(默认域名解析服务器)
  • 当主机进行DNS查询时,查询被发送到本地域名服务器,作为代理将查询转发给(层级式)域名解析服务器系统

迭代查询:

image-20220507192605961

递归查询:

image-20220507192654729

DNS记录缓存和更新

只要域名解析服务器获得域名—IP映射,即缓存这一映射,一段时间过后缓存条目失效(删除),本地域名服务器一般会缓存顶级域名服务器的映射,因此根域名服务器不经常被访问

DNS记录和消息格式

记录

资源记录(resource records)

image-20220507193239691

  • Type=A
    • name:主机域名
    • value:IP地址
  • Type=NS
    • name:域
    • value:该域权威域名解析服务器的主机域名
  • Type=CNAME
    • name:某一真是域名的别名
    • value:真实域名
  • Type=MX
    • value是与name相对应的邮件服务器

消息格式

DNS协议是查询和恢复协议,消息格式相同

image-20220507193859644

  • identification:16位查询编号,回复使用相同的编号
  • flags
    • 查询或恢复
    • 期望递归
    • 递归可用
    • 权威回答

DNS占用53号端口,同时使用TCP和UDP协议。****DNS区域传输的时候使用TCP协议:辅域名服务器会定时(一般3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,会执行一次区域传送,进行数据同步。区域传送使用TCP而不是UDP,因为数据同步传送的数据量比一个请求应答的数据量要多得多。域名解析时使用UDP协议:客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过三次握手,这样DNS服务器负载更低,响应更快。理论上说,客户端也可以指定向DNS服务器查询时用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

如何注册域名

image-20220507194507756

应用层协议概述

简介

  • 公开的协议

    • 由RFC定义

    • 允许互相操作

    • HTTP,SMTP ······

  • 私有的协议

    • 多数P2P文件共享应用

内容

  • 消息的类型

    • 请求消息
    • 响应消息
  • 语法格式

    image-20220507112053439

  • 语义

  • 规则

对传输层服务的需求

  • 数据丢失/可靠性

  • 时间/延迟

  • 带宽

Internet提供的传输服务

  • TCP服务
    • 面向连接
    • 可靠传输
    • 流量控制
    • 拥塞控制
    • 不提供时延服务、最小带宽保障
  • UDP服务
    • 无连接
    • 不可靠数据传输

文件传送协议

FTP与TFTP都是复制整个文件类的协议,即若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件,只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。另一大类是联机访问,联机访问意味着允许多个程序同时对一个文件进行存取。和数据库系统的不同之处是用户不需要调用一个特殊的客户进程,而是由操作系统提供对远地共享文件进行访问的服务,就如同对本地文件的访问一样。这就使用户可以用远地文件作为输入和输出来运行任何应用程序,而操作系统中的文件系统则提供对共享文件的透明存取。

FTP协议

FTP基于TCP,主要功能是减少或消除在不同操作系统下的处理文件的不兼容性

FTP使用C/S,一个FTP服务器可同时为多个客户进程提供服务。FTP
的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,负责处理单个请求。

主进程的工作步骤

  • 打开端口21,使客户进程能够连接上
  • 等待客户进程发出连接请求
  • 启动从属进程处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程
  • 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发进行的

当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口21,同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。接着,服务器进程用自己传送数据的熟知端口20 与客户进程所提供的端口号建立数据传送连接

image-20220508094838923

(为了简单起见,主进程没有画)

在进行文件传输时, FTP 的客户和服务器之间要建立两个并行的TCP 连接:“控制连接”和“数据连接"。控制连接在整个会话期间一直保持打开, FTP 客户所发出的传送请求,通过控制连接发送给服务器端的控制进程,但控制连接并不用来传送文件。实际用千传
输文件的是“数据连接"。服务器端的控制进程在接收到FTP 客户发送来的文件传输请求后就创建“数据传送进程”和“数据连接”,用来连接客户端和服务器端的数据传送进程。数据传送进程实际完成文件的传送,在传送完毕后关闭“数据传送连接”并结束运行。由于FTP 使用了一个分离的控制连接,因此FTP 的控制信息是带外(out of band)传送的

TFTP协议

TFTP也使用C/S模式,使用UDP。因此TFTP 需要有自己的差错改
正措施。TFTP 只支持文件传输而不支持交互。TFTP 没有一个庞大的命令集,没有列目录的功能,也不能对用户进行身份鉴别。

特点:

  1. 每次传送的数据报文中有512 字节的数据,但最后一次可不足512 字节。
  2. 数据报文按序编号,从1 开始。
  3. 支持ASCII 码或二进制传送。
  4. 可对文件进行读或写。
  5. 使用很简单的首部。

发送完一个文件块后就等待对方的确认,确认时应指明所确认的块编号。发完数据后在规定时间内收不到确认就要重发数据PDU 。发送确认PDU 的一方若在规定时间内收不到下一个文件块,也要重发确认PDU 。这样就可保证文件的传送不致因某一个数据报的丢失而告失败。
在一开始工作时。TFTP 客户进程发送一个读请求报文或写请求报文给TFTP 服务器进程,其熟知端口号码为69 。TFTP 服务器进程要选择一个新的端口和TFTP 客户进程进行通信。若文件长度恰好为512 字节的整数倍,则在文件传送完毕后,还必须在最后发送一个只
含首部而无数据的数据报文。若文件长度不是512 字节的整数倍,则最后传送数据报文中的数据字段一定不满512 字节,这正好可作为文件结束的标志。

TELNET协议

TELNET 也使用C/S方式。在本地系统运行TELNET 客户进程,而在远地主机则运行TELNET 服务器进程。

image-20220508134152954

HTTP协议

HyperText Transfer Protocol

image-20220507143453997

image-20220507134947093

C/S结构

  • 客户—Browser:请求、接收、展示Web对象
  • 服务器—Web Server:响应客户的请求,发送对象

使用TCP传输服务

  • 服务器在80端口等待客户的请求
  • 浏览器发起到服务器的TCP连接(创建套接字Socket)
  • 服务器接受来自浏览器的TCP连接
  • 浏览器与Web服务器交换HTTP消息
  • 关闭TCP连接

无状态

  • 服务器不维护任何有关客户端过去所发送的请求的信息

有状态的协议更复杂:

  • 需要维护状态
  • 如果客户或服务器失效,会产生状态不一致,解决这种不一致代价高

HTTP连接的两种类型

非持久性连接(Nonpersistent HTTP)

HTTP/1.0使用

  • 每个TCP连接最多允许传输一个对象

image-20220507140814248

image-20220507140931139

RTT(Round Trip Time)

从客户端发送一个很小的数据包到服务器并返回所经历的时间

image-20220507141600192

简单分析响应时间:发送、建立TCP连接需要1个RTT,发送HTTP请求消息到HTTP响应消息的前几个字节到达需要1个RTT,还要加上响应消息中所含的文件传输时间

$Total = 2RTT + 文件发送时间$

非持久性连接每个对象需要2个RTT,操作系统需要为每个TCP连接开销资源(ooverhead),假如浏览器为提高效率打开多个并行的TCP连接以获取网页所需对象,又会给服务器带来很大的负担

持久性连接(Persistent HTTP)

HTTP/1.1使用(带有流水机制的持久性连接)

  • 每个TCP连接允许传输多个对象
  • 发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送

无流水的持久性连接

  • 客户端只有收到前一个响应后才发送新的请求
  • 每个被引用的对象耗时1个RTT

带有流水机制的持久性连接

  • 客户端只要遇到一个应用对象就尽快发出请求
  • 理想情况下,收到所有的应用对象只需要耗时约1个RTT

HTTP消息

请求消息

image-20220507143751524

通用格式

image-20220507143857782

上传输入的方法:

POST方法:在Entity Body中上传客户端的输入

URL方法:使用GET方法在request行的URL字段中上传,https://www.bilibili.com/video/BV1Up411Z7hC?p=23&spm_id_from=pageDriver中?后面的部分,以键值对的形式传输name=value

HTTP/1.0方法类型:

  • GET
  • POST
  • HEAD:请Server不要将所请求的对象放入响应消息中

HTTP/1.1:

  • GET、POST、HEAD
  • PUT:将消息体中的文件上川岛URL字段所指定的路径
  • DELETE:删除URL字段所指定的文件

响应消息

image-20220507144734691

Date:Web服务器生成消息的时间

状态:

  • 1xx 表示通知信息,如请求收到了或正在进行处理。
  • 2xx 表示成功,如接受或知道了。
  • 3xx 表示重定向,如要完成请求还必须采取进一步的行动。
  • 4xx 表示客户的差错,如请求中有错误的语法或不能完成。
  • 5xx 表示服务器的差错,如服务器失效无法完成请求。

Cookie技术

HTTP协议是无状态协议,但在许多情况下需要服务器掌握客户端的状态,需要引入Cookie技术

Cookie技术是某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据

Cookie组件

  • HTTP响应消息的cookie头部行
  • HTTP请求消息的cookie头部行
  • 保存在客户端主机上的cookie文件,由浏览器管理
  • Web服务器端的后台数据库

原理:

image-20220507150421459

作用:

  • 身份认证
  • 购物车
  • 推荐
  • Web e-mail

Cookie技术存在隐私问题

Web缓存/代理服务器技术

在不访问服务器的前提下满足客户端的HTTP请求

优势:

  • 缩短客户请求的响应时间
  • 减少机构/组织的流量
  • 在大范围内实现有效的内容分发(CDN)

image-20220507152121546

用户设定浏览器通过缓存进行Web访问,浏览器向缓存/代理服务器发送所有的HTTP请求,如果所请求的对象在缓存中,缓存返回对象;否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端保存该对象。

缓存既充当客户端,也充当服务器,一般由ISP假设

示例:

image-20220507154325337

互联网链路利用率过高

解决方案1:提高互联网接入宽带=10Mbps,但成本过高

解决方案2:(设计思想与cache类似)

image-20220507154630696

使用条件性GET方法来确保缓存/代理服务器中保存的是最新的信息,在HTTP请求消息中声明所持有版本的日期(If-modified-since:<date>),如果缓存的版本是最新的,则响应消息中不包含对象(HTTP/1.0 304 Not Modified),此时只有一个空的响应,占用的带宽是很小的

image-20220507155207945

Email应用

概述

构成组件

  • 邮件客户端
    • 读、写Email消息
    • 与服务器交互,收,发消息
    • Web客户端
  • 邮件服务器(核心)
  • SMTP协议(Simple Mail Transfer Protocol)

邮件服务器

  • 邮箱:存储发给该用户的Email
  • 消息队列:存储等待发送的Email

image-20220507160906524

为什么要邮件服务器?

  • 客户端不能时时刻刻在线

Email是一个典型的异步应用

image-20220507161604505

SMTP协议

  • 使用TCP进行可靠传输

  • 端口25

  • 命令/响应交互模式

  • Email消息只能包含7位ASCII码

SMTP交互示例:

image-20220507161925241

SMTP使用持久性连接,要求消息必须由7位ASCII码构成,SMTP服务器利用CRLF.CRLF确定消息的结束。

与HTTP相比,HTTP是拉式(pull),SMTP是退式(push);二者都使用命令/响应交互模式;命令和状态代码都是ASCII码;HTTP每个对象封装在独立的响应消息中,SMTP多个对象在由多个部分构成的消息中发送

Email消息格式

image-20220507162612725

header:

  • To
  • From
  • Subject

body:

  • 消息本身
  • 只能是ASCII字符

MIME:多媒体邮件扩展

通过在邮件头部增加额外的行以声明MIME的内容类型

image-20220507162950994

邮件访问(读取)协议

image-20220507164228808

邮件访问协议:从服务器获取邮件

  • POP(邮局协议):Post Office Protocol
    • 认证/授权(客户端<–>服务器)和下载
  • IMAP:Internet Mail Access Protocol
    • 更多功能
    • 更加复杂
    • 能够操纵服务器上的储存消息
  • HTTP:163,QQMail等

POP3协议

image-20220507165222253

认证过程

  • 客户端命令
    • User
    • Pass:声明密码
  • 服务器响应
    • +OK
    • -ERR

事务阶段

  • List:列出消息数量
  • Retr:用编号获取消息
  • Dele:删除消息
  • Quit

“下载并删除”模式:用户如果换了客户端软件,无法重读该邮件

“下载并保持”模式:不同客户端都可以保留消息的拷贝

POP3是无状态的

IMAP协议

所有消息统一保存在服务器上,允许用户利用文件夹组织消息

支持跨会话(Session)的用户状态

  • 文件夹的名字
  • 文件夹与消息ID之间的映射

image-20220507170157532

P2P应用

文件分发:C/S 与 P2P
image-20220507195101883

C/S:

image-20220507195346944

P2P:

image-20220507195450452

image-20220507195942280

BitTorrent

image-20220507200949912

文件划分为256KB的chunk,节点加入torrent,一开始没有chunk,但会逐渐积累,向tracker注册以获得节点清单,与厚些节点(“邻居”)建立连接。下载的同时,节点需要向其它节点上传chunk,节点可能加入或离开,一旦节点获得完整的文件,它可能(自私地)离开或(无私地)留下

获取chunk

  • 给定任一时刻,不同的节点持有文件的不同chunk集合
  • 节点定期查询每个邻居所持有的chunk列表
  • 节点发送请求,请求获取礐石的chunk
    • 稀缺优先,例如某些个缺失的chunk只有3个节点有,另一些缺失的有100个节点能提供,优先获取少的节点的那些chunk

发送chunk:tit-for-tat

  • 某个节点向n个邻居发送chunk:正在向其发送chunk,速率最快的n个(每10秒重新评估)
  • 每30秒随机选择一个其它节点,向其发送chunk,可能成为新的top n

image-20220507234338662

索引

P2P系统的索引:信息到节点位置(IP地址+端口号)的映射

  • 文件共享:利用索引动态跟踪节点所共享的文件的位置,节点需要告诉索引它拥有哪些文件,节点搜索索引,从而知道能够得到哪些文件
  • 即时消息:索引负责将用户名映射到位置,当用户开启IM应用时,需要通知索引它的位置;节点检索索引,确定用户的IP地址

集中式索引

image-20220508091301203

有一个中央目录服务器,任何节点加入时需要通知中央服务器自己的IP地址和内容;向中央服务器查找,找到地址后点对点传输

内容定位是高度集中式的,存在单点失效问题、性能瓶颈、版权问题

洪泛式查询

每个节点对它共享的文件进行索引,且只对它共享的文件进行索引

覆盖网络:节点X与Y之间如果有TCP连接,那么构成一个边,所有活动节点和边构成覆盖网络(节点一般邻居数少于10个)

image-20220508092033375

被查询的节点继续向它的邻居发送查询消息,如果查询命中则利用反向路径返回查询节点。

层次式覆盖网络

介于集中式和洪泛式之间的查询方法

每个节点或是一个超级节点,或者被分配一个超级节点,节点和超级节点之间维持TCP,某些超级节点之间维持TCP连接,超级节点负责跟踪子节点的内容

image-20220508092451992

  • 例子:Skype

image-20220508092619353

$DHCP$

如何获得$IP$地址

硬编码

  • 通过静态配置完成

image-20220515161129813

默认网关:当这个子网的$IP$数据报要离开这个子网的时候要送到哪个接口进行转发

动态主机配置协议($DHCP$)

  • 从服务器动态获取$IP$地址、子网掩码、默认网关、$DNS$服务器名称与$IP$地址
  • “即插即用”
  • 允许地址重用(主机租用地址,关机后还回地址,允许再分配给其它主机)
  • 支持在用地址续租
  • 支持移动用户加入网络

image-20220515161837191

工作过程

交换报文:

  • 主机广播”$DHCP \space dicover$”(发现报文)
  • $DHCP$服务器利用“$DHCP \space offer$”(提供报文)进行响应(广播)
  • $DHCP \space request$,广播,通告其它$DHCP$服务器本机正在从某一个$DHCP$服务器申请$IP$,其它服务器可以收回预分配的$IP$
  • 主机请求$IP$地址:“$DHCP \space ack$”(确认报文)

image-20220515163240173

  • 请求报文封装到$UDP$数据包中

  • $IP$广播

  • 链路层广播

  • $DHCP$服务器构造$ACK$报文

image-20220515163557274