计算机网络中的应用层-阿里云开发者社区

开发者社区> 人工智能> 正文

计算机网络中的应用层

简介: http,smtp

还是和之前一样,首先还是要明确一个问题——应用层是干什么的?

#应用层就是规定了各种应用程序之间如何交流,如何进行数据的传递
那现在回想一下,现在的上网是怎么样个流程?
在浏览器的地址栏中输入baidu.com就可以上网。那在回想我我们之前讲过的IP地址,好像没有出现过类似于这样的。都是要知道一个主机的ip地址才可以进行接下来操作。那怎么输入baidu.com就可以上网呢?这就是我们接下来要说的DNS域名解析系统
DNS域名解析系统

说起来是很简单的,那就是将类似于baidu.com转化为ip地址。那它是怎么解析的?
     那先得从域名的构成说起。例如:www.baidu.com 。域名采用层次树状结构。以.分割,从右向左依次为顶级域名,二级域名,三级域名。这里的域只是一个可被管理的划分区域,还可以继续划分为多个子域。但是域名说到底还人为划分的,并不是实际存在的一块地方,所以域是逻辑概念。
         com就是顶级域名。
        baidu就是二级域名
        www就是三级域名。
   DNS并不要求一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。
    顶级域名还可以分为国家级域名,通用顶级域名,基础结构域名。
    二级域名还可以分为类别域名和行政域名。
     下面是域名树来标示域名的结构  
    ![_2018_11_18_11_58_07](https://yqfile.alicdn.com/9faa67c058b8e383440370f80144d4c3a873e7ae.png)
  </br> 
    对应的解析域名的程序叫做**域名服务器程序**,运行这段程序的机器叫做域名解析服务器。
    域名服务器解析域名的方法是采用划分区的方法来解析域名。所谓分区就是 并不是将所有的下一级的的域名全部都放到一个服务器中,而是            划分为好几个区域,这样做可以提高查询效率。区(zone)就是一一个服务器所负责管辖(或者有权限的)范围。每个区还可以划分为好几个子区域,在这里叫做域。其实这就是概念上的理解,整个互联网都是采用分层的结构。不能让一个服务器频繁的访问被访问,并且在它所管理的下一级域名还特别多 ,就好像一个公司,老板不可能直接管理每个员工,所以就有部分经理来管理,有什么问题再向老板反应。同样的,这里也是这样的道理,划分区,在划分域,每个域中都有一个服务器,管理这个域 中的所有查询,要是不知道就向上一级反应,也就是这区中的服务器。
        还有两个概念明确zz --                递归查询(一般用于本地向本地的域名服务器)-若是主机向本地的服务器查询,若是不知道,那本地的服务器就以dns客户的身份,向其他的根域名服务器查询,以此类推,直到有结果,并不是让主机自己进行下一步的查询。
            迭代查询(一般用于本地服务器向根域名服务器查询),根域名服务器收到本地服务器的查询报文后,有俩选择,要不给出地址,要不告诉本地服务器下一步应该向那个服务器查询。
           其实。现在为了提高DNS的查询效率,并且减轻根域名服务器上的负荷,在域名服务器中都使用了高速缓存来存放查询过的信息和结果况且,为了保证信息的正确,高速缓存都为每个记录都设置有效时间。

那回到我们之前的所讲的。在上网的时候在浏览器中输入baidu.con就可以上上网,但是大家注意了吗?一般在前面还是有www这三个字母的。那www是什么?它是怎么出现的?
www 万维网(world wide web)

它并不是一种特殊的计算机网络,而是一个大规模的。联机式的信息储存所,它有连接的方法能方便的从互联网上的一个站点到另一个 站点。它的出现使的网站的数量大规模增长,是互联网发胀中一个十分重要的里程碑。。
 万维网是一个分布式的超媒体的系统,是超文本的扩充,超文本就是里面包含指向其他文本的链接文本。
它把大量的信息分布在互联网上,每个主机的文档都可以独立运行,一个文档的变动是不可能通知到所有的用户的。所以这就导致了链接失效。它采用cs模型来工作,客户请求,服务器响应一个万维网的文档
(1)那怎么来表示一个万维网文档?
(2)怎么来标示一个文档?
(3)客户发出的请求是那种格式,服务器返回的又是什么格式?
依次来解答——如下
  (1) html语言来表示,在w3c的官方上面有学习资料
   (2) URL(uniform resource locator)来标示。格式如下:
                      <协议>://<主机>:<端口>/<路径>
             一般来说,协议默认是http端口是80,一般都是先访问一个网站的主页,就可以通过不同的链接查找不想要的东西。 
    (3)http(s)协议
           http是基于tcp链接的 ,它就是规定了怎么样向服务器请求文档一个服务器怎么回送文档。所以它是面向事务的。它是基于tcp链接的,所以传送的数据是可靠和安全,完整的,但是同时协议本身是无连接的,就是在使用http协议的两方在通信之前并不要求俩方要建立http连接
          http的报文结构。
                  有两种报文 请求报文 和响应报文
                  a:请求报文(客户机向服务器发送请求)
                  b:响应报文(服务器给客户急的回应)
                  ![image](https://yqfile.alicdn.com/3056e2825c9c92600846340c1a613ab5114bf284.png)
                  ![image](https://yqfile.alicdn.com/10663f49a713030e120e215b1a0e29a2beda9031.png)
                 俩个报文大体都分为
                      开始行:用来区别到底是请求报文还是响应报文
                      首部行:用来说明浏览器,服务器或者报文的一些信息,可以有好几行,也可以没有。
                      主体:在请求报文中可以没有,在响应中也可能没有
                              下面是一个http请求报文的例子:
                                      GET /dir/index.html HTTP/1.1 相对路径的URL
                                      Host: www.kaleidoscope.cn  首部的开始行。给出主机的域名
                                      Connection :close             告诉服务器发送完请求后关闭连接
                                      User-Agent: Mozilla/5.0    表示用户代理使用的firefox
                                      Accept-Language: cn       表示用户希望优先得到中文版
                        响应报文的状态行中的状态码有五大类
                              1XX 表示通知信息,
                              2XX 表示成功
                              3XX 表示重定向 如要晚上请求还要采取的方法
                              4XX 表示客户的差错
                              5XX 表示服务器的差错
  那http是怎么工作的呢?
      每一个万维网网店都有一个服务器进程,它不断的监听TCP的80端口,如是发现有用户的请求,经过tcp的三次握手中的前两次后,之后第三次发送http报文,建tcp连接;浏览器就可以向万维网发送要浏览某个链接页面的请求,服务器就响应请求,并且返回。最后释放tcp连接。

那之前所讲的http是无状态的,什么是无状态呢。并不会记录当前访问者的信息。那么我们在云栖社区上面怎么有自己的主页这些只属于自己的信息呢,服务器是怎么知道当前的访问者是你呢?

    这中就有一个叫做**cookie**的东西。表示http服务器和客户机时间传递的状态信息。当用户在浏览这个云栖网站时,该网站的服务器就会为这个用户产生一个唯一的表示码,用来表示这个用户,并且在给用户的响应报文中有一个叫做set-cookie的字段后,填上标示码。当浏览器收到这个后,就在其管理的cookie文件中添加这个服务器的主机名和标示码,当用户下次浏览这个网站的时候,就把这个cookie发送给服务器,服务器就知道是这个用户来访问了,那就可以在数据库中将这个用户的信息查找出来。   
                  

上面所讲的还是静态网站 静态网站就是内容是不能及时自动更改,要更改就要创作者要更改在服务器中的文档。那这个肯定是不可以的。这就有了动态网站(动态万维网文档)。动态网站是值文档的内容是有浏览器访问服务器的时候才有应用程序来创建的,那当浏览器的请求到达的时候,就需要一段程序,来处理结果,并生成文档 随后服务器返回这个页面并且应该一套规则来规定,浏览器发来的数据是要怎么给这段程序,服务器怎么处理这段程序的输出结果。以及输出结果应该怎么使用

 这个机制叫做通用网关接口CGI(Common Gateway Interface),叫做网关是因为这段程序在运行的时候还可能访问别的程序和服务器资源,数据库, CGI程序的叫做CGI脚本。
随着技术的发胀,上面已经不能满足了,新的问题又出现了。动态万维网文档一旦创建就不能变化了,就不能更改了,比如我要点击一个某个图像然后要观察它的动画效果,之前的就不能满足了。那新的技术出现了叫做**活动万维网文档** 有两种技术来进行浏览器屏幕显示的连续更新
        (a) 服务器推送 ,就是建立tcp连接后不释放连接,服务器一直推送消息来更新。这样做会一直占用资源
        (b)活动文档(active document)这种技术就是把更新的技术给浏览器,在返回的文档中返回一段内嵌代码的HTML,这是,活动文档就可以动态更新。

在继续回想。我们在百度搜索的时候是怎么找的呢?

  这种搜索工具叫做搜索引擎,大体上搜索方式可以分为两种,
        (a)全文检索,通过一段程序在互联网上收集信息,然后建立一个很大的索引关系库,用户输入关键字,程序就在已经建立的数据库中查询,这种数据库并不是在查询的时候创建的,所以这中查询的结果并不是及时的。所以要对数据库进行更新
          (b) 分类目录
              根据网站提交的关键字,通过人工审核后,输入到对应的分类的数据库中,这样做的好处是用户可根据网站设计号的目录有针对性的查询,但是分类查询的并不是内容,而是某个网站的URL。
         新生的搜索技术
             (a)垂直搜索引擎 。为某一特定领域的人提供查询服务
              (b)元搜索引擎:就是搜索引擎的搜索引擎,它把用户提交的查询提交给多个独立的搜索引擎上去

行了,万维网的就说完了

文件传输协议

文件传送协议FTP(file transfer protocol)提供交互式的访问允许用户指明文件的类型,文件的权限
需要讲明的是ftp并不是万维网的部分。是个独立的类型
文件共享有俩种类型
(a):FTP ——基于tcp ,这种访问首先是无差错的,俩计算机之间进行文件的访问,是很复杂的事情,因为俩计算机的存储格式,文件系统,目录结构……都是不相同的。所以FTP做的就是尽可能的消除这种差错,FTP使用cs模型,一个ftp服务器同时为多个用户提供服务,所以,服务器有两大部分组成,一个是主进程(创建进程) 一个是交流进程(传送数据),主要的操作如下:

    用户先服务器发出连接的请求的时候。寻找21端口,同时还要告诉服务器自己的另一个端口号码。用来传送数据,服务器上的和用户创建一个传送数据的进程通过之前告诉的另一个端口号来进行数据的交流。主进程则继续监听21端口。
(b):TFTP ——基于UDP 当然这种访问时很小的,因为没有tcp那样麻烦,TFTP只支持数据的传输而不是交互,可以同时向许多机器传输数据。
他们的共同目的就是复制整个文件,特点是想要存取一个文件,那就要先获得一个本地的文件副本,要是想要修改文件,那就要先对文件的副本修改,然后回传到原来结点。                                         

#远程终端协议
TELNET协议现在用的少了,但是原理还是要讲一讲

  这种协议并不复杂,目的就是消除操作系统之间的差异。用户用这个协议就可连接到远程的主机。 原理就是将数据转换为一种NVT的数据格式,进行传输,然后在另一个主机上解析就好。

电子邮件

大家想想现实中的快递时怎么邮寄的,假设a给b要寄快递,那得到快递站然后邮寄,然后通过快递公司到b的地方,然后那个快递站给b发送消息,b有时间了就去快递站去拿快递。
那在电子邮件中基本时这样的道理。
如下图所示:
image
image

基本的流程就是

1.发件人通过用户代理写邮件,点击发送
2.用户代理使用SMTP协议发送给发送方邮件服务器,
3.发送方邮件服务器的SMTP协议与接收方的邮件服务器 的SMTP服务器建立TCP连接,然后把在缓存队列中的邮件全部发送出去。接收方接受
4.接收方的邮件服务器就将邮件放在收件人的信箱里,等待收件人来取
5。收件人在打算收信时,就使用计算机中的用户代理,在用POP3(或者IMAP)协议读取。
电子信箱的地址如下:
        用户名@ 邮件服务器的域名
   POP3的协议的缺点在于,如果用户从服务器中读取了信件,那就删除。假如一个用户在台式机上读取了信件,那在没有备份的情况下,在笔记本上就没有这份信件,这样是不方便的
  IMAP协议,用户在自己的计算机上就可以操控邮件服务器的邮箱,就想在本地操作一样。所以它一个联机协议,当用户打开时 看到的是邮箱的首部,若要是打开某个邮件时,这个邮件才能打开。缺点是,要是没有下载在本地那本地就没有。 

最后在无聊一下 写一写P2P应用。
p2p就是没有绝对的服务器,大家都是服务器,同时大家也都是客户机。大多数的交互都是使用对等方式进行的
介绍两种p2p的方式
    (a)集中目录服务器的p2p的工作方式
         有名的就是Napster ,原理就是有一个集中管理的目录服务器,里面记录着那个用户有那些文件,它要求安装了Napster的计算机,都要想服务器报告自己有什么东西。当某个文件想要查询什么的时候,就想去问问目录服务器这个东西在哪里,然后去对应的位置去下载。
        (b)全分布式结构的p2p文件共享程序
            使用洪泛法查询。把计算机这种的连接必做洪流,每个计算机都可以加入这个洪流,也可以自愿的退出,当每个计算机加入的时候都要向一个基础设施结点(追踪器)报告自己加入洪流,并且洪流中的每个设备都要隔一段时间要向其报告自己还在洪流中,追踪器就随机的从参与的计算机中选择若干个,并告诉对方的ip地址,也是a就和这些建立连接(这些叫做对等方),就可以交流数据。因为一个对等方可能只是拥有这个文件的一个文件块子集,所以要对等方将文件块列表发过来吗,比对,看自己少什么就让他发送什么东西来。
            那a就要决定哪些文件要传过来?先和对等方中的谁进行通行,先宠幸谁呢?
            第一个问题解决是采用了最稀有优先的技术,就先和拥有a缺少的文件的对等方少的通信。比如a缺少的1和2这俩个文件,有这个文件的对等方很多,那就不急,有2这个文件的对等方很少,那就要先和这些通行
            第二个问题的算法思想就是:凡事最高数据率向a发送数据的对等方,就先通信。具体就是a会持续的测量相邻对等方接受数据的数据率,并且确定最高的4个,接着就发送数据给这4个,每隔十秒钟就要重新测量,然后可能修改这4个,并且a每隔三十秒钟,就要随机的找一个另外的相邻对等方b,并发送数据,这样,a有可能成为b的前四个上传文件的提供者,并且b也有可能向a发送文件。那b也有可能成为a的四个文件的提供者,这样这些对等方相互之间都能够令人满意的速率交换文件块。
    

  

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章