应用层 - 重学计算机网络系列(2)

每个应用层协议都是为了解决 某一类应用 问题,而问题的解决又必须通过位于不同主机中的多个应用进程之间的 通信和协同 工作来完成。应用层的具体内容就是精确定义这些通信规则。具体来说,应用层协议应当定义:

  • 应用进程交换的报文类型,如请求报文和响应报文。
  • 各种报文类型的语法,如报文中的各个字段以及详细描述。
  • 字段的语义,即包含在字段中的信息的含义。
  • 进程何时,如何发送报文,以及对报文进行响应的规则。

域名系统DNS

概述

何为DNS?

域名系统DNS是互联网使用的 命名系统 ,用来把便于人们使用的机器名字装换为IP地址。域名系统就是名字系统。为什么不叫“名字”而叫“域名”呢?是因为在这种互联网的命名系统中使用了许多的“域”。

为什么用户要用域名来访问?

用户与互联网上某台主机通信时, 必须知道对方的IP地址 。然而用户很难记住长达32位的二进制主机地址。域名系统DNS能够把互联网上的主机名字转换为IP地址。

为什么机器在处理IP数据报时要使用IP地址而不使用域名呢?

因为IP地址的长度是固定32位的(如果是IPv6,就是128位),但是域名却不是固定的,机器处理起来很难。

DNS的结构

互联网采用 层次树状结构 的命名方法,并使用 分布式 的域名系统DNS。

互联网的域名系统DNS被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS让大多数名字都在本地进行解析,仅少量解析需要在互联网上通信,因此NDS系统 效率 很高。由于DNS是分布式系统,即便单个计算机出了故障,也不会妨碍整个DNS系统正常运行。

域名到IP地址的解析是由分布在互联网上的许多域名服务器程序共同完成的。域名服务器程序在专设的结点上运行,而人们也常把运行域名服务器程序的机器称为 域名服务器

解析过程

过程如下:当一个应用程序需要把主机名解析为IP地址时,该应用进程就调用解析程序,并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名解析器,本地域名服务器查找后,就返回对应的IP地址。应用进程获得目的的IP地址后即可进行通信。若本地域名服务器无法解析,就向上一层的域名服务器上查找,直到找到。

域名结构

早期因为用户数少,用了非等级的名字空间。但是随着用户急剧增加,采用了层次树状结构的命名方法。

mail.cctv.com中 com 为顶级域名,cctv为二级域名,mail为三级域名。级别最低的写在最左边,而级别最高的顶级域名写在最右边。

DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。各级域名由其上一级的域名管理机构管理,最顶级的域名由ICANN进行管理。用这种方法可以使每个域名在整个互联网范围内是唯一的,并且容易设计出一种查找域名的机制。

  • 通用顶级域名:com(公司企业) net(网络服务机构) org(非营利性组织) int(国际组织) edu(美国专用教育机构) gov(美国政府机构) mil(美国军事机构) 等等共有20个。
  • 国家顶级域名: cn(中国) us(美国) 等等
  • 反向域名:arpa,用于反向解析

域名服务器

理论上,可以让每一级的域名都都有一个相对应的域名服务器,但是这样会造成服务器数量过多,效率降低。所以采用 划分区 的方法来解决这个问题。

一个服务器所负责管辖的范围叫做 。每个区设置相对应的 权限域名服务器 ,用来 保存该区所有域名到IP地址的映射

DNS服务器的管辖范围不是以域为单位,而是以区为单位。区是服务器实际管辖的范围,区可能等于或小于域,但一定不能大于域。一个域下面可能会有一个或多个区。

域名服务器的分类

  • 根域名服务器。最高层次,最重要的域名服务器。
  • 顶级域名服务器。诸如com cn gov 这种的。
  • 权限域名服务器。负责一个区的域名服务器。
  • 本地域名服务器。当一台主机发出DNS查询请求,这个查询请求报文就发送给本地域名服务器。每个ISP,或一个大学都可以拥有一个本地域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离。 当所要查询的主机也同属于同一个ISP时,该本地域名服务器立即就能把要查询的主机名转换为她的IP地址,而不需要去询问其他的域名服务器。

辅助域名服务器

为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中 一个是主域名服务器,其他的是辅助域名服务器 。当主域名服服务器出现故障,辅助域名服务器可以确保工作不会中段。

域名查询的两种方式

  • 递归查询

    假如主机A想访问主机B。主机A输入B的域名后,先是到本地域名服务器查询,查询不到,本地域名服务器以DNS客户的身份代表主机A去访问根域名服务器,若还是查询不到,根域名服务器如法炮制去到下面一级的顶级域名服务器查询,直到拿到主机B的IP地址。然后原路返回,给主机A。

  • 迭代查询

    当根域名服务器收到本地域名服务器发出的请求报文时,要么给出IP地址,要么告诉本地域名服务器“下一步应该向哪一个域名服务器进行查询”,直到有域名服务器给出IP地址。

注意:主机向本地域名服务器查询一般采用递归查询。本地域名服务器向根域名服务器查询通常采用迭代查询。

高速缓存

  • 为了提高DNS查询效率,并减轻根域名服务器的负荷和减少互联网上的DNS查询报文数量,在 域名系统服务器 中广泛使用了高速缓存。高速缓存用来存放 最近查询过的域名 以及从何处获得域名映射信息的记录。
  • 许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且在缓存中找不到名字时才使用域名服务器。

总结DNS解析全过程

  1. 浏览器输入一个地址,按下回车。
  2. 如果地址的信息未写完整,(完整的格式应该是这样: www.baidu.com ::8080),那么现在的浏览器会自动帮你补齐协议号和端口号。
  3. 浏览器得到完整地址会开始解析,获取改地址的协议,各级域名,端口,路径。
  4. 比对存储在本地的 高速缓存 ,如果有,就直接得到IP地址了。
  5. 如果没有,则向 本地域名服务器 发出查询请求。(递归查询)
  6. 如果本地域名服务器没有,那么本地域名服务器会直接向 根域名服务器 (最顶层)发出查询请求。此时,根域名服务器要么给出IP地址,要么告诉本地域名服务器“下一步应该向哪一个域名服务器进行查询”,直到给出IP地址。(迭代查询)

文件传输协议FTP

文件传送协议FTP是互联网上使用最广泛的文件传送协议。

  • FTP提供交互式的访问
  • 允许客户指明文件的类型与格式
  • 允许文件具有存取权限(访问文件的用户必须经过授权,并输入有效的口令)
  • FTP屏蔽了个各计算机系统的系统的细节,因而适合于在异构网络中任意计算机之间传送文件。

特点

  • 基于TCP的FTP和基于UDP的简单文件传送协议TFTP,它们都是文件共享协议中的一大类,即 复制整个文件 。若要存取一个文件,就必须先获得一个本地的文件副本。如果要修改文件只能对文件的副本进行修改,然后再将修改后的文件副本传回到原节点。
  • 联机访问。允许多个程序同时对一个文件进行存取。

FTP基本工作原理

两台主机之间传送文件看似是很简单,往往十分困难。

原因是众多的计算机厂商研制出的文件系统多达数百种,且差别很大。

经常遇到的问题是:

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

文件传送协议FTP只提供文件传送的一些基本的服务,主要功能是 减少或消除在不同操作系统下处理文件的不兼容性

FTP协议分客户端和服务端。一个FTP服务端可以为多个客户端提供服务。

服务端分两类:主进程,从属进程。主进程负责接受新请求,若干个从属进程负责处理单个进程。

客户端和服务端都有两个从属进程: 控制进程和数据传送进程

控制连接会在整个会话期间一直保持打开。

数据连接用来传输文件,传输完成就关闭数据传送连接。

FTP文件传输过程总结

  • 客户端发送请求,服务端提供文件。
  • 客户端和服务端都有两个从属进程: 控制进程和数据传送进程
  • 控制进程会在整个会话期间一直保持打开,表示一直在连接,有点像电路交换。
  • 数据连接用来传输文件,传输完成就关闭数据传送连接。

TFTP简单文件传送协议

它是一个很小且易于实现的文件传送协议。

优点:使用UDP数据报。TFTP代码所占的内存较小。

TFTP只支持文件传输而不支持交互。

发的一方:发完数据后在规定时间内收不到确认就要重复发送数据PDU。

FTP下载文件(通过浏览器方式)

  1. 输入地址:协议+主机号。所以是" ftp://127.0.0.1 " 这种形式的。
  2. 接着会让你登录自己主机的用户名和密码。
  3. 接着进入FTP服务器,选择要下载的文件,保存就可以了。
  4. 用FTP协议下载文件时,自己的浏览器要打开(FTP客户端),同时FTP服务端也会打开让客户端去下载。

电子邮件

概述

1982年,ARPANET的电子邮件问世。

电子邮件最重要的两个标准是: 简单邮件传送协议SMTP和互联网文本报文格式[RFC 5322]

由于互联网的SMTP只能传送可打印的7位ASCII码邮件,因此1993年提出 通用互联网邮件扩充MIME 。MIME在邮件首部中说明了邮件的数据类型(文本,声音,图像等)。在MIME邮件中可同时传送多种类型的数据。

电子邮件系统构成

一个电子邮件系统应由三个主要组成构建:用户代理,邮件服务器,邮件发送协议和邮件读取协议(如POP3)。

发件人用户代理(SMTP客户) -> 发送邮件SMTP -> 发送方邮件服务器(SMTP服务器,SMTP客户) -> 发送邮件SMTP -> 接收方邮件服务器(SMTP服务器,POP3服务器) -> 读取邮件POP3 -> 收件人用户代理(POP3客户)

用户代理

用户代理UA就是用户与电子邮件系统的接口,在大多数情况下它就是运行在用户电脑中的 一个程序 。因此用户代理又称为电子邮件客户端软件。用户代理提供一个很友好的接口(主要是窗口界面)来发送和接收邮件。微软的 outlook 和张小龙的 Foxmail 都是很受欢迎的电子邮件用户代理。

邮件服务器

互联网上有许多邮箱服务器可供用户选择。邮件服务器24小时不间断的工作,并且具有很大容量的邮件信箱。

邮件服务器的功能是发送和接收邮件,同时还要向发件人报告邮件传送的结果(已发送,已拒绝,丢失等)。

邮件服务器需使用两种不同的协议:SMTP用于传送邮件;POP3用于用户代理从邮件服务器读取邮件。

邮件服务器即是客户端,也是服务器。A服务器向B服务器发送邮件,A就是SMTP客户,B是SMTP服务器;反之亦然。

TCP/IP 体系的电子邮箱系统规定电子邮箱地址的格式如下: 用户名 @ 邮件服务器的域名。

SMTP简单邮件传送协议

SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。至于邮件内容格式,邮件如何存储,以及邮件系统应以多快的速度来发送邮件,SMTP未做规定。 SMTP通信三个阶段:建立连接 -> 邮件传送 -> 连接释放 。具体内容就不展开了。

POP3邮件读取协议

邮局协议POP是一个非常简单,但功能有限的邮件读取协议,经过几次更新,现在使用的是1996年版本POP3,它已经成为互联网的正式标准。 另外一个邮件读取协议是IMAP。

最后在强调一下,不要把邮件读取协议POP3或IMAP与邮件传输协议SMTP弄混。发件人的用户代理向发送方邮件服务器发送邮件,以及发送方邮件服务器向接收方邮件服务器发送邮件,都是使用SMTP协议。只有用户代理从接收方邮件服务器上读取邮件才使用POP3。

动态主机配置协议DHCP

背景

连接到互联网的计算机的协议软件需要配置的项目包括:

  • IP地址
  • 子网掩码
  • 默认路由器的IP地址
  • 域名服务器的IP地址

为了省去给计算机配置IP地址的麻烦, 能否在计算机的生产过程中,事先给一台计算机配置好一个唯一的IP地址。(如同每一个以太网适配器拥有一个唯一的硬件的地址)

为什么上个网要这么麻烦?能不被一次性配置好然后永远都可以上网了。

这显然是不行的。这是因为IP地址不仅包括了主机号,而且还包括了网络号。

一个IP地址指出了一台计算机连接在哪一个网络上。当计算机还在生产时,无法知道它在出厂后将被连接在哪一个网络上。因此,需要连接到互联网的计算机,必须对IP地址等项目进行协议配置。

可以人工配置吗?

用人工进行配置很不方便,且容易出错。

动态IP

动态IP指的是在需要的时候才进行IP地址分配的方式。所谓动态就是指当你每一次上网时,电信会随机分配一个IP地址。

由于IP地址资源很宝贵,因此大部分用户上网都是使用动态IP地址的,比如通过Modem、ISDN、ADSL、有线宽频、小区宽频等方式上网的计算机,都是在每次上网的时候临时分配一个IP地址。

IP地址是一个32位二进制数的地址,理论上讲, 有大约40亿(2 的32次方)个可能的地址组合,这似乎是一个很大的地址空间。实际上,根据网络ID和主机ID的不同位数规则,可以将IP地址分为A (7 位网络ID和24位主机ID)、B (14位网络ID和16位主机ID)、C (21位网络ID和8 位主机ID)三类,由于历史原因和技术发展的差异,A 类地址和B 类地址几乎分配殆尽,能够供全球各国各组织分配的只有C 类地址。所以说IP地址是一种非常重要的网络资源。

对于一个设立了因特网服务的组织机构,由于其主机对外开放了诸如 WWW 、FTP 、E-mail等访问服务,通常要对外公布一个固定的IP地址,以方便用户访问 。当然,数字IP不便记忆和识别,人们更习惯于通过域名来访问主机,而域名实际上仍然需要被域名服务器(DNS )翻译为IP地址。例如,你的主页地址,用户可以方便地记忆和使用,而域名服务器会将这个域名翻译为101.12.123.234,这才是你在网上的真正地址。

而对于大多数拨号上网的用户,由于其上网时间和空间的离散性,为每个用户分配一个固定的IP地址(静态IP)是非常不可取的,这将造成IP地址资源的极大浪费。因此这些用户通常会在每次拨通ISP 的主机后,自动获得一个动态的IP地址,该地址当然不是任意的,而是该ISP 申请的网络ID和主机ID的合法区间中的某个地址。拨号用户任意两次连接时的IP地址很可能不同,但是在每次连接时间内IP地址不变。

静态IP

静态IP地址(又称固定IP地址)是长期分配给一台计算机或网络设备使用的 IP 地址。一般来说,一般是特殊的服务器或者采用专线上网的计算机才拥有固定的 IP 地址而且需要比较昂贵的费用。

静态IP是可以直接上网的IP段,该IP在ISP装机时会划分一个IP地址给你,让计算机在连接网络时不再自动获取网络地址,避免了网络连接上的困扰,宽带运营商会提供一根一个IP地址、子网掩码、网关和DNS服务器地址给用户。 在未使用路由器的情况下,只需要把这根入户网线连接到电脑上,并且手动设置电脑上的IP地址,这样电脑才能上网 。静态IP地址不会改变,并且主要用于互联网上的网站应用或服务。一些游戏者和使用VOIP的人往往也倾向于选择静态IP地址,因为沟通更容易。

动态IP地址和静态IP地址相对。其一:为了节省lP资源,通过电话拨号、ADSL虚拟拨号等方式上网的机器是不分配固定IP地址的。而是由ISP动态临时分配,提高lP地址利用率;其二:在局域网中为了客户机设置简便,也常采用动态分配IP地址,这意味着您每次连接互联网时得到的lP地址是不同的。尽管这不影响您访问互联网,但是您的朋友、用户却不能访问到您。因为,他们不知道您的计算机在哪里。这就像每个人都有一部电话,但您的电话号码天天都在改变。

之所以出现了静态IP和动态IP,是因为IP地址不够用。现在需要上网的人太多了,但是现有的技术条件满足不了所有人同时上网。

DHCP

DHCP(动态主机配置协议)是一个局域网的网络协议。指的是由服务器控制一段lP地址范围,客户机登录服务器时就可以自动获得服务器分配的lP地址和子网掩码。默认情况下,DHCP作为Windows Server的一个服务组件不会被系统自动安装,还需要管理员手动安装并进行必要的配置。

它提供一种机制,称为 即插即用连网 。这种机制允许一台计算机加入新的网络和获取IP地址而不用手工参与。

主机连网过程

我们知道要上网的话,主机必须要有IP地址可以。

需要IP地址的主机在启动时就向DHCP服务器广播发送 发现报文(将目的IP设置为全1,即255.255.255.255) 。这时,该主机就成为了DHCP客户。

发送广播报文是因为现在还不知道DHCP服务器在什么地方,所以才要发送发现报文。 这台主机因为还没有IP地址,所以将IP数据报的源IP地址设置为全0.这样在本地网络上的所有主机都能接收到这个广播报文, 但只有DHCP服务器才对这广播进行应答 :DHCP服务器先在其数据库中查找该计算机的配置信息,若找到,则返回找到的信息。若找不到,则从服务器的 IP地址池 中取一个地址分配给该计算机。DHCP服务器的回答报文叫做提供报文,表示提供了IP地址等配置信息。

但是,我们并不愿意在每个网络上都设置一个DHCP服务器,这样会使DHCP服务器的数量太多。 因此现在是使每个网络至少有一个 DHCP中继代理(通常是一台路由器) ,它配置了DHCP服务器的IP地址信息。当中继代理收到主机A的发现报文后,就以单播方式向DHCP服务器转发此报文,并等待其回答。收到DHCP服务器回答后,中继代理再把此提供报文发回主机A。

DHCP服务器分配给DHCP客户的IP地址是临时的,因此DHCP客户只能在 一段时间 内使用这个分配到的IP地址。 DHCP协议称之为租用期,但并未规定租用期应取为多长或至少为多长,这个数值应由DHCP服务器自己决定。

简单总结

  • 请求租约
  • 提供租约 (所有收到请求报文的DHCP服务器都会回应)
  • 选择IP租约 (可能多个DHCP服务器都会收到发现报文,所以才要选择)
  • 确认IP租约 (DHCP服务器发送确认报文)
  • 时间过一半,更新租用期
  • 若DHCP服务器不同意,停止使用原IP,客户需要重新发送发现报文。

DHCP很适合于经常移动位置的计算机。在Windows系统下,控制面板/网络,找到某个连接中的网络下面的菜单,找到TCP/IP协议后, 点击属性按钮,若选择自动获得IP地址和自动获得DNS服务器地址,就表示的是使用DHCP协议。

P2P应用

概述

P2P应用就是指具有P2P体系结构的网络应用,没有固定的服务器,而绝大部分的交互都是使用对等方式(P2P方式)进行的。

P2P文件分发不需要使用集中式的媒体服务器,而所有的音频/视频文件都是在普通的互联网用户之间传输的。

这其实是相当于有很多分散在各地的媒体服务器(由普通用户的计算机充当这种媒体服务器)向其他用户提供所要下载的音频/视频文件。

这种P2P文件分发方式解决了集中式媒体服务器可能出现的瓶颈问题。

具有集中目录服务器的P2P工作方式

最早使用P2P工作方式的是Napster(1999年美国一个大学生写的软件)。利用这个软件可以免费下载各种MP3音乐。

Napster的出现使MP3成为网络音乐事实的标准。

Napster能够搜索音乐文件,能够提供检索功能。所有音乐文件的索引信息都集中存放在Napster目录服务器中,这个服务器起索引功能,使用者只要查找目录服务器,就可以知道应从何处下载MP3文件。

Napster的工作原理

  1. 运行Napster的所有用户,都必须及时向Napster的目录服务器报告自己已经存有哪些音乐文件。
  2. Napster目录服务器就用这些用户信息建立起一个动态数据库,集中存储了所有用户的音乐文件信息(即对象名和向对应的IP地址)。
  3. 当某个用户想下载某个MP3文件时,就向目录服务器发出查询(这个过程依然是传统的客户-服务器方式),目录检索出结果之后向用户返回存放这一文件的计算机IP地址,于是这个用户就可以从中选取一个地址下载想要得到的MP3文件(这个下载过程就是P2P方式)。
  4. 可以看出,Napster的文件传输是分散的(P2P方式),但文件的定位是集中的(客户-服务器方式)

Napster网站于2000年被迫关闭,罪名:间接侵害版权。

具有全分布式结构的P2P文件共享程序

第一代P2P文件共享软件Napster关闭之后,开始出现了以Gnutella为代表的第二代P2P文件共享软件。

G与N最大的区别在于不使用集中式的目录服务器进行查询,而是使用 洪范法 在大量G用户之间进行查询。

为了更加有效的在大量用户之间使用P2P技术下载共享文件,最近几年已经开发出很多P2P文件共享程序,他们使用分散定位和分散传输技术。 如KaZaA,电骡eMulw,比特洪流BT 等。

BT工作原理

BT把从 对等方 下载文件的数据单元称为文件块,一个文件块的长度是固定不变的。

假如一个用户要获取一个文件,(这个用户称之为对等方),一开始它并没有文件块,但新的对等方加入可能使他拥有了一些文件块,并且可以为其他对等方提供数据块。在用户陆续获得多个文件块之后,就可以凑成一整个文件。获取到完整的文件之后,可以选择退出BT(相当于自私的用户),也可以继续留在BT(相当于无私的用户)。可以随时加入或退出,即便某个文件还未完全下载完成,可以以后再加入BT把剩下的文件块再下载完成。

因此,从不同的对等方获得不同的数据块,然后组装成整个文件,一般要比仅从一个地方下载整个文件要快很多。

至于BT解决的问题:如何准确定位找到所需的文件块?若有多个请求,我先给谁?或者先给哪一个文件块?这个就不展开仔细讲了。

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章