聊聊web的底层-TCP

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连接复用等,敬请期待。

如果您有兴趣,请关注我的微信公众号,谢谢。

时间: 2024-08-09 06:14:36

聊聊web的底层-TCP的相关文章

聊聊web的底层

最近几年web如火如荼的发展,导致许多开发人员都去关注html,JavaScript,CSS这些实际的技术,却很少关注一些底层的机制. 上一篇[性能优化-web篇]中讲到很多web方面的优化方法,这些方法都偏重于实践,而没有讲为什么要这么做,相信很多人也是人云亦云,并不知道这些方法的真正原理. 所以本篇就带大家深挖一下web相关的HTTP,头文件,传输实体,TCP/IP等这些涉及基础的东西,从深层次来剖析web.知其然也要知其所以然,才能更好地理解web相关的技术. 首先我们来看看web的分层

聊聊web的底层-HTTP

HTTP全称Hypertext Transfer Protocol,即超文本传输协议.超文本即我们常说的富文本. HTTP的最新版本是1.1,从1997年至今,由于其稳定性和实用性,一直就没有正式的升级过.2.0的协议现在还没有正式版,因为1.1的稳定以及普遍性,完全替代,还遥遥无期.但是2.0一些新特性,比如长连接(服务器推送消息),已经在最新的浏览器和服务器中实现. HTTP每次连接,都包含2个部分:头域(头文件)和实体.这些名词太专业有木有,举个简单的例子吧. 比如发顺丰快递,对方的地址,

【大话QT之十一】题外篇:万能脚本助Web执行底层Linux命令

需求分析: 这里先要说明的是,这一篇不是QT系列的文章,而是关于Web的,之所以要写这篇,是因为以前做Web相关开发的时候,经常涉及到与linux底层命令打交道,比如说创建一个目录,删除一个目录,或者是执行一个自定义的脚本.关于PHP如何调用.执行Linux的底层命令,以前也研究过,基本上实现了自己需要的功能,但是有些地方一直没有弄明白.今天又偶然碰到了,趁着这个机会向大家描述一下一步一步应该如何实现,并最后附上相关C代码. 原理实现: 首先,一般搭建的Web站点都是采用Apache或Nginx

万能脚本助Web执行底层Linux命令

需求分析: 这里先要说明的是,这一篇不是QT系列的文章,而是关于Web的,之所以要写这篇,是因为以前做Web相关开发的时候,经常涉及到与linux底层命令打交道,比如说创建一个目录,删除一个目录,或者是执行一个自定义的脚本.关于PHP如何调用.执行Linux的底层命令,以前也研究过,基本上实现了自己需要的功能,但是有些地方一直没有弄明白.今天又偶然碰到了,趁着这个机会向大家描述一下一步一步应该如何实现,并最后附上相关C代码. 原理实现: 首先,一般搭建的Web站点都是采用Apache或Nginx

聊聊Web App、Hybrid App与Native App的设计差异

目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web App.Hybrid App. Native App. 1. Web APP Web App 指采用Html5语言写出的App,不需要下载安装.类似于现在所说的轻应用.生存在浏览器中的应用,基本上可以说是触屏版的网页应用. 优点 (1)开发成本低, (2)更新快, (3)更新无需通知用户,不需要手动

超赞!聊聊WEB APP、HYBRID APP与NATIVE APP的设计差异

编者按:这3类主流应用你都了解吗?设计师除了要有视觉功夫,对不同形式的APP也应当了然于胸,今天百度的同学写了一篇非常全面的总结,帮你迅速搞定3类主流APP的设计方法,附带一大波避雷针,带你巧妙跳过APP设计的雷区,涨姿势是分分钟刻不容缓的事咯! 目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web App.Hybrid App. Native App

聊聊 Web 项目二维码生成的最佳姿势

在设计和实现的过程之后,你永远不知道部署上去的程序会已什么样的姿势运行. 本篇借一次生成二维码逻辑的不同实现,阐述 Web 项目中二维码生成的正确姿势. 文中如有批量,欢迎各位看客老爷拍砖.试运行前5天实现的逻辑是这样的: 客户 ajax 请求生成二维码,后端服务洞悉这一请求,生成二维码(可参照我博客:Google Zxing 二维码生成与解析). 并将二维码已用户 ID 进行命名存储在项目工程 /webcontent/qrcode/AAAAAAAAAAAAAA.png 当中. 使用用户 ID

【转载|前端科普】聊聊Web App、Hybrid App与Native App的设计差异

目前主流应用程序大体分为三类:Web App.Hybrid App. Native App. 一.Web App.Hybrid App.Native App 纵向对比 首先,我们来看看什么是 Web App.Hybrid App. Native App. 1. Web APP Web App 指采用Html5语言写出的App,不需要下载安装.类似于现在所说的轻应用.生存在浏览器中的应用,基本上可以说是触屏版的网页应用. 优点 (1)开发成本低, (2)更新快, (3)更新无需通知用户,不需要手动

Python web编程 初识TCP UDP

Python网络编程之初识TCP,UDP 这篇文章是读了<Python核心编程>第三版(Core Python Applications)的第二章网络编程后的自我总结. 如果有不到位或者错误的地方,还请大家积极指出. 首先谈谈TCP和UDP的不同这个问题出现在很多次Python面试题中,以下答案是我根据书本来总结出的: 在谈该问题之前,我需要先简单说一下套接字的概念: 套接字是计算机网络数据结构,他体现了“通信端点的”概念.在任何类型的通信开始之前,网络应用程序必须创建套接字.可以将他们比作电