zoukankan      html  css  js  c++  java
  • TCP/IP入门(4) --应用层

    /**

    本篇博客由汗青ZJF整理并发布, 转载请注明出处:

    http://blog.csdn.net/zjf280441589/article/category/1854365

    */

    TCP/IP中的应用层

     

    DNS简介

        域名系统是基于描述名字-地址映射的分布式计算机系统的实现,其作用是提供主机名和IP 地址间的映射关系

        名字到IP地址的解析是由若干个域名Server组成的, 域名Server程序在专设的结点上运行, 运行这些程序的机器成为域名服务器(Domain Server);

     

    1)层次域名空间

     

        Internet采用了层次树状结构的命名方法, 任何一个连接在因特网上的主机或路由器都有一个唯一的层次结构的名字, 即域名;

        域名的结构由标号序列组成, 各标号之间用点分隔开:

        … . 三级域名 . 二级域名 . 顶级域名

        各标号分别代表不同级别的域名;

        域名只是个逻辑概念, 并不代表计算机的物理位置, 变长的域名和使用有助于记忆的字符串来便于人们使用. 而IP地址是定长的32位二进制数字则非常便于计算机处理;

     

    2)域名服务器

        负责域名到IP地址的解析。使用TCP与UDP端口号都是53,主要使用UDP,服务器之间备份使用TCP。

     

    域名服务器的四种类型

        1)根域名服务器: 最高层次的域名服务器。记录着所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器。在因特网上共有13组根域名服务器;

        2)顶级域名服务器: 负责管理在该顶级域名服务器注册的所有二级域名。当收到 DNS 查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的 IP 地址)。

        3)权限域名服务器: 是负责一个区域的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器

        4)本地域名服务器: 当一个主机发出 DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个因特网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器

     

    3)域名的解析过程 

        (1)客户应用程序调用客户端一个称为解析器的库函数,将目的主机的域名作为参数传给解析器;

        (2)解析器通过网络向本地域名服务器53号端口发送一个以UDP数据报封装的 DNS 请求报文,询问与该域名对应的IP地址;

        (3)本地域名服务器查找自己的域名数据库(映射文件),将域名对应的IP地址组成一个以 UDP 数据报封装的 DNS 响应报文,返回给解析器;若在本地域名数据库中查不到,则此域名服务器就暂时成为全球 DNS 中的一个客户,并向其它域名服务器发出查询请求,直至找到能回答请求的域名服务器为止,并将解析结果响应给本地域名服务器;本地域名服务器再将解析结果返回给客户端解析器;

        (4)客户端解析器最终收到响应报文后,再将解析得到的IP地址返回给应用程序。

     

    三种查询方式:

    1)迭代查询

    2)递归查询(少用)

    3)递归与迭代相结合(常用)

     

     

    4)域名高速缓存

        每个域名服务器都维护一个高速缓存,存放最近用过的名字以及从何处获得名字映射信息的记录。可大大减轻根域名服务器的负荷,使因特网上的 DNS 查询请求和回答报文的数量大为减少。 

        为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并处理超过合理时间的项。当权限域名服务器回答一个查询请求时,在响应报文中都指明绑定有效存在的时间值。


    FTP

        FTP(File Transfer Protocol,文件传输协议)使用客户/服务器模式。一个 FTP 服务器进程可同时为多个客户进程提供服务。FTP 的服务器进程由两大部分组成:一个主进程,负责接受新的请求;另外有若干个从属进程,每个从属进程负责为一个客户进行FTP服务

        FTP 使用两条TCP连接来完成文件传输,一条是控制连接,另一条是数据连接。平时控制链接总在端口21等待客户的连接请求,当用户需要传输文件时,客户首先主动与服务器端口21建立一个控制连接,用来传送客户的命令和服务器的应答。客户还会告知服务器自己将用的数据端口号, 控制链接会一直保持到客户与服务器FTP全部通信结束为止

        当客户发出文件下载文件上传列目录的数据传输请求时,服务器端口20主动与客户端告知的数据端口建立数据连接,并在其上传输数据,在该次数据传输完毕后立即关闭数据传输连接

        使用两个连接一方面使协议更加简单和更容易实现;另一方面在传输文件时还可以同时利用控制连接与服务器进行交互(如客户发送请求终止文件传输)。

        关于FTP服务器的详细配置信息,请参考我的博客

        http://blog.csdn.net/zjf280441589/article/details/18868343

     

    TFTP

        TFTP(Trivial File Transfer Protocol,简单文件传输协议)也是用于在远端服务器和本地主机之间传输文件的,相对于FTP,TFTP没有复杂的交互存取接口和认证控制,适用于客户端和服务器之间不需要复杂交互的环境。TFTP协议的运行基于UDP协议,使用UDP端口69进行数据传输。

     

    FTP与TFTP的不同

    传输协议不同

    FTP是基于TCP, TFTP是基于UDP

    端口号不同

    FTP是用21,20, TFTP是69

    速度和安全

    FTP在速度慢但安全性好, TFTP速度快但是安全性不如FTP高

     

     

    WWW/万维网

        WWW以客户/服务器方式工作。使用端口80. 浏览器就是在用户计算机上的WWW客户程序。WWW文档所驻留的计算机则运行服务器程序,也称为WWW服务器。客户程序向服务器程序发出请求,服务器程序向客户程序送回客户所要的WWW文档。

        在万维网客户程序与万维网服务器程序之间进行交互所使用的协议是超文本传送协议 HTTP (Hyper Text Transfer Protocol), HTTP使用TCP 连接进行可靠的传送。HTTP 是面向事务的应用层协议,它是万维网上能够可靠地交换文件(包括文本、声音、图像等各种多媒体文件)的重要基础。

        WWW使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档,使每一个文档在整个因特网的范围内具有唯一的标识符 URL。URL的一般格式

            <协议>://<主机>:<端口号>/<路径> 

        超文本标记语言 HTML (Hyper Text Markup Language)使得万维网页面的设计者可以很方便地用一个超链接从本页面的某处链接到因特网上的任何一个万维网页面,并且能够在自己的计算机屏幕上将这些页面显示出来。

     

    万维网的工作过程:

       <设 URL 为 http://www.tmtpost.com/99682.html>用户点击鼠标后所发生的事件:

        (1) 浏览器分析超链指向页面的 URL。

        (2) 浏览器向 DNS 请求解析 www.tmtpost.com 的 IP 地址。

        (3) 域名系统 DNS 解析出钛媒体服务器的 IP 地址。

        (4) 浏览器与服务器建立 TCP 连接

        (5) 浏览器发出取文件命令:  GET /99682.html

        (6) 服务器给出响应,把文件 99682.html 发给浏览器。

        (7) TCP 连接释放。

        (8) 浏览器显示钛媒体相关网页文件 99682.html 中的所有文本。

     

    HTTP主要特点

        HTTP是面向事务的客户服务器协议。

        HTTP 协议是无状态的(stateless),即不需要记忆交互的当前状态,因为过程简单。

        HTTP 1.0协议是非持续连接。建立TCP连接后,一个HTTP请求过去,一个HTTP响应过来,然后就断开TCP连接。

        HTTP 使用了面向连接的 TCP 向上提供的服务。但 HTTP 协议本身是无连接的。

     

    持续连接

        不同于HTTP/1.0,HTTP/1.1 协议使用持续连接。

        万维网服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的 HTTP 请求报文和响应报文。而且这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。

        目前一些流行的浏览器(如IE 6.0)的默认设置就是使用 HTTP/1.1。

     

    持续连接的两种工作方式

        非流水线方式:客户在收到前一个响应后才能发出下一个请求。虽然这比非持续连接的两倍 RTT 的开销节省了建立 TCP 连接所需的一个 RTT 时间,但服务器在发送完一个对象后,其 TCP 连接就处于空闲状态,浪费了服务器资源。

        流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。一个接一个的请求报文到达服务器后,服务器就可连续发回响应报文。使用流水线方式时,客户访问所有的对象只需花费一个 RTT时间,使 TCP 连接中的空闲时间减少,提高了下载文档效率

     

    HTTP请求报文格式

     

        所谓“方法”就是对所请求的对象进行的操作,因此这些方法实际上也就是一些命令。而且,请求报文的类型是由它所采用的方法决定的。 

     

    HTTP响应报文格式

     

    响应报文的开始行是状态行, 状态行包括三项内容,即 HTTP 的版本,状态码,以及解释状态码的简单短语.


    注: 本系列博客的打包下载地址:http://download.csdn.net/download/hanqing280441589/8574157

  • 相关阅读:
    Jboss
    AOP
    Spring AOP原理及拦截器
    深度解析Struts2中ValueStack
    struts2 ValueStack的作用
    理解ValueStack的基本机制
    Strus2中关于ValueStack详解
    struts2中的值栈对象ValueStack
    吴裕雄--天生自然Numpy库学习笔记:NumPy 广播(Broadcast)
    吴裕雄--天生自然Numpy库学习笔记:NumPy 高级索引
  • 原文地址:https://www.cnblogs.com/itrena/p/5926927.html
Copyright © 2011-2022 走看看