应用层
应用层协议原理
网络应用程序体系解构
应用程序体系结构: 由应用程序研发者设计规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之一:客户-服务器体系结构或对等(P2P)体系结构。
客户-服务器体系结构:打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。
对等(P2P)体系结构: 应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方,在一个P2P文件共享应用中,尽管每个对等方都由于请求文件产生工作负载,但每个对等方通过向其他对等方分发文件也为系统增加服务能力。
进程通信
进程: 进行通行的是进程
在两个不同端系统上的进程,通过跨越计算机网络交换报文(message)而相互通信。发送进程生成并向网络中发送报文:接收进程接收这些报文并可能通过回送报文进行响应。
Web应用程序中,一个客户浏览器进程与一台Web服务器进程交换报文。在一个P2P文件共系统中,文件从一个对等方中的进程传输到另一个对等方中的进程。
客户和服务端进程
付于Web而言,浏览器是一个客户进程,Web服务器是一台服务器进程。
对于P2P文件共享,下载文件的对等方标识为客户,上载文件的对等方标识为服务器。
在一对进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。
进程和计算机网络之间的接口
多数应用程序是由通信进程对组成,每对中的两个进程互相发送报文。从一个进程向另一个进程发送的报文必须通过下面的网络。进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文。
套接字是同一台主机内应用层与运输层之间的接口。由于该套接字是建立网络应用程序的可编程接口,因此套接字也称为应用程序和网络之间的应用程序编程接口
套接字对运输层的控制是: 选择运输层协议,设定几个运输层参数
进程寻址
在一台主机上运行的进程为了向在另一台主机上运行的进程发送分组,接收进程需要有一个地址。为了标识该接收进程,需要定义两种信息:①主机的地址;②在目的主机中指定接收进程的标识符。
除了知道报文发送目的地的主机地址外,发送进程还必须指定运行在接收主机上的接收进程(更具体地说,接收套接字)
可供应用程序使用的传输服务
套接字是应用程序进程和运输层协议之间的接口。在发送端的应用程序将报文推进该套接字。在该套接字的另一侧,运输层协议负责从接收进程的套接字得到该报文。
可靠数据传输
确保由应用程序的一端发送的数据正确、完全地交付给该应用程序的另一端。如果一个协议提供了这样的确保数据交付服务,就认为提供了可靠数据传输
运输层协议能够潜在地向应用程序提供的一个重要服务是进程到进程的可靠数据传输。当一个运输协议提供这种服务时,发送进程只要将其数据传递进套接字,就可以完全相信该数据将能无差错地到达接收进程。
当一个运输层协议不提供可靠数据传输时,由发送进程发送的某些数据可能到达不了接收进程。这可能能被容忍丢失的应用
吞吐量
沿着一条网络路径上的两个进程之间的通信会话场景中,可用吞吐量就是发送进程能够向接收进程交付比特的速率。其他会话将共享沿着该网络路径的带宽,并且因为这些会话将会到达和离开,该可用吞吐量将随时间波动
运输层协议能够以某种特定的速率提供确保的可用吞吐量。这种服务将在发送和接收进程之间提供机密性,以防该数据以某种方式在这两个进程之间被观察到 。运输协议还能提供除了机密性以外的其他安全性服务,包括数据完整性和端点鉴别
定时
运输层协议也能提供定时保证。
安全性
在发送主机中,运输协议能够加密由发送进程传输的所有数据,在接收主机中,运输层协议能够在将数据交付给接收进程之前解密这些数据
因特网提供的运输服务
TCP服务
在握手阶段后, 一个TCP连接就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接上同时进行报文收发,通信进程能够依靠TCP无差错、按适当顺序交付所有发送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。
拥塞控制
机制,当发送方和接收方的网络发生拥塞的时候,TCP的拥塞控制机制会抑制发送进程。
SSL(Secure Sockets Layer),即安全套接层,是一种安全协议,它为网络(如互联网)通信提供安全及数据完整性保障。SSL在传输层与应用层之间对网络连接进行加密。
SSL协议由两部分组成:SSL握手协议和SSL记录协议。
SSL握手协议:用于在客户端与服务器之间建立安全连接,并确定安全连接所使用的加密套件、加密算法和会话密钥等信息。在握手过程中,服务器会向客户端发送证书以证明其身份,客户端则会对证书进行验证。
SSL记录协议:用于对应用层数据进行封装,并通过SSL握手协议所建立的安全连接进行传输。在封装过程中,SSL记录协议会对数据进行加密、完整性校验和压缩等操作,以确保数据的机密性、完整性和可靠性
SSL 不是与 TCP 和 UDP 在相同层次 上的第三种因特网运输协议,而是一种对 TCP 的加强,这种强化是在应用层上实现的
SSL有它自己的套接字API,这类似于传统的TCP套接字API。当一个应用使用SSL时,发送进程向SSL套接字传递明文数据。在发送主机中的SSL则加密该数据并将加密的数据传递给 TCP 套接字。加密的数据经因特网传送到接收进程中的 TCP 套接字。该接收套接字将加密数据传递给 SSL ,由其进行解密。最后, SSL通过它的SSL套接字将明文数据传递给接收进程
UDP服务
UDP是无连接的,因此在两个进程通信前没有握手过程。UDP协议提供一种不可靠数据传送服务,也就是说,当进程将一个报文发送进UDP套接字时,UDP协议并不保证该报文将到达接收进程。不仅如此,到达接收进程的报文也可能是乱序到达的。
UDP 没有包括拥塞控制机制,所以UDP的发送端可以用它选定的任何速率向其下层网络层注入数据。实际端到端吞吐量可能小于该速率,这可能具因为中间链路的带密受限或因为拥塞而浩成的
因特网运输协议所不提供的服务
应用层协议
应用层协议: 定义了在运行在不同端系统上的应用程序进程如何相互传递报文。
- 交换的报文类型,例如请求报文和响应报文。
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的。
- 字段的语义,即这些字段中的信息的含义。
- 确定一个进程何时以及如何发送报文,对报文进行响应的规则
web和Http
HTTP概况
HTT定义了web客户端向web服务器请求web页面的方式,以及服务器向客户传送Web页面的方式。
HTTP是使用TCP作为支撑运输协议。一旦连接建立该浏览器和服务器进程就可以通过套接字接口访问TCP。
客户端的套接字接口是客户进程与TCP连接之间的门,在服务器端的套接字接口则是服务器进程与TCP连接
服务器从它的套接接口接收 HTTP请求报文和向它的套接字接口发送 HTTP 响应报文。客户向它的套接字接口发送HTTP请求报文并从它的套接字接口接收HTTP响应报文。一旦客户向它的套接字接口发送了一个请求报文,该报文就脱离了客户控制并进入TCP的控制。
HTTP无状态协议是指协议对于事务处理没有记忆能力。这意味着每次HTTP请求都是独立的,服务器不会保留先前的请求信息,也不会将先前的请求与当前的请求关联起来。
服务器向客户发送被请求的文件,而不存储任何关于该客户的状态信息。假如某个特定的客户在短短的几秒内两次请求同一个对象,服务器并不会因为刚刚为该客户提供了该对象就不再做出反应,而是重新发送该对象,就像服务器已经完全忘记不久之前所做过的事一样。因为HTTP服务器并不保存关于客户的任何信息,所以HTTP是一个无状态协议
非持续连接和持续连接
非持续连接: HTTP请求报文和响应报文通过同一个TCP连接发送和接收。
持续连接: 非持续连接的相反形式。HTTP请求报文和响应报文通过不同的TCP连接发送和接收。
采用非持续连接的HTTP
往返时间(RRT): 从发送方发送数据开始,到发送方收到来自接收方的确认(通常是一个ACK报文),总共经历的时间。这个时间包括了数据在传输路径上的所有延迟,比如网络设备的处理延迟、排队延迟、传输延迟(光速限制)以及传播延迟(信号在介质中传播所需的时间)。
缺点
- 必须为每一个请求的对象建立和维护一个全新的连接,对于每个这样的连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量这给Web服务器带来了严重的负担。
- 每一个对象经受两倍RTT的交付时延即一个RTT用于创建 TCP,另一个RTT用于请求和接收一个对象。
采用持续连接的HTTP
在采用HTTP1.1持续连接的情况下,服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。
web缓存
web缓存是代理服务器。当Web客户端(如Web浏览器)请求一个资源时,它会首先检查本地缓存中是否已有该资源的副本。如果找到,它会直接使用缓存的版本而不是从原始服务器重新下载。能够代表初始Web服务器来满足HTTP请求的网络实体。
Web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象的副本。
可以配置用户的浏览器,使得用户的所有HTTP请求首先指向 Web 缓存器。一旦某浏览器被配置,每个对某对象的浏览器请求首先被定向到该Web缓存器。
Web缓存器可以大大减少对客户请求的响应时间,特别是当客户与初始服务器之间的瓶颈带宽远低于客户与Web缓存器之间的瓶颈带宽时.如果用户所请求的对象在Web缓存器上,则Web缓存器可以迅速将该对象交付给用户
步骤
- 浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求。
- Web缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web缓存器就向客户浏览器用 HTTP响应报文返回该对象。
- 如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器(即www.someschool.edu)的TCP连接。Web 缓存器则在这个缓存器到服务器的TCP 连接上发送一个对该对象的HTTP请求。在收到该请求后,初始服务器向该Web缓存器发送具有该对象的 HTTP 响应。
- 当Web 缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览器用HTTP响应报文发送该副本(通过现有的客户浏览器和Web缓存器之间的TCP连接)。
因特网中的电子邮件
SMTP 使用TCP进行可靠数据传输服务,从发送方的邮件服务器向接收方的邮件服务器发送邮件。
运行在发送方邮件服务器的客户端和运行在接收方邮件服务器的服务器端每台邮件服务器上既运行SMTP的客户端也运行SMTP的服务器端。当一个邮件服务器向其他邮件服务器发送邮件时,它就表现为SMTP的客户:当邮件服务器从其他邮件服务器上接收邮件时,它就表现为一个 SMTP的服务器。
SMTP
步骤
- Alice 调用她的邮件代理程序并提供Bob的邮件地址(例如 bob@someschool.edu),撰写报文,然后指示用户代理发送该报文。
- Alice的用户代理把报文发给她的邮件服务器,在那里该报文被放在报文队列中。
- 运行在Alice的邮件服务器上的SMTP 客户端发现了报文队列中的这个报文,它就创建一个到运行在Bob的邮件服务器上的SMTP服务器的TCP连接。
- 在经过一些初始SMTP握手后,SMTP客户通过该TCP连接发送Alice的报文。
- 在Bob的邮件服务器上,SMTP的服务器端接收该报文。Bob的邮件服务器然后将该报文放入Bob的邮箱中。
- 在Bob方便的时候,他调用用户代理阅读该报文。
SMTP用的是持续连接:如果发送邮件服务器有几个报文发往同一个接收邮件服务器,它可以通过同一个TCP连接发送这些所有的报文。对每个报文,该客户用一个新的MAILFROM:crepes.开始,用一个独立的句点指示该邮件的结束,并且仅当所有邮件发送完后才发送 OUIT。
和http的对比
HTTP主要是一个拉协议(pullprotocol)即在方便的时候,某些人在 Web服务器上装载信息,用户使用HTTP从该服务器拉取这些信息
SMTP基本上是一个推协议,即发送邮件服务器把文件推向接收邮件服务器。
邮件访问协议
难题是: Bob的用户代理不能使用SMTP得到报文,因为取报文是一个拉操作,而SMTP协议是一个推协议。
解决这个问题的协议有: POP3, IMAP和HTTP
POP3
POP3协议默认端口为110,默认传输协议为TCP,适用的构架结构为C/S,访问模式为离线访问。POP3协议规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件,是因特网电子邮件的第一个离线协议标准。
当用户代理(客户)打开了一个到邮件服务器(服务器)端口110上的TCP连接后,POP3就开始工作了。随着建立TCP连接,POP3按照三个阶段进行工作:特许、事务处理以及更新。在第一个阶段即特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户。在第二个阶段即事务处理阶段,用户代理取回报文;同时在这个阶段用户代理还能进行如下操作,对报文做删除标记,取消报文删除标记,以及获取邮件的统计信息。在第三个阶段即更新阶段,它出现在客户发出了quit命令之后,目的是结束该POP3会话;这时,该邮件服务器删除那些被标记为删除的报文。
IMAP
IMAP是一个双向的通信协议,允许用户在邮件服务器上直接管理邮件,而不仅仅是下载邮件到本地设备。
IMAP服务器把每个报文与一个文件夹联系起来;当报文第一次到达服务器时,它与收件人的INBOX文件夹相关联。收件人则能够把邮件移到一个新的、用户创建的文件夹中,阅读邮件,删除邮件等。IMAP协议为用户提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命令。IMAP还为用户提供了在远程文件夹中查询邮件的命令,按指定条件去查询匹配的邮件。值得注意的是,与POP3不同,IMAP服务器维护了IMAP会话的用户状态信息,例如,文件夹的名字以及哪些报文与哪些文件夹相关联。IMAP的另一个重要特性是它具有允许用户代理获取报文某些部分的命令。
IMAP是互联网消息访问协议,它用于在客户端(如电子邮件客户端软件或移动设备)和邮件服务器之间访问和管理电子邮件。与POP3不同,IMAP是一个双向的通信协议,允许用户在邮件服务器上直接管理邮件,而不仅仅是下载邮件到本地设备。
IMAP协议的主要特点包括:
双向通信:IMAP允许客户端和服务器之间进行双向通信,因此客户端可以实时查看服务器上的邮件状态(如新邮件、已读/未读状态等)。
邮件同步:由于IMAP在服务器上管理邮件,因此无论用户从哪个设备登录,他们都可以看到相同的邮件列表和状态。这意味着用户可以在多个设备之间无缝切换,而无需担心邮件同步问题。
文件夹支持:IMAP支持在服务器上创建、重命名和删除文件夹(通常称为“邮箱”或“标签”),以及在这些文件夹之间移动邮件。
搜索和排序:IMAP提供了强大的搜索和排序功能,允许用户根据各种条件(如发件人、主题、日期等)快速找到邮件。
离线访问:虽然IMAP主要是为在线访问设计的,但许多电子邮件客户端也支持IMAP的离线访问模式。这意味着用户可以在没有网络连接的情况下查看和编辑邮件,并在稍后同步到服务器。
安全性:IMAP支持通过SSL/TLS加密连接,以确保数据传输的安全性。
IMAP的默认端口通常为143(未加密)或993(SSL/TLS加密)。IMAP协议通常与SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)一起使用,SMTP用于从客户端向服务器发送邮件。