主程的晋升攻略(3):IP、DNS和CDN
有段时间我面试程序猿时,喜欢问这个问题:局域网IP有哪些IP段?由这个问题再追问NAT(网络地址转换)。
为什么不是每一个设备一个公网IP?
先说个关于QQ的小故事,最早开发QQ时。小马哥他们也没想到QQ会发展成中国互联网基础设施,就用4字节整形表示QQ号了。早期内部的一些项目实用int表示QQ号。能表示的最大值是2^31-1,即21亿多。在QQ号发放近20亿时,腾讯内部搞了个22亿QQ号測试,要求每一个项目检查整改,使用unsigned int表示QQ号,以支持21亿以上的QQ号。
随着QQ号的不断增长,迟早会超出4字节的范围,那时预计得启动int64转换了。
能够看出在底层和协议设计中,字段的扩大是很麻烦的。IP地址也有类似问题。眼下广泛使用的是IPv4,一个IP地址4个字节,理论上共同拥有2^32个IP地址,接近43亿。这个数量还不到人均一个,远远不够,自然也不能每一个设备一个公网IP了。所以Internet规定了IPv4地址空间的一部份供专用地址使用。这些地址永远不会被当做公用地址来分配,局域网内部IP就是使用这些专用地址。
Internet规定的专用地址有:10.x.x.x。172.16-31.x.x,192.168.x.x。另外127.0.0.1表示本地回环地址,代表设备的本地虚拟接口。
了解这个后,假设你发现你在公司的IP是192.168.0.100,在家里的IP也是192.168.0.100时,就不会诧异了。局域网内部IP仅仅用于局域网内部通讯,要连接广域网,还要用到NAT(网络地址转换)技术。
NAT经常使用于局域网内部IP和局域网分配的公网IP之间进行转换。使用最多的是port多路复用(PAT)方式,简单的描写叙述就是,你在局域网内訪问百度时。路由器会记录你的内网IP和port(如果是192.168.0.100:12345),用路由器的公网IP和一个未使用的port向公网发网络包(如果是202.96.134.133:23456),路由器还会把202.96.134.133:23456~192.168.0.100:12345配对保存起来。
当百度的响应发到202.96.134.133:23456后,路由器通过查找配对表就知道是发给192.168.0.100:12345。
參考:百度百科 内网IP http://baike.baidu.com/view/1233066.htm
參考:百度百科 网络地址转换 http://baike.baidu.com/view/875777.htm
小问题:像华为这样的公司内部局域网能用192.168.x.x段么?
DNS有话说
搞网络管理的同学对DNS比較熟悉,程序猿也须要了解,无论是前端还是后端。
IP地址不好记,于是就有了域名。
浏览器訪问baidu.com时,会先做一次域名解析,把baidu.com这个域名解析成IP地址,然后才干发出IP包。
《DNS原理及其解析过程【精彩剖析】》对DNS介绍得挺具体的,这里就不再赘述。
在windows和linux下解析域名前,会先从本地hosts文件中查找网址映射关系,假设有,就先调用这个IP地址映射,完毕域名解析。 我们在做web开发时,会用这样的方式来切换开发环境、測试环境、预公布环境和正式环境。
假设你在万网注冊了一个个人用的域名,通常会直接用万网的DNSserver来管理该域名的解析。
对于门户站点。则会自己搭建DNSserver来管理域名。比如baidu.com/qq.com。自建DNSserver既方便管理,又能提高安全等级,防范DDOS域名攻击。
假设域名的訪问量比較大,能够让域名相应多个IP地址。操作系统会随机选择当中一个。这是最常见的web负载均衡方式。但由于DNS的变更生效时间最长可达到24~48小时(自建DNSserver能够配置更短的生效时间)。一旦某个IP的机器故障,而DNS又不能马上刷新。会让部分用户服务不可用。于是就有了用LVS/nginx来动态负载均衡的方式,LVS的负载均衡基于IP层。nginx则是用HTTP层的反向代理机制。
參考:百度百科 LVS http://baike.baidu.com/subview/645050/6406092.htm
在中国搞互联网还要考虑到电信/联通/移动三大运营商跨网的问题(有的叫南北互通问题)。运营商因不公开的原因,他们之间的通讯带宽有限,假设你的server在广州的电信机房。那么北京的联通用户訪问就会比較慢。
所以就有了双线机房的出现。双线机房实际是一个机房有电信和联通两条线路接入。
通过双线机房内部路由器设置,及BGP自己主动路由的分析。实现电信用户訪问电信线路,联通用户訪问联通线路,这样实现电信联通均能够高速訪问 。腾讯在搞开放平台后,还提供了TGW服务,实现了电信/联通/移动多网统一接入、外网网络请求转发、支持自己主动负载均衡。
參考:百度百科 BGP多线 http://baike.baidu.com/view/8584527.htm
參考:腾讯TGW简单介绍 http://wiki.open.qq.com/wiki/TGW%E7%AE%80%E4%BB%8B
CDN登场
为了给用户提供更快的訪问速度,人们发明了CDN(Content Delivery Network,内容分发网络)。简单的说就是,一个域名相应有多个IP。这些IP分布在全国各地,用户訪问域名时,DNSserver依据用户的来源IP,返回一个就近的IP给用户,从而实现更快的訪问速度。
參考:百度百科 内容分发网络 http://baike.baidu.com/view/8689800.htm
从上面的描写叙述能够知道,CDN要求各节点的内容是一致的。这样才干让各地用户訪问到一致的内容。所以CDN主要用于web静态资源的分发和加速。
web性能优化方案通常会有一条动静分离,即把静态资源使用的域名和动态脚本的域名分开。有了CDN后,通常会把静态资源的域名托管给CDN以提高更快的訪问速度和更低的成本。
聊完IP、DNS和CDN后,有啥意见或疑问,欢迎评论交流 ;)
-------- 切割线 ---------
主程的晋升攻略(1):重要的引言
主程的晋升攻略(2):技术篇概要
主程的晋升攻略(4):TCP、消息分包和协议设计
主程的晋升攻略(5):HTTP协议和二进制协议的对照
主程的晋升攻略(6):CGI和FastCGI
推荐wecode程序猿云笔记──为程序猿而生的开源、简洁高效的云笔记软件。使用有道云做云端存储。
★ 【语法高亮】眼下支持 C/C++、C#、Pascal、Java、VB.Net、XML、HTML、Python、SQL等多种方。
★ 【云端存储】除了本地笔记本外,还添加了云存储功能,眼下使用有道云笔记做为云存储。
★ 【文档加密】提供了文档加密功能。确保敏感文档的安全性。
★ 【多个本地笔记本】支持多个本地笔记本,你可以新建本地笔记本、打开、压缩和备份本地笔记本。
★ 【文章附件】可以为每一个文章加入多个附件。并可以在暂时文件夹中打开附件、导出附件。有道云的附件也存储在云端。
主程的晋升攻略(3):IP、DNS和CDN的更多相关文章
- 主程的晋升攻略(4):TCP、消息分包和协议设计
在<主程的晋升攻略(3):IP.DNS和CDN>中,一次网络请求经过DNS解析知道了目的IP,如今就要发出网络包,这里我们说一说TCP的相关话题. TCP是一种流式协议 讲网络编程的教科书 ...
- c++小学期大作业攻略(二)整体思路+主界面
写在前面:如果我曾经说过要在第一周之内写完大作业,那……肯定是你听错了.不过如果我在写的时候有攻略看的话应该可以轻松地在4~5天内做完,然后觉得写攻略的人是个小天使吧(疯狂暗示).出于给大家自由发挥的 ...
- linux内核升级图文攻略(转)
一.Linux内核概览Linux是一个一体化内核(monolithic kernel)系统.设备驱动程序可以完全访问硬件.Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置 ...
- linux内核升级图文攻略
Linux内核概览 Linux是一个一体化内核(monolithic kernel)系统. 设备驱动程序可以完全访问硬件. Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设 ...
- Windows Socket五种I/O模型——代码全攻略(转)
Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操 ...
- puppet完全攻略(一)puppet应用原理及安装部署
puppet完全攻略(一)puppet应用原理及安装部署 2012-06-06 18:27:56 标签:puppet puppet应用原理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出 ...
- 【转】轻松搞定FTP之FlashFxp全攻略
转载网址:http://www.newhua.com/2008/0603/39163.shtml 轻松搞定FTP之FlashFxp全攻略 导读: FlashFXP是一款功能强大的FXP/FTP软件,融 ...
- Android-x86虚拟机安装配置全攻略
转自Android-x86虚拟机安装配置全攻略 注:这里安装从简,具体请参考虚拟机Vmware安装运行安卓4.0详细教程 Android-x86虚拟机安装配置网上有很多,但是全部说明白的确不多,希望这 ...
- IOS面试攻略
IOS面试攻略(1.0) 2013-10-13 20:58:09| 分类: IOS面试 | 标签:ios知识点总汇 ios面试 |举报|字号 订阅 来自:伊甸网 @ 看到这个关键字,我 ...
随机推荐
- [luogu] P4155 [SCOI2015]国旗计划(贪心)
P4155 [SCOI2015]国旗计划 题目描述 A 国正在开展一项伟大的计划 -- 国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此 ...
- poi生成word2007及以上文件
一.简介 对于poi来说,poi可以完成对word.excel.ppt的处理.word目前有两种文件格式,一种是doc后缀.另一种是docx后缀的.2007之前的版本都是doc后缀的,这种格式poi使 ...
- synchronized与static synchronized 的差别、synchronized在JVM底层的实现原理及Java多线程锁理解
本Blog分为例如以下部分: 第一部分:synchronized与static synchronized 的差别 第二部分:JVM底层又是怎样实现synchronized的 第三部分:Java多线程锁 ...
- linux svn命令具体解释
检測是否安装svn:svnserve --version svn服务的关闭:killall svnserve 创建svn库:svnadmin create /opt/svn/repos 配置自己主动启 ...
- HDOJ 5294 Tricks Device 最短路(记录路径)+最小割
最短路记录路径,同一时候求出最短的路径上最少要有多少条边, 然后用在最短路上的边又一次构图后求最小割. Tricks Device Time Limit: 2000/1000 MS (Java/Oth ...
- sqlplus登录提示:ORA-12162:TNS:net service name is incorrectly specified错误
[root@localhost ~]# su - oracle [oracle@localhost ~]$ sqlplus '/as sysdba' SQL*Plus: Release 11.2.0. ...
- 开源ETL工具kettle--数据迁移
背景 因为项目的需求,须要将数据从Oracle迁移到MSSQL,不是简单的数据复制,而是表结构和字段名都不一样.甚至须要处理编码规范不一致的情况,例如以下图所看到的 watermark/2/text/ ...
- Xshell dns tunnel攻击
该域名还会向多个超长域名做渗出,且域名采用了 DGA 生成算法,通过 DNS 解析时渗出数据. 部分生成域名如下: sajajlyoogrmkjlkmosbxowcrmwlvajdkbtbjoylyp ...
- nyoj--124--中位数(水题)
中位数 时间限制:3000 ms | 内存限制:65535 KB 难度:2 描述 一组数据按从小到大的顺序依次排列,处在中间位置的一个数叫做中位数. 比如 1 5 10 11 9 其中位数就是9 ...
- Java Swing 托盘闪烁Demo实例
桌面程序当中,托盘显示是一个常用的功能. C#的WinForm程序要实现托盘是挺轻松的,而Java Swing要实现这个功能虽然也不难, 但是由于Java Swing开发者或许没有C#多,所以看到很多 ...