计算机网络自顶向下方法第2章-应用层(application-layer).2

2.4 DNS:因特网的目录服务

  2.4.1 DNS提供的服务

  DNS的定义

  • 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库
  • 协议层面看,DNS是一个使得主机能够查询分布式数据库的应用层协议
  • DNS运行在UDP之上,使用53号端口

  1)主机名到IP地址映射的转换服务

  2)主机别名(host aliasing)

  3)提供负载均衡(load distribution)

  2.4.2 DNS工作机理概述

  DNS是一个在因特网上实现分布式数据库的精彩范例。

  1.分布式、层次数据库

  DNS服务器是有层次的,它可以分为三种类型:根DNS服务器, 顶级域(Top-Level Domain, TLD )DNS服务器和权威DNS服务器,分别对应下面三个层次(从上至下)

  

  • 根DNS服务器:有400多个根名字服务器遍及全世界,由13个不同的组织管理
  • 顶级域DNS服务器:顶级域服务器负责顶级域名,如com,org,net,edu和gov和所有国家的顶级域名如cn,uk,jp (edu 教育机构域名, gov 政府部门域名 , org 非盈利性的组织 ,com 企业域名 )权威DNS服务器:在因特网上具有公共可访问的主机的每个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。 由组织机构的权威DNS服务器保存这些DNS记录,组织机构可以选择实现它自己的权威DNS服务器来保持这些记录,或者通过支付费用将这些记录存储在某个服务提供商的DNS服务器中。多数大学和大公司实现和维护它们自己基本的权威DNS服务器。
  • 本地DNS服务器:还有另一类比较重要的DNS服务器,叫做本地DNS服务器(local DNS server),它并不在我们上面所说的DNS层次结构中。本地DNS服务器的作用有以下两点:
    • 1)主机和本地DNS服务器一般是相邻的,当主机发出DNS请求的时候,该请求会被发往本地DNS服务器,它起着代理的作用,并将该请求转发到DNS服务器层次结构中
    • 2)本地DNS服务器可以通过缓存主机名/IP地址,减少对相同主机名的查询而消耗的时间,改善时延和性能

  实际上,在DNS服务中, 并不能通过对某个DNS服务器,通过仅仅一次的“请求/响应”就取得主机名/IP地址的查询结果。相反,需要多个不同的DNS服务器之间进行多次交互才能获取最终的查询结果:

  

  2.DNS缓存

  因为缓存,除了少数DNS查询以外,根服务器被绕过了。

  2.4.3 DNS记录和报文

  1.DNS报文

  DNS只有两种报文,即查询和回答报文,并且这两种报文有着相同的格式。下图是DNS报文格式:

  2.在DNS数据库中插入记录

  假设你刚刚创建了一个网络乌托邦(Network Utopia)公司, 要做的第一件事情就是到注册登记机构注册域名(networkutopia.com), 注册的时候,需要向该机构提供你的权威DNS服务器的名字和IP地址,该注册机构将确保将一个NS记录和A记录被插入com顶级域DNS服务器中。

2.5 P2P文件分发

  在P2P文件分发中,每个对等方能够向任务其他对等方重新分发它已经收到的该文件的任何部分,从而在分发过程中协助该服务器

  1.P2P体系结构的扩展性

  扩展性的直接成因是:对等方除了是比特的消费者外还是它们的重新分发者。

  2.BitTorrent

  BitTorrent是一种用于文件分发的流行P2P协议。每个下载者在下载的同时不断向其他下载者上传已下载的数据。

2.6 视频流和内容分发网

  2.6.1 因特网视频

  我们也能使用压缩生成相同视频的多个版本,每个版本有不同的质量等级。

  2.6.2 HTTP流和DASH

  由于HTTP流具有缺陷,不管客户可用的带宽大小,所有客户都接收到的相同编码的视频。这导致了一种新型基于HTTP的流的研发,称为经HTTP的动态适应性流(Dynamic Adaptive Streaming over HTTP,DASH).在DASH中,视频编码为几个不同的版本,其中每个版本具有不同的比特率,对应于不同的质量水平。

  2.6.3 内容分发网(Content Distribution Network,CDN)

  几乎所有主要的视频流公司都利用内空分发网。CDN通常采用两种不同的服务器安置原则。

  • 深入。
  • 邀请做客

  1.CDN操作

  2.集群选择策略。

2.7 套接字编程:生成网络应用

  2.7.1 UDP套接字编程

  •  UDP是无连接的,从一个端系统向另一个端系统发送独立的数据分组,不对交付提供任何保证。
  •  如下图所示,使用UDP的两个通信进程之间的交互有以下几个过程:

  

  1.UDPClient.py

  客户端代码:

#socket 模块形成了在python中所有网络通信的基础
from socket import *

serverName=‘45.76.204.40‘ #包含服务器的主机名或IP地址
serverPort=12000 #目标端口号

#使用socket()创建客户套接字。
#第一个参数指示了地址簇:AF_INET指示了底层网络使用了IPv4
#第二个参数,SOCK_DGRAM指示了它是一个UDP套接字(而不是TCP套接字)
#特别注意:我们无需指定客户端套接字的端口号,这个工作由操作系统完成
clientSocket=socket(AF_INET,SOCK_DGRAM)
message=input(‘Input lowercase sentence:‘) #提示用户从键盘输入,并将输入读取到message中

#sendto()为报文message附上目的地址(serverName,serverPort),
#并向进程的套接字clientSocket发送结果分组
clientSocket.sendto(message.encode(),(serverName,serverPort)) 

#来自因特网的分组到达该客户的套接字时,其分组数据放在变量ModifiedMessage中,源地址放置在serverAddress中
#方法recvfrom取长度2048作为输入
ModifiedMessage,serverAddress=clientSocket.recvfrom(2048)
print (ModifiedMessage.decode())

clientSocket.close()

  2.UDPServer.py

from socket import *
serverPort=12000
serverSocket=socket(AF_INET,SOCK_DGRAM)
serverSocket.bind((‘‘,serverPort)) #将端口号与服务器的套接字显示绑定在一起
print(‘The server is ready to receive‘)
#这个while允许服务器无限期地接收来自客户端的分组
while True:
    message,clientAddress=serverSocket.recvfrom(2048)
    modifiedMessage=message.upper()
    serverSocket.sendto(modifiedMessage,clientAddress)

  2.7.2 TCP套接字编程

  与UDP不同,TCP是一个面向连接的协议。这意味着,在客户端和服务器能够开始互相发送数据之前,它们要先握手和创建一个TCP连接。连接建立之后,当有一方需要给另一方发送数据,它只需经套接字把数据丢个TCP连接,无需再为数据附上目的地地址。

  如下图所示,使用TCP的两个通信进程之间的交互有以下几个过程:

      

    

  1.TCPClient.py

from socket import *
serverName=‘127.0.0.1‘ #服务器的IP地址或主机名(这里是本地回送地址)
serverPort=12000

#第一个参数AF_INET表明底层网络使用IPv4,
#第二个参数SOCK_STREAM表明它是一个TCP套接字(而不是UDP)
clientSocket=socket(AF_INET,SOCK_STREAM)

#connect()执行完后,执行三次握手,并在客户和服务器程序之间创建起一条TCP连接
clientSocket.connect((serverName,serverPort))

sentence=input(‘Input lowercase sentence:‘)

#进入客户套接字,并通过TCP连接发送数据
#无需附上目的地地址
clientSocket.send(sentence.decode())

#当字符到达套接字时,它们被放在modifiedSentence,其缓存长度为2048
#知道收到回车符才会结束该行
modifiedSentence=clientSocket.recv(2048)

print(‘From Server:‘,modifiedSentence.encode())
clientSocket.close()

  2.TCPServer.py

from socket import *
serverPort=12000

#创建一个欢迎套接字serverSocket,将其绑定在serverPort上
serverSocket=socket(AF_INET,SOCK_STREAM)
serverSocket.bind((‘‘,serverPort))

#聆听来自客户的连接请求;参数1表示请求连接的最大数
serverSocket.listen(1)

print(‘The server is ready to receive.‘)
while True:

    #当有客户敲门时,seerverSocket调用accept(),
    #在服务器中创建一个叫connectionSocket由这个客户专用
    connectionSocket,addr=serverSocket.accept()

    sentence=connectionSocket.recv(2048)
    capitalizedSentence=sentence.upper()
    connectionSocket.send(capitalizedSentence)

    #关闭连接套接字,没有关闭欢迎套接字
    connectionSocket.close()

参考:

https://blog.csdn.net/qq_36464448/article/details/80305497

https://blog.csdn.net/qq_36464448/article/details/80302793

https://www.cnblogs.com/hithongming/category/1245180.html

原文地址:https://www.cnblogs.com/xiaoguanqiu/p/10927338.html

时间: 2024-11-05 22:58:44

计算机网络自顶向下方法第2章-应用层(application-layer).2的相关文章

计算机网络自顶向下方法:第三章 运输层

先根据书中的复习题巩固一遍, 最后回答常见问题TCP三次握手和四次挥手, 如有错误, 欢迎指出~ 点击下面跳过复习题 TCP3次握手: 为什么需要初始序号? 为什么需要3次握手, 而不是两次握手 TCP4次挥手 ? 第二章: 运输层 3.1~3.3节 R1. 假定网络层提供了下列服务. 在源主机中的网络层接收最大长度1200字节和来自运输层的目的主机地址的报文段. 网络层则保证将该报文段交付给位于目的主机的运输层. 假定在目的主机上能够运行许多网络应用进程. a. 设计可能最简单的运输层协议,

计算机网络-自顶向下方法第四章

上一章,讲的是传输层,这章讲的是下一层,网络层. 运输层依赖于网络层的主机到主机的通信服务,提供各种形式的进程到进程的通信. 网络层分解为两个部分,数据平面和控制平面.这章主要讲前者,数据平面. 网络层的作用:将分组从一台发动主机移动到一台接收主机.需要两种重要的功能:转发和路由选择. 转发:是指将分组从一个输入链路接口转移到适当的输出链路接口的路由器本地动作.转发时间的时间很短(通常为几纳秒),用硬件来实现. 路由选择:确定分组从源到目的地所采取的端到端路径的网络范围处理过程.时间长得多(几秒

计算机网络自顶向下方法第6章-链路层和局域网.2

6.5 链路虚拟化:网络作为链路层 多协议标签交换 MPLS 通过来自虚电路网络的一个关键概念—固定长度标签,可以改善 lP 路由器的转发速度. 其目标是使用转发 lP 数据报的路由设备,但却是基于固定长度标签和虚电路的技术,让路 由器根据固定长度的标签转发数据报(而不是目的地 IP 地址),从而加快转发速度(标签长 度固定.较小的标签空间这两个特点加快了查表速度). 6.6 数据中心网络 因特网公司如FLAG构建了大量数据中心,每个数据中心容纳数十万太主机,同时支持着不同云应用.每个数据中心有

《计算机网络 自顶向下方法》 第2章 应用层

常见应用层协议有哪些? HTTP(HyperText Transfer  Protocol):超文本传输协议 FTP(File Transfer Protocol):文件传输协议 SMTP(Simple Mail Transfer Protocol): Telnet:远程终端访问 有哪些可供选择的运输层协议? TCP(Transmission Control Protocol):传输控制协议 可靠数据传输.面向连接.拥塞控制UDP(User Datagram Protocol):用户数据报协议

《计算机网络·自顶向下方法》 小程序等资源地址

https://wps.pearsoned.com/ecs_kurose_compnetw_6/216/55463/14198700.cw/index.html 感谢: 从哪里可以找到计算机网络自顶向下方法的配套资料? - JmsAllen的回答 - 知乎 https://www.zhihu.com/question/63658105/answer/254291529 原文地址:https://www.cnblogs.com/ZGQblogs/p/12237047.html

[其他]计算机网络-自顶向下方法 学习笔记

计算机网络与因特网 Nobody no why, it just works! by Qijd 一.发展史 分组交换 1961-1972 专用网络和网络互联 开始产生TCP UDP等协议 网络的激增 1980-1990 因特网爆炸 29世纪90年代 万维网应用出现 二.基本构成 core - edge - resourse 资源子网与通信子网构成计算机网络 端系统通过 因特网服务提供商 ISP(InternetServiceProvider)接入因特网 端系统.分组交换机和其他因特网部件通过pr

《计算机网络 自顶向下方法》 第2章 应用层 Part2

域名.主机名? 从范围上看: 域名的范围比主机名大 一个域名下通常有多个主机名 从组成上看: 主机名 = 服务器名(或计算机名) + 域名 举例说明: baidu.com 是百度的域名 www.baidu.com 是百度的 www 主机名 map.baidu.com 是百度的地图主机名 DNS 是什么? DNS 的全称 Domain Name System,即域名系统 它的作用是提供主机名到 IP 地址的映射 在上一个问题中讨论了域名和主机名的区别,知道它们不是一回事,至于为什么 DNS 叫域名

计算机网络-自顶向下方法第二章

第一章统述,这一章开始讲解每一层详细的信息.这章讲解的是应用层. 有很多应用,如Facebook.Instagram和微信等,这些应用很受人欢迎. 1. 应用层协议原理 1.1网络应用程序体系 客户-服务器体系结构:有一个总是打开的主机成为服务器.服务于来自许多其他成为客户的主机的请求.典型的应用时web应用,浏览器-服务器. p2p体系结构.配备大量主机的数据中心,用于创建强大的虚拟服务器. 进行通信的是进程而不是程序.在两个不同端系统上的进程,通过跨越计算机网络交换报文而相互通信. 套接字:

《计算机网络 自顶向下方法》 第3章 运输层 Part1

由于个人精力和智商有限,又喜欢想太多.钻牛角尖,导致学习系统性知识很痛苦,尝试改变学习方式,慢慢摸索 现在看到 rdt2.0,又有点看不下去 现在的想法: 要有个目标,且有截止时间(作业模式.考试模式),在过程中,如果遇到对整体没有致命影响的难点,可以暂时跳过,在特定时间内把目标内的其他地方解决即可(即先解决简单的其他部分,在考虑进攻难点,这样的话,前期心态不会太焦灼,而且等回过头进攻难点的时候,有一种从四面八方将难点包围的感觉) 写博客也换个思路: 边写博客,边摸索写博客的方式,而且可以把摸索