计算机网络知识回顾----应用层

    趁着这个学习的势头,将应用层的知识整理下。  在初次学习时,这一块的知识老师教的是比较的粗略的。现在看来这并不是一个十分明智的决定。  应用层绝不是一个简单的层次。   只有比较系统的学习应用层的知识,在实践过程中我们的疑惑才会具有清晰的思路,才会对一个知识点就一定的认识深度!

     应用层:

          每个应用层协议都是为了解决某一类应用问题,而问题的解决又必须通过位于不同主机中的多个应用程序之间的通信和协同工作来完成的。

          应用层协议应当定义:

           应用程序交换的报文类型,如请求报文和响应报文;

           各种报文类型的语法,如报文中的各个字段极其详细含义。

           字段的语义,即包含在字段中的含义。

           进程何时,如何发送报文,以及对报文进行响应的规则。

    域名系统DNS:

            早在ARPANET时代,整个网络上只有数百台计算机,那时使用一个叫做hosts 的文件, 列出所有主机名字和相应IP地址。 只要用户输入一个主机名,计算机就可以很快的把这个主机名字转换成极其能够识别的二进制IP地址。

             需要注意,DNS在1983年就决定采用了梳妆命名的方式进行命名,这说明了它并不是为了万维网的服务而存在的。  切切, 因为我们经常使用域名去访问网站,长久以来很容易造成这样的一个误区。 此外,能够通过ping 域名的方式通信,也证明了这一点。

            在一定程度上,我们可以将域名与IP地址等价。 对于计算机而言,认证的域名与IP具有同等效果。

             因特网的域名系统被设计成一个联机分布式数据库系统,并采用客户-服务器模式。  DNS使大多数名字都在本地进行解析,仅少量解析需要在因特网上通信。

              DNS的工作模式:

                 当某一个应用程序需要把主机名解析成IP地址时,该应用程序便调用解析程序,并成为DNS的一个客户,将待解析的域名放在DNS请求中,以UDP的方式法给本地域名服务器。  本地域名若查找到域名,便将ip地址放入回答报文。  若找不到,则此域名服务器就暂时成为另一个域名服务器的客户,并发送查询请求,循环这个过程直到完成业务逻辑。 

               需注意,常说的13大根域名服务器绝不是仅仅由13个机器组成,而是十三套装置。

  文件传送协议FTP:

       网络环境中的一项基本任务就是将文件从一台计算机中复制到另一台计算机中。(对计算机而言,距离是透明的)。 

       文件传输面临的问题:

             计算机存储格式的不同;

             文件的目录结构和文件命名的规定不同。

             对于相同的文件存取功能,操作系统使用的命令不同。

             访问控制方法不同。

      FTP的工作模式:

           FTP使用客户服务器模式。一个FTP服务器进程可同时位多个客户进程提供服务。 FTP的服务进程由两个部分组成: 一个主进程,负责接收新的请求; 另外有若干个重属进程,负责处理单个请求。

            主进程的工作步骤:  打开熟知端口21,使得客户能够连接上---》 监听客户进程发出的连接请求---》 启动从属进程来处理客户进程发出的请求---》 回到监听状态。

        当客户进程向服务器进程发出建立连接请求的时候,要寻找服务器的数值端口21,同时告诉服务器进程自己的另一个端口号码,用于建立数据传送连接。   接着,服务器进程用自己传送数据的熟知端口20与客户进程所提供的端口号码建立数据传送连接。 因此,数据连接与控制连接采用了不同的端对端链路,不会发生混乱。 

远程终端程序TELNET:

      TELNET简介: 

                  一个远程终端协议,也是因特网的正式标准。 用户使用 TELNET 就可以在所在地的主机通过TCP连接注册到远端的一个主机上。 TELNET 将用户的击键传到远地主机,同时将远端主机的输出通过TCP连接返回到用户屏幕。 在PC功能不是很强大的年代,使用的较多。  又被称为 终端仿真协议。  它的工作模式依然是基于客户机服务器模式。

      TELNET针对不同计算机与操作系统适配方案

          TELNET定义了数据和命令通过因特网的方式----网络虚拟终端NVT(Network Virtual Terminal).类似于调制解调器的功能。

万维网WWW:

        本质: 一个大规模的,联机式的信息储藏所。

         解决的问题:

                在因特网范围内区分万维网文档。

                使用何种协议实现万维网的各种链接。

                不同的万维网文档如何在用户层面统一标准,并易用。

                 怎样方便的定位文档。

          问题的解决方式:  分别为: URL,HTTP,HTML,搜索工具!

      HTTP协议介绍

          从层次的角度看,HTTP是面向事务的应用层协议,它是万维网上能够可靠地交换文件(文本,声频,视频,图像,其它二进制文件等)的重要基础。

          HTTP协议是无状态的,这简化了服务器的设计,使得服务器更容易支持大量并发的HTTP请求。

          HTTP/1.0版本的协议中,在TCP连接确认的第三个阶段发送请求报文。  连接完成后该TCP连接即断开。  所谓断开,指的是销毁该次连接的缓存与变量。   所以当大量并发,并且非持续连接的时候服务器开销会增大。

          HTTP/1.1使用了持续连接。 即当一次连接完成后任然在一段时间保持该连接。它有两种工作模式: 流水线 以及非流水线的方式。  它的作用类似于TCP的连续ARQ 的功能。  。。  注意,这里的流水概念是针对单条链路而言的!!

     代理服务器

        代理服务器是一种网络实体,又称为 万维网高速缓存。它将最近的一些请求和响应咱存在本地磁盘中。 当有新的请求与该请求一致,则返回暂存的响应,无需再去因特网上拉取。

     HTTP的报文结构

         HTTP有两类报文结构。请求报文和响应报文!

         HTTP是面向文本的,因此在报文中的每一个字段都是一些ASCII码串,因而各个字段的长度都是不确定的。所以我们应该是可以在请求头与响应头中加一些参数的。 并且即使加错了一些参数,只要对端的服务器不限制,整个交换过程任然是没有问题的。

      cookie:

         RFC 2109 对Cookie进行了定义,规定万维网站点可以使用Cookie来跟踪用户。  cookie由服务端与客户端共同提供支持。  通常,cookie的设置是通过服务器进行的,服务器在响应报文头部加一个Set-cookie的首部,浏览器收到该响应后,会将该Cookie统一管理。  之后的连接浏览器会自觉的在请求报文中带上Cookie请求头。 

        由于Cookie涉及到用户隐私,因此用户有权利拒绝接收Cookie的自由。  在浏览器中用户可自行接受设置接收Cookie的条件。

     HTML:  关于html最有效的说明莫过于浏览器的认识了,我曾今整理的笔记:这里

电子邮件:

      背景:

                   实时通信的电话有两个这样的缺点: 1是通信的主叫方和被叫方必须同时在场。  2是有些电话常常打断人们的工作和休息。 

                 1982年,简单右键传送协议 SMTP(Simple Transfer Protocol) 和因特网文本报文格式问世,email很快风靡。其只能传送可打印的7位ASCII码邮件。

                 1993年,通用因特网邮件扩充MIME(Multipurpose Internet Mail Extensions)声明了邮件的数据类型(如文本,声音,图像,视频等)。 在MIME中可以传送多种类型的数据。

      构成

            一个电子邮件系统具有三个主要的构件:

                    1.用户代理。   运行在客户端的一个进程,如foxmail。 是用户与email的接口。

                    2.邮件服务器。 既然是服务器,这也决定了它必须24小时工作。它的作用是发送和接收邮件,同时反馈邮件传送结果。 需要具备邮件发送协议如SMTP 以及邮件读取协议 如POP3 的支持。  并且它必须能同时充当某一个协议的客户端与服务端角色。

                    3.发送协议SMTP以及 读取协议POP3(Post Office Protocol邮局协议第三版)。  他们分别对应两种不同的工作方式。 SMTP客户端把邮件“推”给SMTP服务器; POP3客户端将邮件从POP3服务端“拉”过来。

        电子信箱的构成

                  由信封和内容两部分构成。  信封地址的组成方式: 用户名@邮件服务器域名。

        SMTP的工作概述: 连接建立;  邮件传送;   连接释放。

        POP3的工作概述: 使用客户机-服务器的方式;  当一个用户从POP服务器读取了邮件,POP服务器就会把该邮件删除。 常见的做法是设置保存时间。  也可以将其持久化。

        基于万维网的电子邮件Webmail:  特点是在用户代理与邮件服务器之间的通信使用HTTP协议而不是SMTP。 

        MIME的组成: MIME标准规定: Content-Type 必须含有两个标识符,即内容类型 和 子类型。 中间用 / 隔开。MIME标准最初定义了7个基本类型,15个子类型。

动态主机配置协议DHCP:

      背景: IP地址不仅包括主机号,还包括网络号。 当计算机出厂时,无法固化IP。 因此,需要连接到因特网,需要进行协议配置。 DHCP提供一种机制实现即插即用联网。 DHCP对于运行客户机与服务器的计算机都适用。

       动态主机协议的运行过程概述

          DHCP使用客户-服务器方式。 需要IP地址的主机在启动时就向DHCP服务器广播发送  发现报文。(将目的地IP地址全为1,即255.255.255.255),这是该DHCP就成为DHCP客户。 发送广播报文的时候还不知道DHCP服务器的地址,因此要发现 DHCP服务器的IP地址。 这个主机目前没有自己的IP地址,因此它将IP数据报的源IP地址设为全0. 这样,在本地网络的所有主机都能够收到这个广播报文,但是只有DHCP服务器才对此广播进行回答。  DHCP服务器先在其数据库中查找该计算机的配置信息。 若找到则返回该配置信息。若找不到,则从服务器的IP地址池中去一个地址分配给该计算机。 DHCP服务器的回答报文叫做提供报文,表示“提供”了该IP地址。

          通常情况下,我们不愿意每个网络都有一个DHCP服务器,这样会使得服务器数量过多。 因此常用的做法是每一个网络至少有一个DHCP中继代理(通常是路由器)。 当DHCP中继收到给广播报文,就以单播形式向DHCP服务器转发该报文,并等待其回答。

          DHCP分配的IP地址是临时的。 将一个地址被分配期间,称为租用期。 值得注意的是,DHCP客户机可以在自己发送的报文中提出对租用期的要求。

简单网络管理协议SNMP:

      背景: 

              网络是一个非常复杂的分布式系统。  这是因为网络上有很多不同厂家生产的,运行这多种协议的节点(主要是路由器)。 而这些节点还在相互通信和交换信息。 网络的状态总是不断变化着。 

      网络管理模型的架构

            管理站,又称为管理器,是整个网络管理系统的核心,通常是个有着良好图形界面的高性能工作站,并由网络管理员直接操作和控制。 

            被管设备 , 可以是主机,路由器,打印机,集线器,网桥或者调制解调器等。 

            网络管理代理程序,简称代理,用于悲观设备与管理站的通信,运行在被管设备中。 

            网络管理协议,又称网管协议。 

        简单网络管理协议的工作模式

            管理程序运行SNMP客户程序, 代理程序运行SNMP服务器程序。在被管对象上运行的SNMP服务器程序不停地监听来管理站的SNMP客户程序的请求。   SNMP由三个部分组成: SNMP本身,惯例信息结构SMI,管理信息库MIB。、

应用进程跨越网络的通信:

       背景: 如果我们有一些特定的应用需要因特网的支持,但这些应用又不能直接使用已经标准化的因特网应用协议(如,以上的应用层协议),那么应当做哪些工作??  通过系统调用应用程序编程接口。 

                 我的思考: 这说明一个问题: 也就是说,我们所开发的任意一个联网的应用,在逻辑上跟这些个标准协议是处于同一个重要级别的。  逻辑地位是等价的!!!!

        详细过程

           当某个应用进程启动系统调用时,控制权就从应用进程传递给了系统调用接口。 此接口再把控制权传递给计算机的操作系统。 操作系统就把这个调用转给某个内部过程,并执行所请求的操作。 内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。 

            现在的TCP/IP协议软件已经驻留在操作系统中。 由于TCP/IP协议族被设计成能运行再多种操作系统的环境中,因此TCP/IP标准没有规定应用程序与TCP/IP协议软件如何对接的细节,而是允许系统设计者能够选择有关API的具体实现细节。  最著名的是美国加利福利亚大学伯克利分校为 Berkeley UNIX 操作系统定义的一种API,它又称为套接字接口;;  ;  windows 形成了一个稍有不同的WinSock; AT&T为其UNIX定义了一种TLI(transport Layer Interface)的API。

            从另一种角度看,计算机之间的通信就是本计算机要读取另一个地点的计算机中的数据,或者要把数据从本计算机写入到另一个地点的计算机中。 这种“读取” 以及“写入” 都需要用到系统调用。 

           再讨论网络编程时,常常把套接字作为应用程序和运输层协议之间的接口。 现在套接字接口已经成为了操作系统内核的一部分。   注意,在套接字以上的进程是受应用程序控制的,而在套接字以下的运输层协议软件则是受计算机操作系统控制。  用户对套接字以下的运输层具有很少的控制,如可以选择运输层协议,以及一些运输层参数仅此而已。 

          当应用程序进行网络通信时,必须首先发出Socket系统调用,请求操作系统为其创建一个套接字。  这个调用的实际效果就是: 请求操作系统将所需要的一些系统资源(存储器空间,CPU时间,网络带宽等)分配给该应用进程。(这也是为什么在java的finally块经常要释放资源的来源吧!!!)。  操作系统为这些资源的总和用一个叫做 套接字描述符 的号码来表示,然后把这个套接字描述符返回给应用进程。     套接字实际上时应用进程为了获得网络通信服务而与操作系统进行交互时使用的一种机制

        TCP连接建立阶段

              当套接字创建后,它的端口号和IP地址都是空的,因此应用进程调用bind 来指明 套接字的本地地址(本地IP和本地端口号)。  客户端也可以不调用bind, 这是操作系统内核会自动分配一个动态端口号(通信结束后收回)。   服务器在调用bind后,还需调用listen将套接字设置为被动方式,一遍随时接收客户的服务请求。 

               当一个客户的请求到来,服务器中的主服务进程M(就是通常所说的服务器进程)调用accept,就为每个新的连接请求创建一个新的套接字,并把这个新创建的套接字的标识符返回给发起连接的客户方。    与此同时,主服务器进程还要创建一个从属服务器进程来处理新建立的连接。  这样,从属服务器进程用这个新创建的套接字和客户进程建立连接,而主服务器进程用原来的套接字继续监听,接收下一个请求。 

               在已建立的连接上,从属服务器进程就使用这个新创建的套接字传送和接收数据。 数据通信结束后,从属服务器进程就关闭这个新创建的套接字,同时这个从属服务器进程也被撤销。 

               当使用TCP协议的客户已经调用了socket创建了套接字后,客户进程就调用connect, 以便和远端服务器建立连接。  在connect系统调用中,客户必须指明远端地址(包括IP地址和端口号)。 

              我的补充: 注意,这里有两个比较容易混淆的概念: 应用程序的端口  以及 Socket描述符。  它们都是逻辑存在的,并且都是用整数表示。 但是二者并没有一毛钱关系。 

         TCP传送阶段: 

              客户和服务器都在TCP连接上使用send系统调用传送数据,使用 recv系统调用接收数据。 通常客户使用send发送请求,而服务器使用send 发送回答。 

               调用send 需要三个变量: 数据要发送的套接字描述符(针对本机而言),要发送的数据地址(针对本机而言),以及数据的长度。  通常 send调用把数据复制到操作系统内核的缓存中。 若系统的缓存已满,send就暂时阻塞,知道缓存有空间存放新的数据。 

               调用recv也需要三个变量: 要使用的套接字描述符(针对本机而言), 缓存的地址以及缓存空间的长度(针对本机而言) 。 

            TCP释放阶段

                 一旦客户或者服务器结束使用套接字,就把套接字撤销。 这时调用 close 系统调用释放连接和撤销套接字。 (抽象的释放和撤销)。

猜你喜欢

转载自blog.csdn.net/qq_36285943/article/details/83590475