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

1,272 阅读25分钟

前言

  • 这是关于计算机网络的一系列专题,后续会不断更新。
  • 学习资料来源于 《计算机网络》(第七版) 和《图解HTTP》
  • 本篇文章主要分享应用层下面的几个协议:DNS域名解析;FTP文件传输协议;DHCP动态主机配置协议;电子邮件的SMTP,POP3协议
  • 至于HTTP协议作为重中之重,会单独留篇幅来分享。

应用层

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

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

域名系统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解决的问题:如何准确定位找到所需的文件块?若有多个请求,我先给谁?或者先给哪一个文件块?这个就不展开仔细讲了。

下一篇讲HTTP协议。如果对你有帮助,麻烦点赞加关注哦!