首页 > 技术文章 > 计算机网络 - 应用层

linzeliang1222 2020-09-21 22:52 原文

应用层

一、计算机网络体系结构

5层因特网协议栈:应用层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层

7层OSI参考模型:应用层 ->表示层 -> 会话层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层

为什么我们要在计算机网络中分层次?

  • 因为如果两台计算机能够相互通信的话,实际实现起来是非常困难操作的。我们分层的目的就是为了将困难的问题简单化,并且如果我们分层了,我们在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层

  • 如果需要改动设计的时候,我们只需要把变动的层替换即可,并不用涉及到其他的层次。这与我们程序设计中的低耦合是一个概念。

每层作用如下:

  • 物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)

    • 通过电频的高低来传输0和1这样的电信号
  • 数据链路层:将比特组装成帧和点到点的传递(帧Frame)

    • 将无规则的0和一同通过一套规则来分组传输,于是出现了以太网协议。以太网协议规定:一组电信号构成一个数据包,这个数据包称为帧,每一个帧由标头(Head)和数据(Data)两部分组成,标头部分的大小为18字节
  • 网络层:负责数据包从源到宿的传递和网际互连(包PackeT)

  • 传输层:提供端到端的可靠报文传递和错误恢复(段Segment)

  • 会话层:建立、管理和终止会话(会话协议数据单元SPDU)

  • 表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)

  • 应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

每一层的协议如下:

  • 物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)

  • 数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)

  • 网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)

  • 传输层:TCP、UDP、SPX

  • 会话层:NFS、SQL、NETBIOS、RPC

  • 表示层:JPEG、MPEG、ASII

  • 应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

二、DNS域名系统

DNS(Domain Name System)提供了什么服务?

  • 一个由分层的DNS服务器(DNS Server)实现的分布式数据库
  • 使得主机能够查询分布式数据库的应用协议
  • DNS协议是运行在UDP之上,用53号端口

分布式、层次数据库:

  • 根DNS服务器:全球有四百多个根DNS服务器,由13个不同的组织管理,根服务器提供TLD服务器的IP地址。
  • 顶级域(TLD)DNS服务器:顶级域(如:com、org、net和org)和所有的国家顶级域(uk、fr、cn、jp)都有TLD服务器。TLD服务器提供了权威DNS服务器的IP地址
  • 权威DNS服务器:再因特网上具有公共可访问的主机(就是你的服务器主机地址),权威DNS服务器将主机名映射为IP地址
  • 本地DNS服务器:不属于DNS服务器的层次结构,但是也是必不可少的。当我们发出DNS请求时,该请求先被发送到本地DNS服务器,它起着代理的作用

域名解析过程:

假设我们(主机是a.xyz.com)获取www.baidu.com的IP地址,同时本地DNS服务器为dns.xyz.com。首先我们的主机向本地DNS服务器发送一个DNS查询报文(报文包含被查询的主机名),然后本地DNS服务器将该报文转发到根DNS服务器,根DNS服务器发现了com前缀,然后向本地DNS服务器返回com的顶级域(TLD)DNS服务器的IP地址列表。本地DNS服务区再向这些TLD服务器发送查询报文,TLD服务器注意到了baidu.com前缀,然后将负责www.baidu.com的权威DNS服务器的IP地址返回给本地DNS服务器,最后,本地DNS服务器向该IP地址进行发送报文查询,权威DNS服务器返回了www.baidu.com的IP地址给本地DNS服务器,本地DNS服务器再将该DNS发送到我们主机,我们开始访问该IP地址

  • 递归查询过程如下:

  • 迭代查询过程如下:

  • 理论上来讲,任何DNS查询既可以是递归也可以是迭代的。在实践中,查询通常是从请求主机到本地DNS服务器的查询时递归的,其余查询时迭代的

    • 主机向本地域名服务器的查询一般都是采用递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户的身份,向其他根域名服务器继续发出查询请求报文。
    • 本地域名服务器向根域名服务器的查询通常是采用迭代查询:当根域名服务器收到本地域名服务器的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地域名服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地域名服务器进行后续的查询。

三、FTP协议以及端口

文件传输协议FTP(File Transfer Protocol)是世界上使用最广泛的文件传输协议。FTP 提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限

网络环境下复制文件的复杂性:

  • 计算机存储数据的格式的不同
  • 文件的目录结构和文件命名的规定不同
  • 对于相同的文件存取功能,操作系统使用的命令不同
  • 访问控制方法不同

因此,FTP协议出现了。

FTP协议连接过程

  1. 打开熟知端口(端口号为 21),使客户进程能够连接上
  2. 等待客户进程发出连接请求
  3. 启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程
  4. 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并发地进行
  5. 当客户进程向服务器进程发出建立连接请求时,要寻找连接服务器进程的熟知端口 (21),同时还要告诉服务器进程自己的另一个端口号码,用于建立数据传送连接
  6. 接着,服务器进程用自己传送数据的熟知端口 (20) 与客户进程所提供的端口号码建立数据传送连接
  7. 由于 FTP 使用了两个不同的端口号,所以数据连接(20)与控制连接(21)不会发生混乱

FTP是使用了两个TCP连接的

  • 使协议更加简单和跟容易实现

  • 在传输文件时还可以利用控制连接(如:客户发送请求终止传输)

四、DHCP动态主机配置协议

DHCP:DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。互联网广泛使用的动态主机配置协议 DHCP (Dynamic Host Configuration Protocol) 提供了即插即用连网 (plug-and-play networking) 的机制。

  • DHCP是使用UDP协议工作,他的用途如下:

    1. 为内部网络或网络服务供应商自动分配IP地址
    2. 为用户或者内部网络管理员作为对所有计算机做中央管理的手段
    3. 为内部网络用户接受IP租约
  • 并不是每个网络上都有DHCP服务器,这样会使得DHCP服务器的数量太多了。现在是每个网络至少有一个DHCP中继代理,他配置了DHCP服务器的IP地址信息

在生活中,DHCP必不可少,为我们带来了便利,当通过WiFi连上一个陌生的子网,但是我们并没有做重新为主机配置IP地址的工作,这样子就可直接上网!假如没有DHCP协议的帮助:

而在DHCP协议的支持下:

DHCP工作流程

  • DHCP服务器管理着一个包含一系列IP地址的地址池
  • 每当一台新的主机加入时,DHCP服务器就从其当前可用地址池中分配一个任意的地址给它
  • 而每当一台主机离开的时候,其IP地址就被回收到地址池中

五、简单网络管理协议SNMP

简单网络管理协议SNMP(Simple Net Manage Protocol)是TCP/IP协议簇的一个应用层协议

网络管理包括对硬件、软件和人力的使用、综合与协调,以便对网络资源进行监视、测试、配置、分析、评价和控制,这样就能以合理的价格满足网络的一些需求,如实时运行性能,服务质量等。网络管理常简称为网管。

含义:

  • 网络管理协议简称为网管协议。
  • 需要注意的是,并不是网管协议本身来管理网络。网管协议是管理程序和代理程序之间进行通信的规则。

CS模式:

  • 管理程序和代理程序按客户服务器方式工作。
  • 管理程序运行 SNMP 客户程序,向某个代理程序发出请求(或命令),代理程序运行 SNMP 服务器程序,返回响应(或执行某个动作)。

功能:

  • SNMP 最重要的指导思想就是要尽可能简单
  • SNMP 的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。

过程:

  • 整个系统必须有一个管理站
  • 管理进程和代理进程利用 SNMP 报文进行通信,而 SNMP 报文又使用 UDP 来传送。
  • 若网络元素使用的不是 SNMP 而是另一种网络管理协议,SNMP 协议就无法控制该网络元素。这时可使用委托代理 (proxy agent)。委托代理能提供如协议转换和过滤操作等功能对被管对象进行管理。
  • SNMP 定义了管理站和代理之间所交换的分组格式。所交换的分组包含各代理中的对象(变量)名及其状态(值)。
  • SNMP 负责读取和改变这些数值。

六、电子邮件协议SMTP、POP3、IMAP

SMTP是因特网电子邮件中主要的应用层协议,只用TCP可靠数据传输服务,SMTP的端口号是25号。因特网电子邮件的主要组成部分:

  • 用户代理(user agent)
  • 邮件服务器(mail server)
  • 简单邮件传输协议(Simple Mail Transfer Protocol )

邮件发送过程:从发送的用户代理开始,传输邮件到发送方的邮件服务器,再传输到接收方的邮件服务器,然后在这里被分发到接收方的邮箱中。如果用户要读取该邮件时,使用用户名和口令来鉴别用户。

邮件报文格式了解一下即可。。。


POP3(第三版的邮局协议Post Office Protocol - Version 3):

  • POP3是一个极为简单的邮件访问协议(由于其简单,所以权限有限)
  • 当用户打开了一个到邮件服务器的端口110上的TCP连接后,POP3就开始工作了,按照三个阶段:特许、事务处理以及更新

IMAP(因特网邮件访问协议Internet Mail Access Protocol):

  • 允许用户代理获取报文某些部分的命令
  • IMAP协议为用户提供了创建文件夹及移动文件的命令

注意:

  • 不要将邮件读取协议 POP 或 IMAP 与邮件传送协议 SMTP 弄混。
  • 发信人的用户代理向源邮件服务器发送邮件,以及源邮件服务器向目的邮件服务器发送邮件,都是使用 SMTP 协议。
  • 而 POP3 协议或 IMAP 协议则是用户从目的邮件服务器上读取邮件所使用的协议。

七、HTTP超文本传输协议

什么是HTTP?

超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。

HTTP协议就是客户端和服务器交互的一种通迅的格式,可以说,Http就是Web通信的基础。

网站通信的过程:

  • DNS:解析域名获得IP地址

  • HTTP:产生请求的报文数据

  • IP协议:传输数据包,找到接收方目的IP地址

    • IP协议把我们的产生的数据包发送给对方,IP地址指明了节点被分配的地址,但IP地址可能会变换,我们可以使用ARP协议来将IP地址反射为MAC地址。MAC地址是不会更改的,是网卡所属的固定地址。
    • 在找到通信目的地之前,我们是需要不断的中转的,这过程我们称作为:“路由中转”,我们并不知道路由中转了多少次的。因此是不能全面了解到互联网中的传输状况的。
  • TCP协议:将数据可靠的传输到目的地

HTTP协议有哪些方法?

  • GET(常用)

  • POST(常用)

  • OPTIONS

  • DELETE

  • PUT

  • HEAD

  • TRACE

    HTTP提供方法的目的就是为了告知服务器该客户端想进行什么操作。当HTTP请求什么方法的时候,服务器端就会返回它支持什么HTTP方法

HTTP是无状态的协议

每次连接HTTP并不保存关于客户的任何信息,所以HTTP是无状态协议的。这样设计的目的就是为了让HTTP简单化,能够快速处理大量的事务。

但是由于我们经常要知道访问的人是谁,所以出现了Cookie技术

  1. 要是服务器端想要记住客户端是谁,只需要发送一个cookie
  2. 客户端把cookie保存在本地内存中,下次访问服务器时候,浏览器会自动将本地的cookie带给服务器端
  3. 服务器端识别出客户

采用持续连接的HTTP

HTTP1.0时,每进行一次HTTP请求时候就会断开连接,如果内容少,看不出区别,如果一个页面里面包含许多图片,那么加载图片就会频繁断开、建立连接,就很慢了,十分浪费资源。于是,在HTTP1.1中,支持持续连接,服务器在发送响应后保持该TCP连接打开,然后后续的请求和响应报文都可以通过这个TCP连接来进行传输,如果一个页面有多个图片,那么就只需一个TCP连接即可,大大节省资源。

持久连接为“管线化”方式发送成为了可能:在一次HTTP连接里面,不需要等待服务器响应请求,就能够继续发送第二次请求

管线化:HTTP管线化是将多个HTTP请求整批提交的技术,而在发送过程中不需先等待服务器的回应。

提升传输效率

什么是实体主体

  • 实体主体就是作为数据在HTTP中传输的数据

一般地,实体主体可以等价为报文主体,报文主体是HTTP中的一部分

我们如果不使用任何手段,服务器返回的数据实体主体是原样返回的。我们可以使用两种方式来提高传输效率

  • 使用压缩技术把实体主体压小,在客户端再把数据解析
  • 使用分块传输编码,将实体主体分块传输,当浏览器解析到实体主体就能够显示了。

我们如果在下载东西的过程中断了,按照以前我们是需要重新下载的,但是现在可以在中断中继续下载。我们可以使用到获取范围数据,这种叫做范围请求

这种请求只会下载资源的一部分。

  • 比如我的图片下载到一半了,我们只需要下载另一半就可以组成一张完整的图片了。那么请求的时候请求没有下载的一部分即可。

常用状态码:

  • 2XX(一般是请求成功)

    • 200 正常处理
    • 204 成功处理,但服务器没有新数据返回,显示页面不更新
    • 206 对服务器进行范围请求,只返回一部分数据
  • 3XX(一般表示重定向)

    • 301 请求的资源已分配了新的URI中,URL地址改变了。【永久重定向】
    • 302 请求的资源临时分配了新的URI中,URL地址没变【转发】
    • 303 与302相同的功能,但明确客户端应该采用GET方式来获取资源
    • 304 发送了附带请求,但不符合条件【返回未过期的缓存数据】
    • 307 与302相同,但不会把POST请求变成GET
  • 4XX(表示客户端出错了)

    • 400 请求报文语法错误了
    • 401 需要认证身份
    • 403 没有权限访问
    • 404 服务器没有这个资源
  • 5XX(服务器出错了)

    • 500 内部资源出错了
    • 503 服务器正忙

服务器与客户端之间的应用程序

一个HTTP服务器可以拥有多个站点,也就是说:一个HTTP服务器下可以配置多个虚拟主机。当用户访问不同主机的时候,实际上都是访问同一台HTTP服务器。

在客户端和服务器中还有一些用于通信数据转发的应用程序

  • 代理

    • 可以用来缓存数据,当代理缓存了数据以后,客户端就可以直接用代理获取数据
      • 可以用来对网站进行访问控制,获取访问日志记录
  • 网关

    • 能够提供非HTTP请求的操作,访问数据库什么的
  • 隧道

    • 建立一条安全的通信路径,可以使用SSL等加密手段进行通信

HTTP请求报文

  • 报文首部

    • 请求行
    • 请求首部字段
    • 通用首部字段
    • 实体首部字段
  • 空行(\r\n)

  • 报文主体

    常用首部字段:

    • Accept: text/html,image/* 【浏览器告诉服务器,它支持的数据类型】
    • Accept-Charset: ISO-8859-1 【浏览器告诉服务器,它支持哪种字符集
    • Accept-Encoding: gzip,compress 【浏览器告诉服务器,它支持的压缩格式
    • Accept-Language: en-us,zh-cn 【浏览器告诉服务器,它的语言环境】
    • Host: www.it315.org:80【浏览器告诉服务器,它的想访问哪台主机】
    • If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,缓存数据的时间】
    • Referer: http://www.it315.org/index.jsp【浏览器告诉服务器,客户机是从那个页面来的---反盗链
    • User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)【浏览器告诉服务器,浏览器的内核是什么】
    • Cookie【浏览器告诉服务器,带来的Cookie是什么
    • Connection: close/Keep-Alive 【浏览器告诉服务器,请求完后是断开链接还是保持链接】
    • Date: Tue, 11 Jul 2000 18:23:51 GMT【浏览器告诉服务器,请求的时间】

HTTP响应报文

  • 报文首部

    • 响应行
    • 响应首部字段
    • 通用首部字段
    • 实体首部字段
  • 空行(\r\n)

  • 报文主体

    常用首部字段:

    • Location: http://www.it315.org/index.jsp 【服务器告诉浏览器要跳转到哪个页面
    • Server:apache tomcat【服务器告诉浏览器,服务器的型号是什么】
    • Content-Encoding: gzip 【服务器告诉浏览器数据压缩的格式
    • Content-Length: 80 【服务器告诉浏览器回送数据的长度】
    • Content-Language: zh-cn 【服务器告诉浏览器,服务器的语言环境】
    • Content-Type: text/html; charset=GB2312 【服务器告诉浏览器,回送数据的类型
    • Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器该资源上次更新时间】
    • Refresh: 1;url=http://www.it315.org【服务器告诉浏览器要定时刷新
    • Content-Disposition: attachment; filename=aaa.zip【服务器告诉浏览器以下载方式打开数据
    • Transfer-Encoding: chunked 【服务器告诉浏览器数据以分块方式回送】
    • Set-Cookie:SS=Q0=5Lb_nQ; path=/search【服务器告诉浏览器要保存Cookie
    • Expires: -1【服务器告诉浏览器不要设置缓存
    • Cache-Control: no-cache 【服务器告诉浏览器不要设置缓存
    • Pragma: no-cache 【服务器告诉浏览器不要设置缓存
    • Connection: close/Keep-Alive 【服务器告诉浏览器连接方式】
    • Date: Tue, 11 Jul 2000 18:23:51 GMT【服务器告诉浏览器回送数据的时间】

推荐阅读