DNS、长短连接.、HTTP

发布时间 2023-12-29 12:10:05作者: 廿陆

DNS:Domain Name System 域名系统

  ? 域名和IP地址相互映射的一个分布式数据库

  ? 域名采用分层管理模式,分为:一级域名(顶级域名)、二级域名、三级域名等

  ? www.baidu.com整体是一个二级域名;  baidu.com是一个一级域名;  .com是是顶级域(Generic top-level domain)

  ? 域名中有几个点,一个点一级、两个点二级;

  ? 域名的数量庞大,一台域名服务器无法完成所有映射,分为层次结构分布式数据库

  ? 当访问  www.sina.com.cn时,DNS程序将DNS请求发送给 ? 根域名服务器(.cn:是顶级域名服务器);

  ? DNS请求依次经过 ? 权限域名武器;? 本地域名服务器;直到解析出对应的IP地址

DNS工作原理:

  域名解析将  域名映射为IP地址(正向解析);  IP地址映射成域名(反向解析)

  域名解析有两种方式:递归查询、迭代查询

  递归:DNS服务器收到主机请求,将准确的结果回复给主机,如果本地服务器没有则询问其他服务器(主机只查询一次,等DNS服务器响应结果,所有事情DNS服务器处理)

  迭代:DNS服务器向主机提供其他能够解析查询请求的DNS服务器IP地址,主机发送请求,DNS不直接返回结果,而是告知另一台DNS服务器地址,主机请求另一台,直到完毕;  

  实际:递归 + 迭代,主机向本地DNS服务器查询采用递归,本地DNS向根域名服务器查询采用迭代;

? 将主机域名转换为 ip 地址,应用层协议,使用UDP传输;

? 当用户输入域名,浏览器先检查自己的缓存中是否包含这个域名映射的 ip 地址,有则解析结束

  ? 若无,则检查操作系统缓存(Windows的 hosts)中有无解析过的结果,有则解析结束

  ? 若无,请求本地域名服务器解析(LDNS)

  ? 若无命中。跳到根域名服务器请求解析,根域名服务器返回给LDNS一个主域名服务器地址。

  ? 此时LDNS发送请求给上一步返回的gTLD(通用顶级域),接收请求的gTLD查找并返回这个域名对应的 Name Server 的地址

  ? Name Server根据映射关系找到目标ip 返回给LDNS

? LDNS缓存这个域名和对应的ip,把解析的结果返回给用户,用户根据TTL值缓存到本地系统缓存中,域名解析结束。

为什么域名解析用UDP协议?

  因为快!UDP的DNS协议只要一个请求,一个应答;UDP协议内容不能超过512Byte(一般内容不超过512)

为什么区域传输用途TCP协议?

  因为可靠!复制内容,需要可靠,且可能大于512字节;(DNS区域传输:冗余备份,将主机服务器数据备份辅助服务器)

HTTP长连接和短连接的区别?

  HTTP/1.0  默认短连接,每一次HTTP操作,建立一次连接,任务结束就断开连接;

  HTTP/1.1  默认长连接,保持连接; 

TCP粘包/拆包:

  一个业务被TCP拆分成多个包进行发送(拆包),也有可能将多个小包封装成一个大的数据包(粘包)

为什么有服务器缓存?实现?

  缓解服务器压力;

  降低客户端获取资源的延迟:缓存通常位于内存中,读取缓存的速度更快,并且缓存服务器在地理位置上也有可能比源服务器更近,例如浏览器缓存;

  实现:当代理服务器进行缓存;  让客户端浏览器缓存

HTTP请求方法:

一个TCP连接可以发送多个HTTP请求!(维持连接前提下)

  HTTP/1.0:GET  POST  HEAD

  HTTP/1.1:OPTIONS  PUT  PATCH  DELETE  TRACE  CONNECT

序 号方法描述
1 GET 请求指定的页面信息,并返回实体主体
2 HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5 DELETE 请求服务器删除指定的页面。
6 CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7 OPTIONS 允许客户端查看服务器的性能。
8 TRACE 回显服务器收到的请求,主要用于测试或诊断。
9 PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。

GET和POST区别:

  ? GET是获取数据,POST是修改数据

  ? GET把请求的数据放在url上,以 ? 分割 URL 和 传输数据,参数之间以 & 相连,所以GET相对不安全,而 POST把数据放在 HTTP 包体内。

  ? GET提交的数据最大是2k(限制取决于浏览器),POST理论没有限制

  ? GET产生一个TCP数据包,浏览器将 http header 和 data 一并发送出去,服务器响应200(返回数据);

  ? POST产生两个TCP数据包,浏览器先发送 header服务器响应 100 continue,浏览器再发送 data,服务器响应 200 ok(返回数据)

  ? GET请求会被浏览器主动缓存,POST不会(可以手动设置缓存)

  ? 本质:GET是幂等的,POST不是(幂等性:指一次和多次请求某一个资源应该具有同样的副作用;即对同一 URL的多个请求应返回同样的结果)

因此,不能用 GET请求做数据的  增删改  操作,在网络不好的隧道中会尝试重试,如果用GET请求增删改,可能有 重复操作 风险