web是基于TCP/IP来传输数据的,要想了解web,必须先了解TCP/IP的相关原理。
TCP全称:Transmission Control Protocol,中文传输控制协议。相较于TCP,还有其他的传输协议,比如UDP,FTP,这些大家大概都听说过。
说什么传输协议,很多人觉得很高级。通俗点说:就是一个文件从一台PC上复制到另外一台PC上使用的方法。
比如你访问百度,其实是你复制百度页面的HTML文件,CSS文件,图片文件等等,在浏览器打开显示而已。至于copy的方法,就是协议的具体实现内容。
那么TCP是如何传输数据呢?(TCP的经典三次握手)
还是拿我的电脑请求百度的一张image来讲:
第一次握手:我的电脑向百度的服务器电脑喊一句(SYN):百度小哥,能不能约,求回复!
第二次握手:百度小哥回复:帅哥,能约!我在百度大厦,快过来吧。
第三次握手:我的电脑回复:好,知道了,我马上过来。
经过这三次握手,我的电脑就与百度服务器成功约上,至于约上之后的激情事,请自行YY,很多宅男,肯定45度望天,嘴角微笑....
别想太多,我的电脑只是打开了一张图片:
很多人看到这里,肯定觉得,原来建立一次TCP连接跟约X一样复杂,累觉不爱呀!
由于三次握手的低效性,在处理web时,一定要合并一些JS,CSS等文件,以提升效率。
了解过TCP是如何建立连接,再来看看TCP的几大特点
可靠性
TCP协议中,包含数据确认,重发等机制。确保对方一定收到数据。
刚才我的电脑约百度,百度服务器发送给我图片后,然后问我:小哥,收到没?
由于我的PC在喝茶,没空回复它(超时)百度又发送一次给我。又问:小哥,收到没?
有人肯定会问,百度会一直重发吗? TCP默认重发三次,如果没有回复,即不会重发了,当然这个次数是可以设置的。
HTTP正是基于TCP的可靠性,迅猛发展,成为现在web的基础。
无状态性
TCP的每次连接都不保存状态,用完即销毁,下次连接和本次连接没有任何关系。这跟现实世界是一样一样的,本次约和下次约肯定是不一样的!!
很多人都知道HTTP是无状态的,根本原因是HTTP构建于TCP之上的缘故。
无状态性,保持TCP连接的简单性,当然在一定程度上降低了效率。
在下一章中,我们将讲解HTTP为了提升效率,加上了连接复用的功能,在HTTP2.0中也引入了长连接功能。
分段
如果数据太大,TCP是对数据自行分段的。每个分段上加上顺序码,确保接受后,可以正确重组。
现在的多线程下载以及断点续传都是使用了传输协议的分段机制。
当然,下载不一定是基于TCP协议。
TCP简单原理到此讲解完毕,中间还有很多涉及报文,重发,传输的细节,请自行研究。
下一章,将讲解HTTP基于TCP进行的优化方法,以及HTTP连接复用等,敬请期待。
如果您有兴趣,请关注我的微信公众号,谢谢。