从按下回车键开始
DNS解析
DNS中文称为计算机域名系统
当我们在浏览器输入 http://www.qq.com 这个网址时,会首先将域名解析为ip地址
以下是DNS解析的步骤:
- 浏览器查看浏览器缓存,是否有域名对应的ip地址,有则解析成功。
- 查看本地(Hosts)缓存
- 查看路由器缓存:以上三步为客户端解析
- ISP(互联网服务提供商)DNS缓存查询
- 根域名服务器查询(全球共13台根服务器,1台主根服务器,12台辅根服务器),查询不到时会返回顶级域名主机ip地址,客户端使用此ip继续查询(.com)
- 顶级域名服务器查询,查询不到则返回域名主机ip地址(http://qq.com)
- 主域名服务器,重复查询知道找到 http://wwww.qq.com 这台主机
- 本地域名服务器将返回结果缓存,并给客户端
- 客户端拿着ip去与Web服务器建立链接
DNS是应用层协议
DNS解析为什么基于UDP协议
- udp无连接状态,不保证数据可靠性。TCP面向链接,可以保证数据可靠性
- UDP一次数据交换最短可以只有两个包,发起请求,响应数据。而TCP一次数据交换最少需要9个包,三次握手建立联系,请求数据,响应数据,四次挥手断开连接
- 考虑到TCP的开销太大,所以选用UDP,也因此导致全球只有13台根域名服务器
TCP的三次握手和四次挥手
-
三次握手
client: 你好!在吗?
server: 在呢!
client: 那我开始发送数据了哦! -
四次挥手
client: 我要下线了,你还有啥要说的?
server: 我没啥说的了
server: 你还有啥要说的?
client: 没了,拜拜!
计算机网络五层协议栈
- 应用层
应用层直接与用户交互,主要协议有www, smtp, ftp, dns等。定义了应用进程间通信和交互的规则。虽然发送方知道自己发的什么,但接收方不知道,所以应用层协议规定了一个消息必须包含消息头和数据区。消息头定义了消息格式,长度等。以http协议为例,在chrome中,可以看到header中含有content-type,content-length等字段。如果没有应用层协议,那接受方拿到消息也不知道怎么办,怎么处理。 - 传输层
传输层定义了端口到端口的通信规则。如果没有传输层协议,消息包到达一个主机时,却不知道是哪个进程的。此层的协议有TCP,IP协议。 - 网络层
网络层主要解决了异构网络通信的问题。主机到主机的通信。我们都知道mac地址可以全球唯一标识一台机器,但只有以太网是基于mac地址的。所以我们引入ip地址来标识一台主机。使用ip地址通信时,传输ip数据包,ip数据包会包含在数据帧的数据区。 - 链路层
链路层在物理上的表现两个相邻节点之间的数据交换。整个互联网的交互可以简化为很多交换机节点的交互。一个交换机意味着一个局域网。而局域网有多种实现。最常见的是以太网,除此之外还有令牌环绕,ATM,无线网络等。此层数据格式为数据帧,分为帧头,数据区,帧尾。以太网中的数据帧称为以太帧。 - 物理层
物理层将数据帧转化为01比特流,来在光缆,双绞,无限波等介质中传播信号。只要涉及信号的调制解调。
ARP协议:IP地址与MAC地址的协作问题:
host_1广播:我是ip_1, mac_1, 我找 ip_2
host_2广播:我是ip_2,mac_2, 我找 ip_1
ARP告诉缓存:小本本记下来。