DNS的原理

假设www.abc.com的主机要查询www.xyz.abc.com的服务器ip地址。

知识点

1、hosts文件:以静态映射的方式提供IP地址与主机名的对照表,类似ARP表

2、域:abc.com是一个域,它可以划分为多个区域,如abc.com和xyz.abc.com

3.DNS: 记录着 域名以及IP的对应关系

			根DNS服务器
顶级DNS服务器.com
权威DNS服务器163,com
二级域名的DNS服务器

步骤

递归查询

第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址

第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找

第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的DNS服务器查询

第四步:‘根DNS服务器’根据查询域名中的‘xyz.com’,再向xyz.com的区域服务器查询

第五步:www.xyz.abc.com的DNS服务器直接解析该域名,将查询到的ip再原路返回给请求查询的主机

迭代查询

第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址

第二步:上一步无法找到,在DNS本地服务器(即域服务器)查找所有本层次的区域服务器

第三步:本地DNS服务器查不到就查询上一层次的所有区域服务器,以此类推直至根域名DNS服务器‘.’

第四步:到达根域名服务器后又向下查询,直至查到结果为止。

迭代查询与递归查询结合

递归查询需要经过逐层查询才能获得查询结果,当查询具有许多层次的DNS结构时效率很低,所以一般采用两者相结合的查询方式。

第一步:在hosts静态文件、DNS解析器缓存中查找某主机的ip地址

第二步:上一步无法找到,去DNS本地服务器(即域服务器)查找,其本质是去区域服务器、服务器缓存中查找

第三步:本地DNS服务器查不到就根据‘根提示文件’向负责顶级域‘.com’的根DNS服务器查询

第四步:根DNS服务器直接将其区域DNS服务器的ip地址返回给本地服务器,而不用再向xyz.com的区域服务器查询。

第五步:本地DNS服务器将结果返回给请求的主机

web框架的原理

一、web框架搭建分一下几步

1、首先搭建一个服务器接收客户端发来的请求数据包

2、对客户端发来的数据包进行分析与拆分得到想要的数据

header = data.split('\r\n\r\n')[0].split('\r\n')[0]

url = header.split(' ')[1]

3、创建一个路由关系映射,将不同的请求映射到不同的方法种

4、在方法使用mysql中连接数据库,并将得到的数据进行循环拼接成html中的表格的形式

5、将拼接后的数据和html文件中的@@content@@进行替换

6、换回替换后的数据给客户端

二、代码

.py的代码

import socket

def f1():

fp = open('index.html', 'rb')

data = fp.read()

fp.close()

return data

def f2():

import pymysql

conn = pymysql.connect(host='127.0.0.1',user='root',password='456',db='db1',charset='utf8')

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = 'select sid,sname,gender,class_id from student'
cursor.execute(sql)
res = cursor.fetchall()
print(res)
res_list = []
for user in res:
res_str = '<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>' % (user['sid'],user['sname'],user['gender'],user['class_id'])
res_list.append(res_str)
s = ' '.join(res_list)
fp = open('index.html', 'r',encoding='utf-8')
data = fp.read()
data = data.replace('@@content@@',s)
fp.close() return bytes(data,encoding='utf-8')

router = [

('/index', f1),

('/xxx', f2),

]

def run():

server = socket.socket()

server.bind(('127.0.0.1',9999))

server.listen(5)

while True:
cli,add = server.accept()
buf = cli.recv(1024)
if not buf:
print('断开连接')
cli.close()
data = str(buf,encoding='utf-8')
header = data.split('\r\n\r\n')[0].split('\r\n')[0]
url = header.split(' ')[1] func_name = None
for i in router:
if i[0] == url:
func_name = i[1]
break
if func_name:
res = func_name()
else:
res = b'404' cli.send(bytes('HTTP/1.1 200 OK\r\n\r\n',encoding='utf-8'))
cli.send(res)
cli.close()

if name == 'main':

run()

.html的代码

登录

@@content@@
SID Name Gender Class_id

初识Django(DNS原理及web框架)的更多相关文章

  1. day 52 Django基础一之web框架的本质

    Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于D ...

  2. day 65 Django基础一之web框架的本质

      Django基础一之web框架的本质   django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基 ...

  3. django基础一之web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

  4. Django学习笔记之Web框架由浅入深和第一个Django实例

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  5. 01.Django基础一之web框架的本质

    一 web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响 ...

  6. Django学习篇(web框架的由来)

    Python的WEB框架有 Django.Tornado.Flask 等多种 ,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多 ...

  7. django基础 -- 1. 前奏 web框架的本质

    一. http协议 1.请求方法(get和post) 1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test ...

  8. django笔记(python web框架)

    1.Python 下载地址:https://www.python.org/downloads/ 2.Django 下载地址:https://www.djangoproject.com/download ...

  9. 初识Flask——基于python的web框架

    参考教程链接: https://dormousehole.readthedocs.io/en/latest/ (主要)https://www.w3cschool.cn/flask/ 目录: 1.写了一 ...

随机推荐

  1. MICROSOFT SQL SERVER 2012 序列号

    MICROSOFT SQL SERVER DEVELOPER 版(开发版) 序列号:YQWTX-G8T4R-QW4XX-BVH62-GP68Y MICROSOFT SQL SERVER ENTERPR ...

  2. 【Redis安装】部署与基本配置 --基于Mac和Linux

    Redis安装与部署[基于Mac和Linux] 一.Redis简介 基于内存的Key-Value高性能NoSQL数据库 二.Redis下载和解压 进入官网下载最新版的Redis,目前是5.0.0,这个 ...

  3. HTMl中常用标签

    文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言. HTML之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点.所谓超级链接 ...

  4. Redis学习01——介绍与搭建环境

    Redis学习01介绍与搭建环境一简介二yum配置已经配置了的可以跳过三安装gcc四安装redis1 上传Redis到linux中2 解压到usrlocal下3 编译redis4 安装redis5 拷 ...

  5. javascript基础:bom

    一.BOM 1.概念:Browser Object Model  浏览器对象模型 *  将浏览器的各个组成部分封装成对象 2.组成: *  Window:窗口对象                  1 ...

  6. 一次.NET项目反编译的实战经验(WinForm)

    最近由于业务需求,需要对一个老项目进行功能调整.但是项目的源代码已经找不到了.所以只能尝试对项目行进反编译. 一.反编译工具的选择 提到.NET的反编译,第一个想到的就是大名鼎鼎的Reflector. ...

  7. linux 修改命令提示符&ubuntu目录颜色个性化

    1.linux 命令提示符个性化 在 ANSI 兼容终端(例如 xterm.rxvt.konsole 等)里, 可以用彩色显示文本而不仅仅是黑白. 本文示范了如何使用粗体和彩色的文字.     相信每 ...

  8. Binder对象死亡通知机制

    本文參考<Android系统源码情景分析>,作者罗升阳. 一.Binder库(libbinder)代码:        ~/Android/frameworks/base/libs/bin ...

  9. Eviews9.0---软件安装

    EViews是Econometrics Views的缩写,直译为计量经济学观察,通常称为计量经济学软件包.它的本意是对社会经济关系与经济活动的数量规律,采用计量经济学方法与技术进行“观察”.计量经济学 ...

  10. day37 04-Hibernate二级缓存:list和iterate方法比较

    get()和load()方法既可以向一级缓存区放数据,也可以向二级缓存区放数据.这是查询一个的情况.要是查询所有呢?注意, // 查询所有.Query接口的list()方法. // list()方法会 ...