主程序员的练成:IP、DNS和CDN

1278人阅读 评论(0) 收藏 举报
分类:

目录(?)[+]

有段时间我面试程序员时,喜欢问这个问题:局域网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之间进行转换,使用最多的是端口多路复用(PAT)方式,简单的描述就是,你在局域网内访问百度时,路由器会记录你的内网IP和端口(假设是192.168.0.100:12345),用路由器的公网IP和一个未使用的端口向公网发网络包(假设是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开发时,会用这种方式来切换开发环境、测试环境、预发布环境和正式环境。

如果你在万网注册了一个个人用的域名,一般会直接用万网的DNS服务器来管理该域名的解析。对于门户网站,则会自己搭建DNS服务器来管理域名,例如baidu.com/qq.com。自建DNS服务器既方便管理,又能提高安全等级,防范DDOS域名攻击。

如果域名的访问量比较大,可以让域名对应多个IP地址,操作系统会随机选择其中一个,这是最常见的web负载均衡方式。但因为DNS的变更生效时间最长可达到24~48小时(自建DNS服务器可以配置更短的生效时间),一旦某个IP的机器故障,而DNS又不能立即刷新,会让部分用户服务不可用。于是就有了用LVS/nginx来动态负载均衡的方式,LVS的负载均衡基于IP层,nginx则是用HTTP层的反向代理机制。
参考:百度百科 LVS  http://baike.baidu.com/subview/645050/6406092.htm

在中国搞互联网还要考虑到电信/联通/移动三大运营商跨网的问题(有的叫南北互通问题)。运营商因不公开的原因,他们之间的通讯带宽有限,如果你的服务器在广州的电信机房,那么北京的联通用户访问就会比较慢。所以就有了双线机房的出现。双线机房实际是一个机房有电信和联通两条线路接入。通过双线机房内部路由器设置,及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分布在全国各地,用户访问域名时,DNS服务器根据用户的来源IP,返回一个就近的IP给用户,从而实现更快的访问速度。
参考:百度百科 内容分发网络  http://baike.baidu.com/view/8689800.htm

从上面的描述可以知道,CDN要求各节点的内容是一致的,这样才能让各地用户访问到一致的内容,所以CDN主要用于web静态资源的分发和加速。

web性能优化方案一般会有一条动静分离,即把静态资源使用的域名和动态脚本的域名分开,有了CDN后,一般会把静态资源的域名托管给CDN以提高更快的访问速度和更低的成本。

聊完IP、DNS和CDN后,有啥意见或疑问,欢迎评论交流 ;)

查看评论

域名解析和cdn 原理

用户访问未使用CDN缓存网站的过程为:   1)、用户向浏览器提供要访问的域名;   2)、浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;   3)、浏览...
  • 21aspnet
  • 21aspnet
  • 2011-07-07 09:58:02
  • 10727

CDN(内容分发网络)技术原理

1. 前言   Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器...
  • liuhongxiangm
  • liuhongxiangm
  • 2013-04-10 21:18:49
  • 1486

CDN与SDN

CDN:Content Delivery Network 内容分发网络 CDN的基本思路:   是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,   使内容传输的更快...
  • datamining2005
  • datamining2005
  • 2017-04-01 13:24:26
  • 456

CDN和DNS的区别

相信有很多的朋友会被这几个名词绕的有些头大,很多朋友觉得智能DNS跟双线加速、CDN加速是类似的技术。其实不然,虽然他们的目的都是一个:让用户更快的访问网站。但是他们的应用原理却大相径庭。大家一定很清...
  • Flyfish_L
  • Flyfish_L
  • 2016-12-22 16:13:30
  • 2452

DNS和CDN的区别与联系

DNS和CDN的区别与联系 数字信前线 百家号|05-04 19:40 关注 现在互联网用户很多不能理解CDN和DNS之间的关系,他们之间到底有什么区别。对于这...
  • jfkidear
  • jfkidear
  • 2017-06-09 18:13:47
  • 656

Web缓存

Web缓存的作用与类型 前言&摘要 这段时间的工作内容主要是为一个客户端类型的产品增加文档在线存储和文档在线预览相关特性。由于测试的同事比较细心和专业,发现了项目实现中一些效率低下的环...
  • bamboolsu
  • bamboolsu
  • 2015-11-17 15:01:43
  • 1975

盘点国内网站常用的一些 CDN 公共库加速服务

https://www.oschina.net/news/53128/public-cdn
  • ccfxue
  • ccfxue
  • 2016-11-11 16:26:12
  • 227

浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

s
  • king_a_123
  • king_a_123
  • 2016-10-11 10:04:23
  • 3579

简要对比下HTTP-DNS调度和302跳转调度之间的区别

先上图,图是为了简要说明,没有画的那么具体,那么细。 接来下说干货: 相同之处,都是基于HTTP协议来请求得到调度结果。 不同之处: 1、HTTP-DNS协议只是将域名解析的协议由DNS协议换...
  • charleslei
  • charleslei
  • 2016-04-06 20:08:30
  • 3745

如何搭建一个完整的视频直播系统?

姚冬 ,填坑侠 收录于 编辑推荐 •1875 人赞同 视频直播,可以分为 采集,前处理,编码,传输,解码,渲染 这几个环节,下面分别说下: 采集,iOS是比较简单的,Androi...
  • qq_34047841
  • qq_34047841
  • 2016-07-20 15:52:06
  • 5822
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 189万+
    积分: 2万+
    排名: 389
    个人淘宝
    博客专栏
    最新评论