1. TCP/IP四层模型总结
2. 网络协议拓展
DNS协议(地址解析协议)
TCP/IP使用IP地址和端口号来确定网络中一台主机的一个程序。
但是这样标定不方便记忆,于是开始引出主机名(字符串),使用hosts文件来描述主机名与IP之间的关系。
最初互联网通过信息中心来(SRI-NIC)管理这个hosts文件
- 如果计算机要申请入网,或者计算机IP变动,都需要向信息中心申请变更hosts文件。
- 其他计算机也要定期下载hosts文件才可以正确上网。
域名
主域名是用来识别主机名和和主机所属的机构的一种分层结构的名称。
域名的范围要比主机名大。
一个域名下可以有多个主机名,域名下还可以有子域名。例如,域名abc.com下,有主机server1和server2,其主机全名就是server1.abc.com和server2.abc.com。
- com:一级域名,代表企业、.net(网络运营商)、.org(非盈利组织)
- baidu:二级域名,公司名
- www:习惯性的用法,与之前的命名有关。表示支持的协议(ftp.xxxx.xxx、www.xxxx.xxx)
随着时间发展,产生了DNS系统
- 一个系统的管理机构,维护每台主机的主机名和IP之间的映射。
- 新计算机入网时,将这台计算机名和IP地址信息注册到数据库中。
- 当用户输入域名时,会自动查询DNS服务器,DNS服务器索引数据库,找到对应IP地址。
- 现在的计算机,仍然存在hosts文件,域名解析时会优先查找
eg:www.baidu.com - > 110.242.68.3
(不考虑缓存)浏览器首先要进行的就是域名解析,DNS底层使用的是UDP协议。通过向DNS服务器发起UDP请求,来解析域名。
ICMP(网络状态控制和管理)
ICMP:基于IP协议达到网络状态控制和管理。
一个新建好的网络进行测试时。因为IP协议不保证数据可靠性,丢包时不会通知传输层是否丢包,以及丢包原因。
针对上述情况引出ICMP协议功能:
- 确认IP协议是否到达目的地址
- 通知正在发送过程中IP包被丢弃的原因。
- ICMP基于IP协议进行工作,但其属于网络层协议。
- ICMP只能基于IPV4使用,如果时IPV6需要使用ICMPV6
ICMP报文分为两类
- 通知出错原因报文
- 诊断查询报文
ICMP错误内容
当通信成功时不会发送ICMP响应。
ping命令就是向对端主机发送ICMP请求
回复指的就是ICMP响应。
TTL:IP包的生命周期。
ping命令在用户区的命令,绕过了传输层(原生套接字),直接获取网络层ICMP响应报文的数据。与TCP/UDP无关。所以不关心端口号,端口号存在于TCP/UDP(传输层),用来保证报文分用的。
3. NAT技术
NAT技术:解决IPV4的IP地址数量不足问题。(路由器的主要功能)
路由器的功能:
- 路由转发。
- DHCP,IP地址管理——组件局域网。
- NAT技术
NAT技术:将IP对外通信时私有IP转化为全局IP
NAT工作流程
局域网的主机A在经过路由器时,会替换源IP地址为路由器的WAN口地址(因为私网IP不能出现在公网上)
而在这个过程中,路由器所做的不仅仅是替换源IP地址,还要替换源端口号,路由器还保存了内网请求和外网请求(IP地址+端口号)之间的一组映射表(NAPT表/转化表)。
内网主机向公网服务器发送数据如下图(替换源端口和源端口号)
服务器向内网主机发送数据时:根据上图的转化表(从右向左转化)根据请求的端口号确认要给那台内网主机响应数据。
eg:服务器先将响应发送给路由器,根据路由器NATP表映射查表可知,如果发送时源IP是202.244.174.37:1004,则路由器需要将响应发送给内网的10.0.0.11:1025。
综上,每一台路由器都要为其局域网维护NATP表。NATP表是由路由器自动生成的。
eg:在TCP下,建立连接时会生成一组映射,断开连接时这组映射就会被删除。
NAT缺陷
- 无法从外部向内部建立连接。
- 转化表的生成与销毁需要额外开销。
- 通信过程中NAT损坏,NATP表中所有的TCP连接都会断开
4.代理服务器
正向代理服务器(加速资源访问)
主机A向服务器A发送请求报文时,先将请求发送到正向代理服务器中,由正向代理向目标服务器发送请求。
同理服务器A响应时先到代理服务器上,在由代理服务器响应回主机A
在响应时,正向代理将服务器响应的资源先缓存下来,其他主机再次进行申请同样的资源就不需要再向服务器A申请了,直接向代理服务器申请即可,访问速度提高。
反向代理服务器(负载均衡,保护后端服务器)
不同主机部署相同的服务时,反向代理服务器通过算法(轮询算法)调整每一台主机的处理任务来达到负载均衡的目的。
同时,通过反向代理服务器,将主机的请求和服务器隔离开,可以在反向代理服务器上部署防火墙等来保护服务器不被恶意请求破坏。