计算机网络:应用层

应用层介绍

应用层为用户提供服务,通信是由逻辑连接提供的,这意味着两个应用层假设存在一个假想的直接连接。

标准与非标准

由于应用层是唯一向因特网用户提供服务的层次,所以新的应用协议能够轻松地加入因特网。应用层协议既可以标准化,也可以非标准化。
每个标准协议是一对程序,他们与用户和传输层进行交互。
一个私人公司可以创建一种新的定制非标准应用协议,来和遍布全球的办公室进行通信,公司使用TCP/IP协议簇前4层提供的服务,但不使用任何一个标准应用程序。

应用层模式:客户-服务器模式和对等模式

两个应用程序在应用层彼此交互,根据它们的功能,可以分为客户-服务器模式和对等模式。首先简单介绍一下这两种模式。

传统模式:客户-服务器模式

在这种模式中,服务提供者是一个称为服务进程的应用程序,它不断运行着,等待另一个称为客户进程的应用程序通过因特网建立连接并请求服务。

新模式:对等模式

在这种模式下,不需要一个不断运行且等待客户进程连接的服务器进程,责任在对等点之间分担。计算机可以在这次提供服务,却在下一次接受服务。
举例来说:网络电话、BitTorrent。


下面讨论这两种模式的具体细节。

客户-服务器模式

服务器的生存期是无限的,它应该开启后一直运行,等待客户。客户的生存期是有限的,它通常发送有限的请求给对应的服务器,接收响应然后停止。

应用程序接口(API)

API是应用层中的进程与操作系统之间的指令集,操作系统封装了TCP/IP协议簇的前四层,当通过因特网发送和接收分组时,应用层运行的进程才能够与操作系统通信。有许多通信API被设计出来,最常见的是套接字接口
套接字接口是提供应用层和操作系统间通信的指令集,它是一种抽象,是供应用程序创建和使用的数据结构。

套接字地址

因特网上的一台计算机由IP地址唯一确定,IP地址在现在的因特网版本中是一个32位的整数。然而一台计算机可能有很多客户或服务器进程运行,我们还需要一个16位整数的端口号。套接字地址应该是一个IP地址+一个端口号的组合。

寻找套接字地址

客户和服务器如何寻找一对套接字地址来通信呢?每个站点的情况是不同的。

服务器站点

服务器的本地套接字地址由操作系统提供,服务器进程是标准进程,那么它的端口号是被分配好的,如HTTP被分配的端口号是80,其他进程就不能使用该端口号了。如果服务器进程不是标准进程,那么它的设计者就要在规定范围内选择一个端口号。

服务器的远程套接字地址是建立连接的客户套接字地址。服务器事先不可能知道客户的套接字地址,当客户试图建立连接服务器时,服务器可以知道这个套接字地址。该地址包含在发送给服务器的请求报文中。

换言之,服务器的本地套接字地址是固定的,并且生存期无限,而远程客户套接字地址是会不断改变的。

客户站点

对客户来说,其本地套接字地址也是由操作系统提供的,其IP地址固定,而端口号是每次客户进程需要开始通信时分配给客户进程的一个临时16位整数
客户端的远程套接字地址可以是事先知道的,也可以是由标识符指定的。如URL就是这种标识符,像www.xxx@yyy.com。对此,客户进程需要将这个标识符改成对应的服务器套接字地址。端口号通常是一个已知的端口号,而IP地址可以通过另外一个客户-服务器应用来获得,称为域名系统(DNS)。

使用传输层的服务

一对进程需要使用传输层提供的服务来通信,有三个常见的传输层协议:UDP/TCP/SCTP。下面分别讨论:

UDP协议

UDP协议提供了无连接的、不可靠的数据包服务。无连接服务意味着两个交换报文的终端之间没有逻辑连接,每个报文都是独立的实体,它被封装在一个称为数据报的分组中。
如果应用程序发送小报文,并且简单性和速度要比可靠性更重要,那么可以使用UDP协议。

TCP协议

TCP协议提供面向连接的可靠的字节流传输,TCP要求两个终端首先通过交换一些连接建立分组来建立一个逻辑连接,这个阶段称为握手。这些参数包括要交换的数据分组大小、用于保存数据直到整个报文全部到达的缓冲区的大小。

SCTP协议

SCTP提供了前面两个协议组合的功能,就像TCP一样,SCTP提供了面向连接的可靠的服务,但是它不是面向字节流的,它是像UDP一样面向报文的。
SCTP协议通常适用于那些不但需要可靠性,而且即使网络层连接发生错误也需保持连接不断开的应用。

标准客户-服务器应用

万维网和HTTP

网络客户(浏览器)

很多供应商提供可以解释和显示网页的商业浏览器(browser),它们都使用几乎相同的结构,通常包含三部分:控制程序、客户协议和解释程序。
控制程序接收来自键盘和鼠标的输入并使用客户端程序访问文档。在文档被访问后,控制程序使用解释程序在屏幕上显示文档。
客户协议可以是任何一种协议,如HTTP或FTP。解释程序可以是HTML、Java或JavaScript,这取决于文档的类型。

网络服务器

网页是存储在服务器上的,为了提高效率,服务器通常将被请求的文件存储在内存的缓存中,访问内存比访问磁盘块。

统一资源定位符(URL)

作为文件,网页需要有一个唯一的标识符来和其他网页区别开,为了定义一个网页,我们需要4个标识符:获取网页的协议、主机、端口、路径。

  1. 协议,是我们用来访问网页的客户-服务器程序的缩写,绝大多数情况下是HTTP。
  2. 主机。
  3. 端口。
  4. 路径。路径定义了下层的操作系统中文件的位置和名称,它的格式通常依赖于操作系统。如/top/next/last/myfile

    URL在4个部分之间用3个不同的分隔符,如下所示:

protocol://host/path    //绝大多数情况使用
protocol://host:port/path   //当需要标识出端口号时使用

网上文档

万维网的文档可以分为三大类:静态文档、动态文档和活动文档。

  1. 静态文档:在服务器中创建和存储的固定内容的文档,用户不能改变。它由如下语言编写:超文本标记语言(HTML)、可扩展标记语言(XML)、可扩展样式表语言(XSL)和可扩展超文本标记语言(EHTML)。
  2. 动态文档:当一个请求到达时,网页服务器运行一个应用程序或一个脚本来创建动态文档。
  3. 活动文档,它是在客户站点下载和运行一个程序或脚本。

当服务器从客户端收到请求后,它在给客户端的响应中包含了cookie,客户端浏览器在cookie目录中存储cookie,并根据服务器域名进行分类。
当客户端再次访问服务器时,浏览器在向服务器的请求中包含cookie,使服务器认出该客户端。
cookie的内容从来不让浏览器读取或透露给用户,只由服务器创建并回收。

互联网高速缓存:代理服务器

代理服务器是一台计算机,能够保存最近请求的响应的副本,是Web的高速缓存。代理服务器降低了原服务器的负载,减少了通信量并降低了延迟。

FTP

尽管我们可以使用HTTP传送文件,但是FTP是传送大文件或使用不同格式传送文件的更好选择。
客户有3个组件:用户接口、客户控制进程、客户数据传输进程。服务器有2个组件:服务器控制进程、服务器数据传输进程。

这里写图片描述

在整个交互的FTP会话期间,控制连接始终处于连接状态,数据连接则在每次传输文件时开启然后关闭。
FTP使用两个端口,端口21用于控制连接,端口20用于数据连接。

电子邮件

和HTTP或FTP应用不同,电子邮件是一个单向事务,两个客户的桥梁是介于中间的服务器。
这里写图片描述

用户代理

电子邮件系统的第一个组件是用户代理(UA),它向用户提供服务,如Outlook。

报文传输代理:SMTP

这里写图片描述
可以说,电子邮件需要三组客户-服务器模式完成的,第一组和第二组称为报文传输代理(MTA),第三组称为报文访问代理(MAA)。
MTA的协议就是简单邮件传输协议(SMTP),它在发送方和接收方邮件服务器之间以及两个邮件服务器之间被使用两次。SMTP定义了如何来回发送命令和响应。

报文访问代理:POP和IMAP

SMTP是一个推(push)协议,第三阶段不能使用,第三阶段需要一个拉(pull)协议,客户机从服务器拉出报文,即报文访问代理协议。
目前有两种报文访问代理协议:邮局协议版本3(POP3)和因特网邮件访问协议版本4(IMAP4)。
IMAP4比POP3功能更多。

MIME

电子邮件只能使用NVT 7位 ASCII格式的报文,不能使用中文等其他语言,或者是二进制文件或音频、视频数据。
多用途因特网邮件扩充(MIME)是一个辅助协议,它允许非ASCII数据通过电子邮件传送,实质上是一个转换程序。

TELNET

一个服务器程序可以为相应的客户程序提供特定的服务,然而,在这些客户-服务器程序之上,还需要有一些通用的客户-服务器程序,这些程序允许客户端的用户登录到服务器站点上的计算机并且使用那里的服务。我们把这种通用客户-服务器程序对称为远程登录应用。
原始的远程登录协议之一是终端网络(TELNET),他需要登录名和口令,但它很容易遭到攻击,因为它使用明文发送数据。
更安全的协议是安全人机界面(SHH)。但还是有必要了解一下TELNET。

远程登录

使用远程登录时,用户通过键盘等设备将命令发送给终端驱动程序,本地操作系统接收这些字符,被发送到TELNET客户机,然后被转换成网络虚拟终端(NVT)字符的通用字符集,并被传送到本地的TCP/IP协议堆栈。
NVT形式的命令通过因特网传送到远程机器的TCP/IP堆栈中,然后被传递给操作系统,接着是TELNET服务器。TELNET 服务器将这些字符转换成远程计算机可以理解的字符。由于操作系统只能接收来自终端驱动程序的字符,所以TELNET先把字符传给伪终端驱动程序,然后再发送给操作系统。

网络虚拟终端 NVT

要想访问运行任何操作系统的远程计算机,就需要定义一个通用的接口,称为NVT字符集。通过这个接口,客户TELNET将来自本地终端的字符(数据或命令)转换成NVT形式,然后传递给网络,而服务器TELNET将来自NVT形式的数据或命令转换成远程计算机可接受的形式。

安全Shell(SSH)

如今的安全Shell(SSH)是一个可以用于远程登录和文件传输的多功能安全应用程序,但它原先是被设计来替代TELNET的。
SSH是一个有3个子协议的应用层协议:传输协议、认证协议、连接协议。

这里写图片描述

SSH应用

  1. 远程登录
  2. 文件传输:建立在SSH上用于文件传输的一个应用程序是安全文件传输程序(sftp)。
  3. 端口转发:我们可以使用SSH中可用的安全信道来访问一个原本不提供安全服务的应用程序。SSH端口转发机制创建了一个隧道,属于其他协议的报文可以穿过这个隧道,因此这个机制有时称为SSH隧道

域名系统

为了识别一个实体,TCP/P协议使用IP地址唯一确定一台主机到因特网的连接,然而,人们更喜欢使用名字而不是数字地址。所以因特网需要一种能够将名字映射地址的目录系统。
DNS将信息分布在世界上的很多台计算机中。假设现在我们需要使用文件传输客户端,从服务器上下载文件,具体来说,以下6步将目标主机名映射到IP地址:
1. 用户将主机名传递给文件传输客户端。
2. 文件传输客户端将主机名传递到DNS客户端。
3. DNS客户端向已知的DNS服务器发送附有查询的报文。
4. DNS服务器进行响应,发回客户想要获得的服务器主机的IP地址。
5. DNS客户端将IP地址传输到文件传输服务器。
6. 文件传输客户端使用接收到的IP地址访问目标主机。

这里写图片描述

域名空间

由主机名组成的整体概念叫做域名空间,它是一种层次名字空间,所有的名字由根在顶部的倒置树结构定义,该树最多有128级。

这里写图片描述

标签:树上的每个节点有一个标签,它是一个最多为63个字符的字符串,根节点的符号是空串。
域名:每个结点都有一个域名,一个完整的域名是用点(.)分隔的标签序列,域名总是从结点向上读到根节点。
如:aComputer.bDept.topUniversity.edu.

DNS服务器的层次结构

必须将域名空间所包含的信息存储起来,但只使用一台计算器存储如此大容量的信息,效率低下且不可靠。解决办法是将信息分布在多台称为DNS服务器的计算机中。
一种方法是将整个空间划分为多个基于某一级的域,即服务器层次和域名的层次结构一样。

因特网中的DNS

在因特网中,域名空间(树)被划分为两个部分:普通域、国家域。

这里写图片描述


普通域:
按照已经注册主机的一般行为对主机进行定义,允许14个可能的标签:

aero :航空航天公司
biz :商业或公司
com :商业机构
coop :协作商业组织
edu :教育机构
gov :政府机构
info :信息服务提供商
int :国际机构
mil :军事机构
museum :博物馆
name :私人姓名(个人的)
net :网络支持中心
org :非盈利组织
pro :专业组织

国家域:
国家域部分使用双字母的国家缩写(如us代表美国),第二级标号可以是机构,或由各个国家自己制定。

对等模式

P2P网络

准备共享资源的因特网用户成为对等结点并且组成一个网络,一个感兴趣的对等结点可以连接到存储这个文件的计算机并下载它。

分布式散列表

一个分布式散列表(DHT)根据预先定义的规则将数据分发到一组结点上,每个对等结点负责一系列数据项。

一种流行的P2P网络:BitTorrent

在BitTorrent中,文件共享是在合作过程中完成的,这称为torrent。参加到torrent中的每个对等结点从另一个有文件的对等结点那里下载大文件的块,同时也为其他没有这个文件的结点上传文件块。
参加torrent的所有对等结点的集合称为。群中拥有完整文件内容的对等结点称为种子(seed),只有部分文件并想下载其余部分的对等结点称为寄生虫

套接字接口编程

套接字接口的关键问题是理解套接字在通信中的角色,套接字没有存储待发送或待接收数据的缓冲区,它既不能发送也不能接收数据,套接字只起到一个引用或标签的作用。缓冲区和必要的变量在操作系统中创建。

套接字的数据结构

套接字结构由五个字段组成:

  1. 族:定义了协议簇,通常是PF-INET、PF-INET6(用于下一代因特网)等。
  2. 类型:有四个套接字类型:SOCK_STREAM(用于TCP)、SOCK_DGRAM(用于UDP)、SOCK_SEQPACKET(用于SCTP),以及SOCK_RAW(用于直接使用ISP服务的应用)。
  3. 协议:定义了族中特定协议,对于TCP/IP协议簇这个字段设置为0,因为它是族中唯一的协议。
  4. 本地套接字地址:一个套接字地址是一个结构,它由长度字段、族字段、端口号字段以及IP地址字段构成。
  5. 远程套接字地址:其结构和本地套接字地址相同。

使用UDP迭代通信

这里写图片描述

UDP提供无连接服务器,客户和服务器每一端只使用一个套接字,服务器创建的套接字永远运行,客户端创建的套接字在客户进程结束时被关闭。这里没有连接建立以及连接终止,每个客户发送一个数据报并接收一个数据报。

服务器进程

服务器被动开启,它调用socket函数去创建套接字,然后调用bind函数填充本地套接字地址字段,然后调用recvfrom函数。recvfrom函数会阻塞服务器进程,直到一个客户数据报到达。
当一个数据报到达时,服务器进程解除阻塞并从数据报中抽出数据报。它也抽取发送套接字地址用来在下一步中使用。
在请求被处理后,响应就准备好了,服务器进程调用sendto函数发送响应。
随后,服务器进程开始一个新的迭代,并等待新客户连接。服务器套接字从不关闭。

客户进程

客户进程调用socket函数来创建一个套接字并填充前三个字段。随后调用bind函数填充本地套接字、调用sendto函数发送数据报、调用recvfrom函数。recvfrom函数也阻塞客户进程,直到来自服务器进程的响应到达。
客户进程是有限的,在响应被接收之后,客户进程终止。尽管我们可以使用一个循环来设计发送多个数据报的客户,但是每次循环迭代对于服务器都像一个新的客户。

使用TCP通信

TCP是面向连接的协议,在发送或接收数据之前,需要在客户端和服务器之间建立连接。TCP连接可以是迭代的(一次服务一个客户),也可以是并发的(一次服务多个客户)。

TCP中使用的套接字

TCP服务器使用两个不同的套接字,一个用于连接建立,一个用于数据传输。前者称为监听套接字,后者简单称为套接字
服务器使用监听套接字来监听试图建立连接的新客户,在建立连接之后又创建一个用于和客户交换数据的套接字并且最终终止连接。
客户只使用一个套接字用于建立连接以及数据交换。
这里写图片描述

服务器进程

TCP服务器调用socket和bind函数,创建监听套接字,随后调用listen函数,允许操作系统开始接收客户、完成连接阶段并把他们放入等待被服务的列表。
服务器开始循环,逐一对客户进行服务。

小结

因特网中的应用要么使用客户-服务器模式,要么使用对等模式。在客户-服务器模式中,服务器程序是一个无限程序,客户程序是有限的。
在对等模式中,一个对等结点可以是客户,也可以是服务器。


万维网(WWW)是信息宝库,超文本和超媒体文档通过指针互相连接。超文本传输协议(HTTP)是万维网上用于访问数据的主要协议。


文件传输协议(FTP)是一个TCP/IP客户-服务器应用,它用于从一个节点向另一个结点拷贝文件。它要求提供两个连接:控制连接和数据连接。


电子邮件体系结构包含:用户代理(UA)、报文传输代理(MTA)以及报文访问代理(MAA)。
实现MTA的协议称为简单邮件协议(SMTP),实现MAA的协议有两个:邮局协议版本3(POP3)和因特网邮件访问协议4(IMAP4)。


TELNET是客户-服务器应用,它允许用户登录一台远程计算机,并访问远程系统。


域名系统(DNS)是一个客户-服务器应用,它用唯一的名称标识因特网中的主机。DNS以层次结构组织名字空间。


在对等网络中,对等结点分享各自的资源。对等网络分为中心化和分布式两种。
中心化P2P网络中,目录系统使用客户-服务器模式,但是文件存储和下载是通过对等模式完成的。
在分布式网络中,目录系统以及文件的存储下载都是通过对等模式完成的。

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明 YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明YOLO高分设计资源源码,详情请查看资源内容使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值