DNS,P2P,TCP套接字编程

DNS,P2P,TCP套接字编程

DNS

DNS提供的服务

  1. 同一台用户主机上运行着DNS应用的客户机端。
  2. 该浏览器从上述URL中抽取出主机名wWw. someschoo1,edu,并将这个主机名传给DNS应用的客户机端。
  3. 该DNS客户机向DNS服务器发送一个包含主机名的请求。
  4. 该DNS客户机最终会收到一份回答报文,其中含有对应于该主机名的IP地址。
  5. 一旦该浏览器接收到来自DNS的IP地址,它就可以向由该IP地址定位的HTTP服务器发起一个TCP连接。
  • DNS协议运行在UDP之上, 使用53号端口。
  • DNS是:①一个由分层的DNS服务器( DNS server)实现的分布式数据库个允许主机查询分布式数据库的应用层协议
  • 与HTTP、FTP和SMTP协议一样,DNS协议是应用层协议,其原因在于:
    1. 使用客户机/服务器模式在通信的端系统之间运行
    2. 在通信的端系统之间通过端到端运输层协议来传送DNS报文。

DNS工作原理

  • 它由分布于全球的大量DNS服务器以及定义了DNS服务器与査询主机通信方式的应用层协议组成。

  • DNS的一种简单设计方式是在因特网上只使用一个DNS服务器

  • 一个DNS服务器的坏处

    ​ 单点故障( a single point of failure)。如果该DNS服务器崩溃,整个因特网将随之瘫痪,单个DNS服务器不得不处理所有的DNS査询(用于为上亿台主机产生的所有HTTP请求报文和电子邮件报文服务)。

    ​ 单个的DNS服务器不可能“邻近”所有查询客户机。如果我们将单台DNS服务器放在纽约市,那么所有来自澳大利亚的查询必须传播到地球的另一边,中间也许还要经过低速和拥塞的链路,这将导致严重的时延。
    ​ 维护( maintenance)问题。单个DNS服务器将不得不为所有的因特网主机保留记录。这不仅将使这个中央数据库非常庞大,而且它还不得不为解决每个新添加的主机而频繁更新。

  • 总的来说,在单一DNS服务器上运行集中式数据库完全没有可扩展能力。因此,DNS采用了分布式的设计方案。

DNS分层

  • DNS,P2P,TCP套接字编程

根DNS服务器

根服务器主要用来管理互联网的主目录,在与现有IPv4根服务器体系架构充分兼容基础上,“雪人计划”于2016年在全球16个国家完成25台IPv6根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局。

尽管我们将这13个根DNS服务器中的每个都视为单个的服务器,但每台“服务器”实际上是冗余服务器的群集,以提供安全性和可靠性。

在根域名服务器中虽然没有每个域名的具体信息,但储存了负责每个域(如.com,.xyz,.cn,.ren,.top等)的解析的域名服务器的地址信息

顶级域TLDDNS服务器

服务器负责顶级域名(如com、org、net、edu和gov)和所有国家的顶级域名(如uk、fr、ca和jp)

权威DNS服务器

在因特网上具有公共可访问主机(如Web服务器和邮件服务器)的每个组织机构必须提供公共可访问的DNS记录

本地DNS服务器( local DNS server)

主机与某个ISP连接时, 该ISP提供一台主机的IP地址,该主机具有一台或多台其本地DNS服务器的IP地址(通常通过DHCP连接)

访问DNS服务器的流程

假定一个DNS客户机要确定主机名www.amazon.com的IP地址。该客户机首先与根服务器之一联系,它将返回顶级域名com的TLD服务器的IP地址。该客户机则与这些TLD服务器之一联系, 它将为amazon.com返回权威服务器的IP地址。最后,该客户机为amazon.com联系权威服务器之一,它为主机名www.amazon.com返回IP地址。

DNS缓存

为了减少DNS服务器的查找次数,如果我们能够利用缓存机制,缓存中没有的记录再去查找,能够减少查找的次数

当一个DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,DNS服务器能将回答中的信息缓存在本地存储器。每当本地DNS服务器dns.po1y.edu从某个DNS服务器接收到一个回答, 它就缓存包含在该回答中的任何信息。如果在DNS服务器中缓存了一个主机名IP地址对,另个对相同主机名的查询到达该DNS服务器时,该服务器能够提供所要求的P地址,即使它不是该主机名的权威服务器。由于主机和主机名与IP地址间的映射不是永久的,所以DNS 服务器在一段时间后(通常设置为两天)将丢弃缓存的信息。

DNS记录和报文

源记录是一个包含了下列字段的4元组: (Name, Value, Type, TTL)

Name和va1ue的值取决于Type: 如果Type=a,则Name是主机名, value是该主机名的IP地址。因此,一条类型为A的资源记录提供了标准的主机名到IP地址的映射。例如,(relay1.bar,foo.com, 145.37.93.126,A)就是一条类型A的记录。
如果Type=NS,则Name是域(如foo.com),而va1ue是知道如何获得该域中主机IP 地址的权威DNS服务器的主机名。这个记录用于沿着查询链路进一步路由DNS查询。例如,( foo. com,dns.foo,com,NS)就是一条类型NS的记录。
如果Type= CNAME,则vaue是别名为Name的主机对应的规范主机名。该记录能够向请求主机提供一个主机名对应的规范主机名,例如,(foo.com,relay1.bar.foo,com, CNAME)就是一条 CNAME2类型的记录。
如果Type=MX,则 Value是别名为Name的邮件服务器的规范主机名。例如, (foo,com,mai1,bar.foo.com,Mx)就是一条MX记录。MX记录允许邮件服务器的主机名具有简单的别名。注意,通过使用MX记录,一个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名。为了获得邮件服务器的规范主机名, DNS客户机应当请求一条MX记录;而为了获得其他服务器的规范主机名,DNS客户机应当请求一条 CNAME记录。

在DNS数据库中插入记录

  • 当向某些注册登记机构注册域名networkutopia.com时,需要向该机构提供你的基本权威DNS服务器和辅助权威DNS服务器的名字和IP地址。假定该名字和IP地址是dns1.networkutopia.com dns2.networkutopia.com 212.212.212.10 212.212 212.2。
  • 该注册登记机构确保将一个类型NS和一个类型A的记录输入 TLD com)服务器。特别是对于用于 networ kutopai,com的基本权威服务器, 该注册登记机构将下列两条资源记录插入该DNS系统中: networkutopia. com, nsl. networkutopia. com, NS) ( dnl. networkutopia. com, 212. 212.212 1, A)

DDOS带宽洪泛攻击

P2P应用

文件分发

在P2P文件分发中,每个对等方都能够重新分发其所有的该文件的任何部分,从而协助服务器进行分发。

Bittorrent

  • 每个洪流具有一个基础设施节点,称为追踪器( tracker)。当一个对等方加入洪流时, 它向追踪器注册,并周期性地通知迫踪器它仍在洪流中。追踪器以这种方式跟踪洪流中的对等方。一个特定的洪流可能在任何时刻拥有数以百计或数以千计的对等方

  • 追踪器随机地从参与对等方集合中选择一些对等方(为了具体起见,比如说50个对等方),并将这50个对等方的IP地址发送给Alice。Alic持有对等方的这张列表,试图与该列表上的50个对等方创建并行的TCP连接。我们称所有与 Alice成功地创建TCP连接的对等方为“近对等方”。(

    随着时间的推移,其中的一些对等方可能离开,而其他对等方(最初50个对等方以外的)可能试图与Aice创建TCP连接。因此,邻近对等方将随着时间而改变追

  • Aice周期性地(经TCP连接)询问每个邻近对等方它们所具有的块列表。如果 Alice有L个邻居,那么她将获得L个块列表。因此,Aice将对她当前还没有的块发出请求(仍通过TCP连接)。

  • Alice使用一种称为最稀罕优先( rarest first) 的技术。这种技术的思路是,根据她没有的块从她的邻居中确定最稀罕的块(最稀罕的块就是在她的邻居中拷贝数量最少的那些块),并优先请求那些最稀罕的块。按照此方式,最稀罕的块更迅速地重新分发,其目标(大致)是均衡每个块在洪流中的拷贝数量。

TCP套接字编程

当服务器进程运行时,客户机进程可以向服务器发起一个TCP连接。在客户机程序中, 这可以通过创建一个套接字来完成。当客户机创建它的套接字时,它指定服务器进程的地址, 即服务器的IP地址和进程的端口号。一旦在客户机程序中生成套接字,客户机的TCP与服务器的TCP发起三次握手并建立一个TCP连接。这个三次握手过程发生在运输层,对于客户机程序和服务器程序是完全透明的。
DNS,P2P,TCP套接字编程

代码实现:见https://blog.****.net/weixin_43869261/article/details/106560580