• TCP/IP详解之:IGMP和DNS


    第13章 IGMP:Internet组管理协议

    IGMP用于支持主机和路由器进行多播;

    IGMP是IP层的一部分,IGMP报文通过IP数据报进行传输:

    TCP_IP:IGMP

    IGMP报文长度为固定8 Byte:

    IGMP(Internet组治理协议)报文及协议(图二)

    报文中,IGMP类型为1表示由多播路由器发出的查询报文,为2说明是主机发出的报告报文;

    加入一个多播组

    多播的基础就是一个进程的概念,该进程在一个主机的给定接口上加入了一个多播组;

    主机通过组地址接口来识别一个多播组;

    主机必须保留一个,此表中包含所有至少含有一个进程的多播组以及多播组中的进程数量。

    IGMP报告和查询

    多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况。使用规则如下:
        1) 当第一个进程加入一个组时,主机就发送一个IGMP报告。假如一个主机的多个进程加入同一组,只发送一个IGMP报告。这个报告被发送到进程加入组所在的同一接口上。
        2) 进程离开一个组时,主机不发送IGMP报告,即便是组中的最后一个进程离开。主机知道在确定的组中已不再有组成员后,在随后收到的IGMP查询中就不再发送报告报文。
        3) 多播路由器定时发送IGMP查询来了解是否还有任何主机包含有属于多播组的进程。多播路由器必须向每个接口发送一个IGMP查询。因为路由器希望主机对它加入的每个多播组均发回一个报告,因此IGMP查询报文中的组地址被设置为0。
        4) 主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报告。

    使用这些查询报文和报告报文,多播路由器对每个接口保持一个表,表中记录接口上至少还包含一个主机的多播组。当路由器收到要转发的多播数据报时,它只将该数据报转发到还拥有属于那个组主机的接口上。

    图13-3显示了两个IGMP报文,一个是主机发送的报告,另一个是路由器发送的查询。该路由器正在要求那个接口上的每个主机说明它加入的每个多播组。

    IGMP(Internet组治理协议)报文及协议(图三)

    第14章 DNS:域名系统

    DNS是一种用于TCP/IP应用程序(跟OS内核无关,完全是应用程序的事!)的分布式数据库,其提供主机名和IP地址之间的转换,以及有关电子邮件的选路信息;

    对DNS的访问是通过地址解析器完成,此解析器通常是应用程序的一部分,其并不像TCP/IP协议那样是OS的内核。OS内核中的TCP/IP协议族对于DNS一点都不知道

    DNS基础

    DNS具有层次结构:

    顶级域名被分成三个部分:

    1) arpa是一个用作地址到名字转换的特殊域
    2) 7个3字符长的普通域。也称组织域
    3) 所有2字符长的域均是基于 ISO3166中定义的国家代码,这些域被称为国家域,或地理域

    一个独立管理的DNS子树称为一个区域 (zone)。一个常见的区域是一个二级域,如noao.edu。许多二级域将它们的区域划分成更小的区域。如,大学可能根据不同的系来划分区域,公司可能根据不同的部门来划分区域。

    DNS中域名的授权由网络信息中心NIC委派的授权机构来执行,一旦一个区域的授权机构被委派后,由它负责向该区域提供多个名字服务器。当一个新系统加入到一个区域中时,该区域的DNS管理者为该新系统申请一个域名和一个 IP地址,并将它们加到名字服务器的数据库中。

    一个名字服务器负责一个或多个区域。一个区域的管理者必须为该区域提供一个主名字服务器至少一个辅助名字服务器。主、辅名字服务器必须是独立和冗余的,以便当某个名字服务器发生故障时不会影响该区域的名字服务。

    主、辅名字服务器的主要区别在于主名字服务器从磁盘文件中调入该区域的所有信息,而辅名字服务器则从主服务器调入所有信息。我们将辅名字服务器从主服务器调入信息称为区域传送。当一个新主机加入一个区域时,区域管理者将适当的信息(最少包括名字和IP地址)加入到运行在主名字服务器上的一个磁盘文件中,然后通知主名字服务器重新调入它的配置文件。辅名字服务器定时(通常是每隔 3小时)向主名字服务器询问是否有新数据。如果有新数据,则通过区域传送方式获得新数据。

    当一个名字服务器没有请求的信息时,它将如何处理?它必须与其他的名字服务器联系。(这正是DNS的分布特性)。然而,并不是每个名字服务器都知道如何同其他名字服务器联系。相反,每个名字服务器必须知道如何同根的名字服务器联系。所有的主名字服务器都必须知道根服务器的IP地址(这些IP地址在主名字服务器的配置文件中,主服务器必须知道根服务器的IP地址,而不是它们的域名)。根服务器则知道所有二级域中的每个授权名字服务器的名字和位置(即IP地址)。这意味着这样一个反复的过程:正在处理请求的名字服务器与根服务器联系,根服务器告诉它与另一个名字服务器联系。

    DNS报文
    查询报文+响应报文

    1 关于DNS查询报文中的问题部分(即上图中的“查询问题”字段)
    查询名:即要找的名字,如:
    查询类型:

      最常用的查询类型是A类型,表示期望获得查询名的IP地址;而PTR查询则请求获得一个IP地址对应的域名,这是一个指针查询

    2 DNS响应报文中的资源记录部分(即图14-3中的“回答”、“授权”、“附加信息”字段)


    指针查询方式
    即给定IP地址,返回与该地址对应的域名

    资源记录



    高速缓存
    DNS的一个基本特性是使用超高速缓存。即当一个名字服务器收到有关映射的信息(主机名字到IP地址)时,它会将该信息存放在高速缓存中。这样若以后遇到相同的映射请求,就能直接使用缓存中的结果而无需通过其他服务器查询。 

    特别注意:高速缓存是针对名字服务器的,即高速缓存是由名字服务器维护的,而非名字解析器!


    用UDP还是TCP

    DNS名字服务器使用的熟知端口号无论对UDP还是TCP都是53。但DNS主要使用UDP,但以下两种情况DNS也使用TCP:

    情况1:

      当名字解析器发出一个查询请求,并且返回响应中的TC(删减标志)比特被设置为1时,它就意味着响应的长度超过了512个字节,而仅返回前512个字节。在遇到这种情况时,名字解析器通常使用TCP重发原来的查询请求,它将允许返回的响应超过512个字节。既然T C P能将用户的数据流分为一些报文段,它就能用多个报文段来传送任意长度的用户数据。

    情况2:

      当一个域的辅助名字服务器在启动时,将从该域的主名字服务器执行区域传送。我们也说过辅助服务器将定时(通常是 3小时)向主服务器进行查询以便了解主服务器数据是否发生变动。如果有变动,将执行一次区域传送。区域传送将使用 TCP,因为这里传送的数据远比一个查询或响应多得多。




      

  • 相关阅读:
    机器学习经典聚类算法 —— k-均值算法(附python实现代码及数据集)
    机器学习经典分类算法 —— k-近邻算法(附python实现代码及数据集)
    linux进程间通信之消息队列
    Linux下的权限掩码umask
    AVL树的插入操作(旋转)图解
    二叉搜索树的插入与删除图解
    MySQL密码忘记之解决方法
    C++之类的构造函数,不得不学明白的重点
    C++编译器的函数名修饰规则
    递归和尾递归的比较,斐波那契
  • 原文地址:https://www.cnblogs.com/hansonwang99/p/5023071.html
Copyright © 2020-2023  润新知