【计算机网络】应用层

来源:互联网 发布:白金disco 知乎 编辑:程序博客网 时间:2024/06/01 07:57

因特网作为一个世界范围的网络,其结构功能复杂。首先先来了解一些概念


端系统:我们把个人主机,智能手机,平板电脑,电视等这些设备称为主机或者端系统。

分组:当端系统向端系统发送数据时,发送端系统将数据分段,并为每段加上首部字节,此时的信息称为分组。

分组交换机:端系统通过通信链路和分组交换机组合到一起。分组和交换机有路由器和链路层交换机两种。

ISP(因特网服务提供商):如住宅区ISP,公司ISP,大学ISP等。ISP是由多个分组交换机和多段通信链路组成的网路。为端系统提供接入的ISP是互联的,低层的ISP通过国家的、国际的高层ISP互联起来,高层ISP是由通过高速光纤链路互联的高速路由器组成的。

协议:端系统,分组交换机等因特网部件都要运行一系列协议,控制因特网中信息的接收和发送。最著名的协议有TCP(传输控制协议),IP(网际协议),IP协议定义了在路由器和端系统之间发送和接收的分组格式,TCP则提供了一种可靠的数据传输。

边缘路由器:端系统到任何其他远程端系统的第一台路由器。

协议层次:网络设计者以分层的方式组织协议以及实现这些协议的网络硬件和软件。它提供了一种结构化方式来讨论系统组件。因特网的协议栈由5个层次组成:物理层,链路层,网络层,运输层和应用层。

应用层:网络应用程序及他们的应用层协议存留的地方。应用层协议包括HTTP协议(提供了Web文档的请求和传送),SMTP(提供了电子邮件报文的传输)和FTP协议(提供了端系统之间的文件传送),还有著名的DNS(域名系统)。位于应用层的信息分组称为报文。

运输层:运输协议TCP和UDP被用来运输应用层报文,TCP提供了确保传递和流量控制服务,将长报文分解为短报文并提供拥塞控制机制。UDP则提供无连接服务,没有可靠性,没有拥塞控制等,但是相对的速度也会比较快。运输层分组称为报文段。

网络层:网络层协议包括IP协议。所有具有网络层的因特网组件必须运行IP协议。网络层分组称为数据报。运输层向网络层提供了目的地址,而网络层则对其包装后运输到目的端系统。

链路层:网络层通过一系列路由器传输数据报,为了将分组从一个节点移动到下一个节点,需要依靠链路层的服务。网络层将数据报下传给链路层,链路层沿着路径将数据报传递给下一个节点,在下个节点将数据报上传给网络层。链路层分组称为帧。

物理层:物理层的任务是将帧的一个一个bit从一个节点移动到下一个节点。物理层协议有关于双绞铜线的,有关于同轴电缆的,有关于光纤的……

封装:数据从发送端系统协议栈向下,每经过一层,自身的数据都会被加上一层包装,这样做的原因是,让格式变得统一,方便传输,另外一个原因是,各层协议可以利用首部信息来进行各种各样的处理。到达目的端系统后,我们传输的数据才层层解封,交到目的端系统的应用程序手中。

 

理解网络协议的构成、原理和工作方式就是我们学习计算机网络的过程。我们从上往下地来学习协议栈,首先看看应用层协议。


应用层:

现代网络应用程序两种主流结构为:客户-服务器体系结构对等(P2P)体系结构。

客户-服务器体系结构

一直保持打开并提供服务的主机称为服务器,例如Web服务器,它必须保持打开以接收来自某客户的访问请求并相应。该服务器必须具有众所周知的地址,客户总是能够向该服务器的IP地址发送分组来与其联系。

P2P体系结构:

应用程序在间断链接的主机对之间直接通信。这些主机被称为对等方。这种结构对服务器的负荷压力较小,许多流量密集型应用都采用这种结构,如迅雷和迅雷看看等应用。P2P中的每个对等方自己即从网络中下载数据,同时自身也向其他对等方分发文件,这便是P2P体系结构的自扩展性。

进程通信:

端系统与端系统之间的通信,其实是端系统上的某个进程与端系统上的某个进程的通信。进程通过一个称为套接字(socket)的软件接口发送和接收报文。相当于进程与外界通信的门户。套接字也被称为应用程序与网络之间的API(应用程序编程接口),但应用程序开发者仅可以控制门内的一切,对于门外的运输层协议,我们仅仅可以选择运输层协议,设定几个运输层参数而已。

IP地址:

在因特网中,主机由IP地址标识,它是一个32bit的量并且唯一标识主机。为了向特定端系统发送分组,我们必须定义IP地址,以及目的主机接收进程的标识符(即端口)例如Web服务器用端口80来标识,邮件服务器进程用端口25来标识。

因特网提供了两种运输服务,TCP和UDP;

TCP服务

包括面向连接服务可靠数据传输服务。为了让客户与服务器通信,TCP连接需要经过3次握手来建立连接。并且,TCP能够无差错,按适当顺序交付发送所有的数据。提供拥塞控制机制,能为因特网带来整体好处。

UDP服务

只提供最低限度的服务,它是无连接的,不可靠的,不保证数据到达进程,也可能乱序到达,没有拥塞控制。选择UDP的应用可以获得较快速度,然而需要能够容忍数据丢失,常见的应用有因特网电话,视频会议。


5种重要的应用:Web,文件传输,电子邮件,目录服务,P2P。

Web:

Web的应用层协议是HTTP(超文本传输协议),HTTP由两个程序实现:客户端程序与服务端程序。Web页面可由html文件,jpeg图形,视频片段、java小程序等组成。每个Web页面可以由一个URL地址定位。如http://www.abcdefg.com/picture/1.gif,其中www.abcdefg.com便是主机名,/picture/1.gif是路径名。

Http服务模型:

当用户请求一个Web页面时,浏览器向服务器发出对URL的HTTP请求报文,服务器接收到请求并用包含所需内容的HTTP响应报文进行响应。HTTP使用的运输层协议是TCP,因为他必须是可靠运输的。

持续/非持续连接:

虑一下这样一个场景,当你在淘宝把一大堆东西点进了购物车后,你不小心刷新了一下网页,突然你的购物车就被清空了。Http协议便是这样一种协议,它不会记住刚刚请求的客户,是一种无状态协议。它对每个Http请求都使用一个单独的TCP连接。然而上述场景在现实并不会发生,也就是说,HTTP也可以采用持续连接,即每所有的请求都经过相同的TCP连接发送,我们可以对这些进行配置。在采用持续连接的情况下,比如我们需要请求10张图片,则只需要经过建立一次TCP连接,涉及1次TCP的3次握手过程。而如果使用非持续连接的情况下,请求10张图片需要经过30次握手..(这并不是正常人会进行的行为),哪种方式更快一目了然。

Http请求报文格式

GET /somedir/page.html HTTP/1,1

Host: www.someschool.edu

Connection: close

User-agent: Mozilla/5.0

Accept-language:fr


第一行称为请求行,包括方法字段(主要是GET和POST),URL字段和HTTP版本。

其后的行叫做首部行。首部行指示了各种信息,如Connection:close告诉服务器不使用持续连接,User-agent指示了用户的浏览器类型等。

首部行之后有一个实体主体,当请求行的方法字段为POST时,实体主体包含用户在表单字段中的输入值,如果为GET,实体主体则为空,表单填写的内容加在URL里随URL发送。

HTTP相应报文格式:

HTTP/1.1 200 OK

Connection:close

Date: Tue,09 Aug 2011 15:44:44 GMT

Server:Apache/2.2.3 (CentOS)

Last-Modified:Tue,09 Aug 2011 15:11:03 GMT

Content-Length:6821

Content-Type:text/html

(data data data data …………)


响应报文第一行为初始状态行。显示了协议版本,状态码和相应状态。

常见的有

200 OK:请求成功。

301 Move Permanently 请求的对象已经被永久转移了,新的URL定义在相应报文Location首部行中,客户软件将自动获取新的URL

400 Bad Request: 该请求不能被服务器理解

404 Not Found 被请求的文档不在服务器上

505 Http Version Not Supported 服务器不支持请求报文使用的Http协议版本

其后为首部行,显示了各种信息。

最后是实体主体,服务器响应给客户端的数据在这里出现。

Cookie:

这里的Cookie可不是什么饼干,它是用来http持续连接的一项技术。当使用持续连接时,我们首次访问站点时,可能带上Set-cookie:1234这样的首部行,服务器识别到之后,会在它管理的cookie文件中添加一行包含我们的主机名跟cookie识别码,当我们继续访问该站点时,只要在请求报文中加上Cookie:1234,服务器就能从数据库中提取出该用户的状态,从而实现了持续连接。

Web缓存技术:

如果每次访问服务器同一个网页,而同时跟服务器的物理距离又离得非常远的话,那么每次我们都要相当长的响应时间。利用Web缓存器(一个代理服务器),通常客户与Web缓存器之间有一个高速连接,并且如果用户所请求的对象就在Web缓存器上,那么我们就不必要花费更长的时间去从服务器获取数据。而如果在Web缓存器上没有我们要的数据,这时Web缓存器代替用户去向服务器获取网页后交给用户,并且存到自己的存储空间里以便下次访问时使用。这时有人会想,如果缓存器的网页内容与服务器的实际内容不一样的话,我们获取到的网页不就是个假网页吗?通常代理服务器会保存网页的最近修改日期,在缓存器转发Http请求报文的时候,Web服务器返回的响应报文中带有Last-Modified:日期字段,之后我们再请求该网页,缓存器会使用一个条件GET语句,即加上一项If-Modified-Since:日期。向服务器询问是否该对象在该指定日期后是否已经被修改,如果没有被修改,则通过一个响应报文告诉缓存器可以直接返回该对象给客户端,否则就向服务器请求该网页并更新缓存。Web缓存器从整体上大大减低了Web流量。

文件传输协议:FTP

FTP使用了两个并行的TCP连接来传输文件,一个是控制连接,用于在两主机之间传输控制信息,如用户标识,口令,改变远程目录的命令以及存放和获取文件的命令,另一个是数据连接,用于实际发送数据。当用户主机开始FTP会话时,首先建立控制连接,发送用户的标识和口令,当服务器收到文件传输命令后,就与客户端建立一个TCP数据连接,传输完毕后关闭该连接,如果需要再次传输,则再建立一次TCP数据连接。整个过程中,控制连接只有一次,而数据连接可以有无数次。FTP服务器必须记录用户的状态,对每个进行中的用户会话的状态信息进行追踪。因此服务器能够同时维持的会话总数也变少了。

电子邮箱:

组成成分:用户代理,邮件服务器,SMTP(简单邮件传输协议)

每个邮件服务器管理着若干用户邮箱,邮件服务器之间通过SMTP协议,通过TCP传输和接收邮件。从发送方的用户代理开始,传输到它对应的邮件服务器,再传输到接收方的邮件服务器,再被分发到对应的接收方的邮箱中。SMTP一般不适用中间邮件服务器,一般是直接相连。如果对方邮件服务器关机了,邮件服务器通过维持一个报文队列,通常每隔30粉虫尝试一次发送。

SMTP是一个邮件传输协议,负责传输,但并不能够直接将邮件传输到用户代理,而需要用户代理通过在本地主机上运行邮件客户程序。目前流行的邮件访问协议有POP3(第三版的邮局协议)IMAP(因特网邮件访问协议)以及HTTP

DNS:因特网的目录服务

网络上主机名可以用来标识主机,如www.baidu.com,www.qq.com,这些名字便于记忆也便于被人接受,然而路由器难以处理这种标识,而且主机名不定长,可能包含各种数字字母等,因此。我们使用IP地址来标识主机,IP地址是有4个字节组成的,例如111.0.255.132,每个字节表示0到255的十进制数字,我们能从IP地址中得到主机位于因特网何处的消息。但是我们平常使用的是www.baidu.com这种标识符,而不是111.0.255.123这种标识符,计算机是怎么完成这种转换的呢?答案是通过DNS服务。当我们输入www.baidu.com时,浏览器抽取出主机名www.baidu.com,传给DNS应用客户端,它向DNS服务端发送一个包含主机名的请求,DNS客户端最终收到一份含有对应主机名的ip地址传给浏览器,浏览器便向该IP地址80端口的HTTP服务器进程发起一个TCP连接。


DNS=分布式数据库

面对数量巨大的主机,DNS服务器不可能只有一个,实际上,DNS是一个在因特网上实现分布式数据库的例子。

总共有3种类型的DNS服务器,根DNS服务器顶级域(TLD)DNS服务器权威DNS服务器。事实上还有一种重要的本地DNS服务器,每个ISP都有一台本地DNS服务器。它起着代理的作用。当我们想知道远处主机的IP地址时,我们向本地DNS服务器发送一个查询报文,比如我们查询a.b..scau.edu的,本地DNS服务器向根DNS服务器发送查询报文,根DNS服务器注意到edu后缀,返回负责edu的TLD的IP地址列表,本地DNS服务器再次向TLD发送查询报文,TLD注意到scau.edu后缀,用负责scau.edu的权威DNS服务器的IP地址作为相应。本地DNS再次向权威DNS服务器发送请求报文,scau.edu的权威DNS服务器用a.b.scau.edu的IP地址作为响应,本地DNS服务器再把该地址返回给用户。

DNS缓存:

观察上述过程不用想都知道该DNS的查询过程非常繁琐,因此,本地DNS服务器需要能够提供一种缓存服务来降低响应时间,例如缓存主机名/IP地址对,这样我们每次查询,本地DNS服务器可以直接返回IP地址。本地DNS服务器也能够缓存TLD的IP地址。

假设我们创建了一个公司,我们可以利用注册登记结构,将我们的公司主页的域名输入DNS数据库,之后,人们才能够通过网络来访问你的Web站点。

P2P文件分发:

服务器和对等方使用接入链路与因特网相连,服务器向其他对等方发送文件。如果是客户-服务器体系,服务器必须向n个对等方传输该文件的一个副本。如果是P2P体系结构,对等方可以帮助服务器分发该文件。BitTorrent是一种用于文件分发的流行P2P协议。参与一个特定文件分发的所有对等方的集合被称为一个洪流。文件是通过文件块传输的,典型的文件块长度是256KB。如果某对等方获得了整个文件,那么它可以退出洪流,可以继续为其他对等方服务,协助服务器上载自己已经下载好的文件块。当一个新的对等方加入的时候,它向洪流中的一个基础设施节点追踪器注册自己,并且周期性地通知它自己仍在洪流中。这时该对等方会被分配所有对等方IP的一个子集,并尝试与所有对等方建立并行的TCP连接。这种对等方被称为邻近对等方。通过向邻近对等方询问他们具有的块列表,我们可以对子集还没有的文件块进行请求,而采用最稀缺优先技术,针对最稀缺的块进行下载,可以让稀缺块得到迅速重新分发。总的来说,BitTorrent协议就是一种人越多下载速度越快的协议。

UDP/TCP的套接字编程

可参考本人博客【java总结】TCP/UDP,地址:http://blog.csdn.net/hemk340200600/article/details/55002263

0 0