这些年主要精力一直在前端,当然用的最多的是flash,也写过js、html,也稀里糊涂的搭过网站,写过jsp、php。这里面要说最深入的那肯定是flash,其他的只能说是知其然不知所以然。最近正好有机会重新重头再铺开学习一下web,把以前的一些稀里糊涂的经验再加上一些基础知识的融合,总有种豁然开朗的感觉。
准备写一系列博客来大概阐述下web的前世今生,以及各种各样的概念以及技术等。
首先推荐一本书《HTTP权威指南》。
web到今天已经是个很泛很泛的概念了,衍生出来的技术以及称谓太多太多了,以至于学习的人都忘了根本。web的根本离不开http。http从1991年发布0.9版本规范以来,已经20多年了,这期间,http也一直在与web世界一道发生变化,正是有了它,这个世界才能这么精彩。
说起http,可能任何一个人都知道一点,如同以前的我,如有很多header,有一些状态码等,但是从这些局部去了解是不够的,记住细枝末节的如状态码之类的,没有太大的意义,这些以后翻翻参考书就可以了,只有站在一定的高度去了解,才能有全盘的体会,你会发现,很多技术都是相通相连的。
最早,计算机是用来科学计算的,计算机和计算机之间是无法联系的。一批伟大的计算机大师们开始着手构建计算机与计算机之间沟通的方案,也就是网络。不难想象,就像寄快递一样,网络传输也要经过一系列复杂的流程,寄快递的人打包裹,写目的地收件人,快递公司通过各种方式(陆路、航空、水路等等)寄送到目的地,可能走错路了要打回重新快递,收件人收到了要签名,签名完了,快递公司还要通知寄快递的你的包括包裹送到了。
跟寄快递写地址、写收件人一样,要能通讯,每台电脑都要个固定的标示,这就是网卡的mac地址,相当于收件人名一样。同时,就像人会搬家,这台电脑可以今天在这里联网,也可以明天到那里联网,每次联网,都会分配一个ip地址给你,就跟门牌号似的。如今,电脑太多了,门牌号(ipv4,如大家看见的192.168.1.1这种)快分配完了,于是新的门牌号规则出来了,也就是ipv6了,容量更大。跟寄快递不一样的是,计算机联网由于要做更多的事情,如果所有的东西都往一个地方仍,很快就会乱掉,于是每台电脑可以开辟很多端口(port),每个端口处理一种业务,如80端口处理http(看网页),23端口处理ftp(拉文件之类的),当然,如果你会一点编程,你还可以自己自己绑定一个端口,自己写业务。
关于IP相关,大家可以到百科上看:
百度百科:mac地址
百度百科:ipv4
百度百科:ipv6
上面说的mac地址,ip地址,端口等等只是简单形象的说了下网络传输的一些简单概念,在这些概念之上,还要解决打包,以及谁来送、怎么送快递等等问题。
总之,所有这一切,都是由一大批计算机天才先驱们通过他们的智慧与努力实践出来的方案,这些也成了现在的各种标准,才能有今天纷繁绚丽的web世界。
网络间传输数据是复杂的工程,大师们把网络分层,也就是相当于流水线分工,将这个复杂的工程根据功能分解,并交给不同的硬件或者软件模块去实现。
理论学家们把网络分层为7层,也就是OSI七层模型,完美的理论模型,层次清晰,分工明确。
工程师们在实际工程使用中,将网络分层为4层(5层)模型,也就是TCP/IP协议。他们之间的关系如下:
具体,大家可以到百科上看:
百度百科:网络分层
百度百科:OSI七层模型
百度百科:TCP/IP协议
另外,TCP/IP协议有一本大名鼎鼎的书,有好几卷,有兴趣的同学可以去翻翻《TCP/IP详解》。
TCP是传输层协议,能够保证按照先后顺序以及完整的的发送数据。需要建立一个可靠的连接才可以传递数据,大家所熟悉的三次握手原则也是TCP特有的建立连接方式。为保证传递数据的可靠,目标收到数据后,还会反馈信息给源。源还会设法重传目标没有收到的包等等,总之效率低,但是可靠。
还有一种叫UDP的传输层协议,无需建立连接,直接扔数据出去,不管数据是否完整可靠地到达目的地。由于无需要保证传递的可靠性,因此效率高,但是不够可靠。
而应用层就是定义TCP或者UDP的数据格式,让源以及目标按照某种既定的方式发送接收数据等。如通常所说的FTP、SMTP、TELNET等等
通常所说的socket就是是操作系统开放的网络接口API,譬如通过socket API,你可以绑定一个端口(可以设置采用TCP、UDP),然后处理监听到的数据,自己实现一个应用层服务器。当然你的处理方式效率高,有实际意义,可扩展性强的话,也可以成为一个应用层协议了。
HTTP,Hypertext Transfer Protocal,超文本传输协议,就是一个建立在TCP基础上的应用层协议,他规定了源、目标之间通讯的格式,你有兴趣参看这个协议可以自己去实现一个浏览器(源)、网页服务器(目标)。
先写到这里吧,待续。
漫谈web(一):从HTTP说起(上)
发表于2013年2月28日 08:54:34 更新于2013年3月2日 12:45:08
评论
WX2013年7月27日 09:19
大作,拜读之,求第二篇。。。。
ML2013年3月2日 13:15
沙发,我靠,字数限制。。。
添加评论
分类
琐碎文字 As3&Flex RIA UG English CodingArt C++ PHP Webserver E音乐盒 Unity3d C# JS&Html5 Tools mobile golang 最近发表
- golang学习之函数/方法/接口(2022年1月6日 17:50:24)
- golang学习之零值(2022年1月6日 16:38:10)
- hello, 2018(2018年1月15日 22:47:25)
- 字体类型名词解释(2015年1月18日 11:29:14)
- 获取mysql表注释以及列注释(2014年11月13日 15:56:32)
- php连接ms sql数据库的一些问题(2014年9月15日 20:32:14)
- virtualbox虚拟网络:NAT&bridge桥接网络(2014年8月25日 22:51:35)
- php图片加水印(2014年8月15日 22:50:42)
- windows查看端口占用情况(2014年7月31日 21:19:30)
- android安卓activity生命周期(2014年7月12日 10:31:47)
最近回复