DNS
DNS是一整套从域名映射到IP的系统
DNS背景
为什么要有域名
其实作为我们程序员来说 使用域名还是IP地址是无所谓的
但是站在商业公司和用户的角度就不这么认为了
商业公司希望用户能够快速的记住自己公司的网址 而用户也希望自己喜欢网站的网址好记一点 方便访问
这个时候域名的作用就显现出来了 它能够让ip地址变得更好记
DNS介绍
它是怎么工作的
我们在浏览器中输入网址之后 该网址就会首先发送给域名解析服务器
在解析完毕之后 域名解析服务器就会返回给我们一个ip地址
之后我们就可以用这个ip地址访问真正的服务器了
域名服务器的重要性
有的同学可能会认为域名服务器所做的工作十分简单 可有可无
但是实际上域名服务器是一种十分重要的网络技术
有人可能会说 我们不是可以直接用ip地址访问吗
对 是可以这样子做 这是因为我们是程序员 或多或少有一定的知识储备 事实上让全体国民都放弃使用域名而使用ip不现实
就比如在伊拉克战争期间 美国关停了域名服务器对于伊拉克的服务 导致伊拉克的互联网企业造成了毁灭性的打击
为什么有时候我们能够正常使用qq正常打游戏但是不能使用浏览器访问网页
此时极有可能是我们浏览器内置的DNS解析服务器挂掉了
DNS总结
- DNS是应用层的协议
- DNS底层使用的是UDP协议
- 浏览器会缓存DNS结果
域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称
- com: 一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等
- baidu: 二级域名, 公司名
- www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议
NAT技术
NAT技术背景
之前我们讨论了 IPv4协议中 IP地址数量不充足的问题NAT技术当前解决IP地址不够用的主要手段 是路由器的一个重要功能
- NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法
- 很多学校, 家庭 公司内部采用每个终端设置私有IP 而在路由器或必要的服务器上设置全局IP
- 全局IP要求唯一 但是私有IP不需要 在不同的局域网中出现相同的私有IP是完全不影响的
NAT IP转换过程
IP转换过程如下图
- 首先我们准备发送一个消息 目标地址是
163.221.120.9
源地址是10.0.0.10
(私有ip) - 这个消息经过NAT路由器之后我们原本的源IP被转化为了路由器的wanIP
202.244.174.37
当NAT路由器收到外部数据的时候又会把IP从202.244.174.37 转化为 10.0.0.10 (私有ip
- 在NAT路由器内部 有一张自动生成的 用于地址转换的表
- 当
10.0.0.10
第一次向163.221.120.9
发送数据时就会生成表中的映射关系
NAPT
那么问题来了 如果局域网内 有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中 目的IP都是相同的
那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机呢
这个时候我们回顾之前学过的知识 我们可以通过IP+PORT唯一的确定网络中的一个程序
但是经过我们的NAT技术转换之后 我们的IP都统一了 假如说局域网中两台主机使用的端口号再一致 那么在数据返回的时候我们就无法确定 这是局域网中哪台主机发送的数据了
而在NAPT技术中 我们会制作一张地址转换表 表的两边互为key值
加入在局域网中有两个端口号相同的程序 那么在这张表中 NAT路由器会自动更改其中一个程序的端口来保证一一对应
NAT技术缺陷
- 无法从NAT外部向内部服务器建立连接 (其实是可以使用内网穿透技术实现的)
- 装换表的生成和销毁都需要额外开销
- 通信过程中一旦NAT设备异常 即使存在热备 所有的TCP连接也都会断开
NAT和代理服务器
路由器往往都具备NAT设备的功能, 通过NAT设备进行中转 完成子网设备和其他子网设备的通信过程
代理服务器看起来和NAT设备有一点像
客户端向代理服务器发送请求 代理服务器将请求转发给真正要请求的服务器 服务器返回结果后 代理服务器又把结果回传给客户端
正向代理
我们客户端向服务器请求数据的时候并不直接将请求发送给服务器 而是发送给代理服务器
代理服务器帮助我们访问一些我们不能访问的网站
反向代理
我们客户端在请求数据的时候并不直接发送给服务器 而是发送给反向代理服务器
反向代理服务器接收到请求之后分配给服务器 之后服务器构建响应并且转给反向代理服务器
之后由反向代理服务器转给客户端
NAT和代理服务器的区别
- 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器
- 从底层实现上讲 NAT是工作在网络层 直接对IP地址进行替换 代理服务器往往工作在应用层
- 从使用范围上讲 NAT一般在局域网的出口部署 代理服务器可以在局域网做 也可以在广域网做 也可以跨网
正向代理和反向代理的区别
- 正向代理主要服务于客户端 反向代理主要服务于服务器
- 在正向代理中 服务器不知道真正的客户端是谁 在反向代理中 客户端不知道真正的服务器是谁
网络协议总结
应用层
- 应用层的作用: 满足我们日常需求的网络程序, 都是在应用层
- 能够根据自己的需求, 设计应用层协议.
- 理解HTTP协议
- 了解DNS协议原理和工作流程
传输层
- 传输层的作用: 负责数据能够从发送端传输接收端.
- 理解端口号的概念.
- 认识UDP协议, 了解UDP协议的特点
- 认识TCP协议, 理解TCP协议的可靠性. 理解TCP协议的状态转化.
- 掌握TCP的连接管理, 确认应答, 超时重传, 滑动窗口, 流量控制, 拥塞控制, 延迟应答, 捎带应答特性.
- 能够基于UDP实现可靠传输.
- 理解MTU对UDP/TCP的影响.
网络层
- 网络层的作用:在复杂的网络环境中确定一条合适的路径。
- 理解IP地址,理解IP地址和MAC地址的区别。
- 理解IP协议格式
- 理解如何解决IP数目不足的问题,掌握网段划分的两种方案,理解私有IP和公网IP
- 理解网络层的IP地址路由过程,理解一个数据包如何跨网段到达最终目的地
- 理解IP数据包分片的原因
- 了解NAT设备的工作原理
数据链路层
- 数据链路层的作用: 两个设备(同一种数据链路节点)之间进行传递数据
- 以太网是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容. 例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等
- 以太网帧格式
- 理解mac地址
- 理解arp协议
- 理解MTU