计算机网络之应用层

应用层

传输层帮助我们有效的实现端到端的可靠通信,但是在进行具体通信之前,我们必须有需要通信的数据,这些数据就是应用层提供给传输层的,应用层给我们每一个用户提供了使用网络的唯一接口。这其中有直接为用户提供服务的网络应用,还有就是为了保证这些服务的网络服务应用

动态主机配置协议

当一个终端接入到Internet以后,必须给终端配置相应的网络信息,比如终端的IP地址、子网掩码、默认网关、默认域名服务等,这些网络资源信息可以自己手动配置,但是对于大部分网络用户来说,不明白手动配置的具体步骤,因此在我们的网络协议中有专门实现自动获取网络资源信息的协议:动态主机配置协议(DHCP)

DHCP的结构

DHCP无中继工作过程

首先,终端需要将请求报文分装成MAC帧:

DHCP报文作为MAC帧的数据字段,源IP地址为全0,因为此时终端还没有IP地址,目标地址为全1的广播地址,同样的,目标的MAC地址也是全1的广播地址,而源MAC地址为终端自己的MAC地址,这个过程的MAC帧信息如下:

终端第一次请求的时候源IP地址、目的IP地址和目的MAC地址位为上述的信息很容易理解,但是为什么在DHCP服务器回复以后,它的这些信息还是和第一次一样呢,这个时候它不是应该已经获取到了自己的网络信息了吗?因为在一个网络中,可能会存在多个DHCP服务器,因此,终端第二次还是需要广播它的信息,而这个MAC帧信息的内容就是它采用的是哪一个DHCP服务器分配的信息,让其它的DHCP服务器也知道,同样DHCP服务器在回复的时候也采用广播的形式,以便让其他的DHCP服务器知道这个网络中的某些信息已经被分配出去了,DHCP无中继工作的详细流程如下:

图中框内内容就是MAC帧中所携带的数据

DHCP有中继工作过程

DHCP无中继器的工作是DHCP服务器和终端同属于同一个VLAN,因此才能通过广播的方式让DHCP服务器就收到终端的请求,但是如果我们对每一个VLAN都要配置一个DHCP服务器,成本就非常的高,因此一般情况下,对于某一个以太网只配置一个DHCP服务器,然后通过路由器让来转发不同VLAN中终端的DHCP请求,这就是DHCP有中继的工作模式。在路由器中,我们会配置DHCP服务器的IP地址,整个工作的流程如下:

在我们的DHCP服务器中,需要配置两个域,分别对应VLAN1和2,然后终端通过广播将请求信息发送到路由器,再由路由器根据已配置的DHCP服务器IP地址去访问DHCP服务器,DHCP服务器可以通过路由器的连接VLAN2的接口知道VLAN2的默认网关地址,因此知道终端是属于VLAN2的,然后从VLAN2所属的域给它分配相应的资源,经过路由器再广播给终端A,在这个过程中,信息需要经过终端A到路由器,然后从路由器到DHCP服务器,同样的,在一个以太网中可能存在多个DHCP服务器,因此和上面一样,在VLAN2中,路由器到终端A终端A到路由器都需要广播相应的信息:

这样,通过DHCP中继过程解决多个VLAN共享一个DHCP服务器的问题。在Internet接入技术中,我们介绍了无线路由器接入网络的两种方式,一种是静态,一种是通过PPPoE协议,今天的DHCP是新的一种接入方法,它主要针对我们的终端

域名解析

域名解析就是一个为我们网络应用提供服务的网络服务应用,要使用相应的网络资源,就要使用IP去访问不同的终端,但在实际使用网络的过程当中,我们并不是直接使用的IP,而是用一个名字来代替一个IP地址,这名字就是域名,为什么域名可以代替IP地址呢,因为在网络中有一个域名系统,由域名系统来实现输入名字和IP地址之间的转换

域名系统(DNS)

虽然我们将32位的IP地址转换成了十进制的方式表示,但是如果每一个人需要去记忆大量这样IP地址,几乎是不可能的,比如现在让你说出网易官网的IP地址,你会一脸茫然;另外,我们主机的IP地址可能随时发生变化,而且还会存在多个主机,因此我们需要用一个别名去替代我们的IP地址,方便我们记忆。现在有数以亿计的域名和主机,所以在网络中如果只有一台域名服务器,域名服务器是完成不了这个工作的,因此我们在网络中的域名服务器不止一台,它们采用分层的结构存在我们的网络当中,那么具体是怎么分层呢?首相我们将我们的域名进行分组:

将不同的域分层一组,同一域的下面在按照不同的域再进行分组,然后形成了一个分层的域名结构:

按照这样的分层结构,我们的每一个分层结构中的结点就对应一个域名服务器:

这表示了我们域名服务器的逻辑结构,在网络中,这些域名服务器的物理位置可以是随意的,因此还需要建立域名服务器之间的关联,在每一域名服务中,都需要记录:

  • 给出完全合格的域名与IP地址之间的绑定关系
  • 给出构成域名系统的一系列域名服务器之间的关联

在域名服务器中给出这些信息的信息结构为:

<名字, 类别, 类型, 值>

  • 名字是用于解析的域名
  • 值是解析结果
  • 类别给出定义类型的实体,目前只有一种类别:IN,表明是Internet。
  • 类型用于说明名字和值之间的关系

例如:

  1. www.abc.com.cn IN A 192.1.1.1 类型A表示域名www.abc.com.cn对应的IP地址为192.1.1.1
  2. com IN NS dns.root 类型NS表示负责域名com的域名服务的完全合格域名,也就是当前域名服务器不能解析该域名,需要到dns.root这个域名服务其中去解析

于是我们在每一个域名服务器中记录相应的信息,构建出我们的域名服务器结构

例如现在我们需要解析www.b.edu的这个域名,整个解析过程为:

  1. 查看缓存区,一般我们的电脑会将近期访问过的域名和对应的IP地址缓存到本地,如果有则直接使用,没有就进行第二步
  2. 查看本地hosts文件,如果有相应的信息,则直接使用
    • Windonws下路径为系统盘/Windows/System32/drivers/etc/hosts
    • macOS下为etc/hosts
  3. 如果hosts文件中没有对应域名的IP地址信息,则开始访问本地配置的DNS服务器(在Windonws和macOS中都可以自己配置,也可以通过DHCP获取),假如本地现在配置的默认域名服务器为:a.com,则终端首先访问a.com服务器,在a.com域名服务器中发现edu对应的域名服务器为dns.root,它的IP地址为192.1.3.7,于是又到dns.root域名服务器,在dns.root域名服务器中发现edu对应的域名服务器为dns.edu,它的IP地址为192.1.4.7,然后以此类推,最后在b.edu域名服务器中找到www.b.edu对应的IP地址为192.1.5.2,这就是域名解析的整个过程,域名解析过程有两种方式:
    • 递归:是指域名服务器一个一个查找后再一个一个返回到第一个域名服务器返回给终端
    • 迭代:由第一个域名服务分别去迭代访问

命令查询IP地址

在macOS中,可以通过dig 域名命令通过DNS服务器查询域名的的IP地址

返回的信息比较完整,可以使用dig +short 域名,就只会返回域名的IP地址信息,另外的一些dig命令有:

$ dig @8.8.8.8 baidu.com  // 在域名服务器8.8.8.8中查找baidu.com的IP地址
$ dig -x 192.30.252.153   // 查询ip地址192.30.252.153的域名
$ nslookup                // 用于交互性查询域名记录
$ whois                   // 查询域名的注册信息

DNS和其他网络应用的关系

比如我们的浏览器,在输入域名以后,首先会使用DNS来解析我们的域名,然后再进行接下来的通信,因此DNS为其他网络应用提供服务,是其他网络应用的基础

应用层其他网络应用

在应用层中,还不止我们上面介绍的这两种网络服务应用,比如还有HTTP,邮件协议中的SMTP、POP3、IMAP4以及文件传输协议等,还有一些其他的网络应用也分别通过自己规则实现了不同功能的网络应用,例如QQ、360等等

坚持原创分享,您的支持将鼓励我不断前行!