DNS解析
我们分析一下解析流程:
- 客户端向本地DNS服务器(递归解析服务器) 发出解析tool.chinaz.com域名的请求
- 本地dns服务器查看缓存,是否有缓存过tool.chinaz.com域名,如果有直接返回给客户端;如果没有执行下一步
- 本地dns服务器向根域名服务器发送请求,查询com顶级域的nameserver 地址
- 拿到com域名的IP后,再向com nameserver发送请求,获取chinaz域名的nameserver地址
- 继续请求chinaz的nameserver, 获取tool域名的地址,最终得到了tool.chinaz.com的IP,本地dns服务器把这个结果缓存起来,以供下次查询快速返回
- 本地dns服务器把把结果返回给客户端
递归解析服务器 vs 权威域名服务器
我们在解析流程中发现两类DNS服务器,客户端直接访问的是 递归解析服务器
, 它在整个解析过程中也最忙。 它的查询步骤是递归的,从根域名服务器开始,一直询问到目标域名。
递归解析服务器通过请求一级一级的权威域名服务器,获得下一目标的地址,直到找到目标域名的 权威域名服务器
简单来说: 递归解析服务器
是负责解析域名的, 权威域名服务器
是负责存储域名记录的
递归解析服务器一般由ISP提供,除此之外也有一些比较出名的公共递归解析服务器, 如谷歌的8.8.8.8,联通的114,BAT也都有推出公共递归解析服务器,但性能最好的应该还是你的ISP提供的,只是可能会有 DNS劫持
的问题
缓存
由于整个解析过程非常复杂,所以DNS 通过缓存技术来实现服务的鲁棒性。 当递归nameserver解析过tool.chianaz.com 域名后,再次收到tool.chinaz.com查询时,它不会再走一遍递归解析流程,而是把上一次解析结果的缓存直接返回。 并且它是分级缓存的,也就是说,当下次收到的是www.chinaz.com的查询时, 由于这台递归解析服务器已经知道chinaz.com的权威nameserver, 所以它只需要再向chinaz.com nameserver 发送一个查询www的请求就可以了。
根域名服务器
递归解析服务器是怎么知道 根域名服务器
的地址的呢? 根域名服务器的地址是固定的,目前全球有13个根域名解析服务器,这13条记录持久化在递归解析服务器中:
为什么只有13个根域名服务器呢,不是应该越多越好来做负载均衡吗? 之前说过DNS 协议使用了UDP查询, 由于UDP查询中能保证性能的最大长度是512字节,要让所有根域名服务器数据能包含在512字节的UDP包中, 根服务器只能限制在13个, 而且每个服务器要使用字母表中单字母名。
TCP(打电话)
- TCP:传输控制协议(Transmission Control Protocol)
- 特点:面向连接(收发数据前、必须建立可靠的连接)
- 建立连接的基础:三次握手
- 应用场景:数据必须准确无误的收发 、 HTTP请求 、 FTP文件传输 、 邮件发送
- 缺点:速度慢、效率低、占用资源、容易被攻击(三次握手 -> DOS、DDOS攻击)
- 优点:稳定、重传机制、拥塞控制机制、断开连接
- TCP/IP 协议组:提供点对点的连接机制,制定了数据封装、定制、传输、路由、数据接收的标准
UDP(喇叭喊人)
- UDP:User Data Protocol 用户数据报协议
- 特点:面向无连接(不可靠的协议,无状态传输机制)
- 无连接信息发送机制
- 应用场景:无需确保通讯质量且要求速度快、无需确保信息完整
- 消息收发、语音通话、直播(QQ)
- 优点:安全、快速、漏洞少(UDP flood攻击)
- 不可靠、不稳定、容易丢包
- 总结:只要目的源地址、端口号、地址确定,则可以直接发送请求报文,但不能保证一定收到或收到完整的数据
HTTP 与 HTTPS
-
HTTP:超文本传输协议
-
客户端和服务器端请求和应答的标准,用于从WEB服务器传输超文本到本地浏览器的传输协议
-
HTTP请求:按照协议规则先向WEB服务器发送的将超文本传输到本地浏览器的请求
-
HTTPS:超文本传输安全协议
-
定义:HTTP的安全版(安全基础是SSL/TSL)
-
SSL:安全套接层
-
TSL:传输层安全
-
为网络通信提供安全数据完整性的一种安全协议,对网络连接进行加密
HTTP与HTTPS
- 区别:
- HTTP是不安全的(监听和中间人攻击等手段,获取网站账户信息和敏感信息) HTTPS可防止被攻击
- HTTP协议的传输内容都是明文,直接在TCP连接上运行,客户端和服务器端都无法验证对方身份
- HTTPS协议的传输内容被SSL/TLS加密,且运行在SSL、TLS上,SSL/TLS运行在TCP连接上,所以数据传输是安全的
默认端口号:http协议下(80)、http协议下(443)、FTP协议下(20、21)
建立TCP(Transform Control Protocol)连接的前奏
-
标志位:数据包
-
SYN:同步序列编号
-
ACK:(Acknowledgement)确认字符
状态:
-
LISTEN:侦听TCP端口的连接请求(我等着你发送连接请求呢)
-
SYN-SENT:在发送连接请求后等待匹配的连接请求(我发送了连接请求,我等你回复哈)
-
SYN-RECEIVED:在收到和发送一个连接请求后等待对连接请求的确认(我收到你的连接请求了,我等你回复哈)
-
ESTABLISHED:代表一个打开的连接,诗句可以传送给用户(建立连接了哈,我跟你说一下)
- 第一次握手:客户端向服务器发送SYN标志位( 序号是 J ),并进入SYN_SEND状态(等待服务器确认状态)
- 第二次握手:服务器收到来自客户端的SYN J,服务器端会确认该数据包已收到并发送ACK标志位( 序号是J+1) 和 SYN标志位(序号是K),服务器进入SYN_REVD(请求接受并等待客户端确认状态)
(等待服务器确认状态) - 第二次握手:服务器收到来自客户端的SYN J,服务器端会确认该数据包已收到并发送ACK标志位( 序号是J+1) 和 SYN标志位(序号是K),服务器进入SYN_REVD(请求接受并等待客户端确认状态)
- 第三次握手:客户端进入连接建立状态后,向服务器发送ACK标志位(序号是K+1)确认客户端已收到建立连接确认,服务器收到ACK标志位后,服务器进入连接已建立状态。