HTTP长连接和短连接原理浅析

本文主要讲了,http长连接本质是tcp的长连接。

网络通信过程中,建立连接的本质是什么?

连接的本质

建立连接这个词,是从早期的电话系统中来的,那个时候,“建立连接”就真的是把你的电话和对方电话在电路上连起来。所以这个名词就保留至今。

当然现在的电话网络,早就不需要为某个通信建立专门的电路连接了,单个通信链路支持多路通信复用。

从TCP角度来说,“连接”是个纯粹概念性的东西。从开发角度来看,假设我们的服务器要给隔壁老王(192.168.233.233)进行联络,基本大概的步骤是:

……

……

……

这个建立连接的详细内容可以阅读《TCP/IP详解 卷一》。

从上面的描写可以看出来,所谓网络连接,并不存在物理上的动作。

PS:这里并没有完整描述整个连接建立过程,比如DNS,ARP部分,有需要再写吧。不过建议题主若想详细了解,还是翻翻《TCP/IP详解 卷一》更好,一个回答真的说不完。

原文请百度知乎,查看。

第二人阐述:

网络通信建立连接的本质:告知彼此的第一个发送字节的初始序列号,建立连接后对每一个发送的字节,都需要

以初始序列号为原点,进行编号,需要对方来确认,每一个字节编号都已经成功接收,此乃建立连接的本质。

以大家都耳熟能详的TCP来举例,但是先强调一点,TCP 有两个状态位比较特殊,

一个是SYN,
一个是FIN,
他们各占一个字节。
A(初始序列号为0)
--------TCP 连接--------
(初始序列号为0)B

双方初始序列号是由OS动态生成的,随机的值,
一般每个TCP session都会有不一样的初始序列号,占四个字节,为了便于描述,
假定通信双方的初始序列号都为0,A先发1000字节的数据给B,发送成功之后释放连接。

Step 1: A 发送TCP SYN 给B

Step 2: B 发送TCP SYN + ACK给A

Step 3: A发送ACK给B

完成建立连接,由于SYN占用一个字节,而ACK不占用字节,其实三次握手的本质是对SYN这个编号为0,占用一个字节的数据的双向确认,
此过程完成,彼此的真正数据的交换的编号为1,1。

Step 4: A 发送1000字节给B,第一个字节的编号为1,最后一个字节编号为1000

Step 5: B发送一个包含ACK的确认号1001,意思是1001这个编号前的数据已经成功接收,如果还有数据要发送,请使用编号1001。
A主动发起释放连接

Step 6: A发送包含FIN的单向释放连接,编号1001

Step 7: B确认此释放连接请求,ACK 1002
B发起单向释放连接

Step 8: B发送包含FIN的单向释放连接,编号1

Step 9: A确认此释放连接请求,ACK 2,意思是FIN已经成功接收,连接可以释放。

另外,TCP建立连接还会有MSS,Window Size,Scaling window ,SACK,SNACK,Security Authentication option等参数的协商,
但是这些参数只是为了提高传输效率、增加TCP连接的安全性,避免没有安全保护的TCP遭到第三方的伪造TCP Reset 攻击。

第三人阐述:

连接的本质就是通信各方用一种共同认可的机制进行数据传输。

分层结构的出现就是为了大家协商出共同认可的机制,提供指导思想。TCP/IP就是这种指导思想的一种实现。

本文内容摘抄自知乎。

http长连接和短连接以及连接的本职的更多相关文章

  1. TCP同步与异步,长连接与短连接【转载】

    原文地址:TCP同步与异步,长连接与短连接作者:1984346023 [转载说明:http://zjj1211.blog.51cto.com/1812544/373896   这是今天看到的一篇讲到T ...

  2. HTTP的长连接和短连接

        本文总结&分享网络编程中涉及的长连接.短连接概念.     关键字:Keep-Alive,并发连接数限制,TCP,HTTP 一.什么是长连接 HTTP1.1规定了默认保持长连接(HTT ...

  3. HTTP的长连接和短连接——Node上的测试

        本文主要从实践角度介绍长.短连接在TCP层面的表现,借助Node.JS搭建后台服务,使用WinHTTP.Ajax做客户端请求测试,最后简单涉及WebSocket.     关键字:长连接.短连 ...

  4. (转)HTTP 长连接和短连接

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...

  5. HTTP长连接和短连接

    1.HTTP协议的五大特点1)支持客户/服务器模式2)简单快速3)灵活4)无连接每次连接只处理一个请求,服务器处理完客户的请求,并受到客户的应答后,断开连接.5)无状态协议不会记录服务器客户端状态. ...

  6. 误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

    引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HT ...

  7. Http 和TCP的关系,TCP长连接和短连接有什么区别?

    HTTP 协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用.由于HTTP在 ...

  8. 【转】HTTP中的长连接和短连接分析

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...

  9. HTTP 长连接和短连接

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...

  10. (转)HTTP长连接和短连接

    1. HTTP协议与TCP/IP协议的关系 HTTP的长连接和短连接本质上是TCP长连接和短连接.HTTP属于应用层协议,在传输层使用TCP协议,在网络层使用IP协议.IP协议主要解决网络路由和寻址问 ...

随机推荐

  1. Unity 游戏框架搭建 (十二) 简易AssetBundle打包工具(二)

    上篇文章中实现了基本的打包功能,在这篇我们来解决不同平台打AB包的问题. 本篇文章的核心api还是: BuildPipeline.BuildAssetBundles (outPath, 0, Edit ...

  2. getElementsByName和getElementById

    1: 今天分享工作中遇到的一个小细节 1.1 先介绍一下两个方法分别是: 1.2 getElementById()  :可返回对拥有指定 ID 的第一个对象的引用,如果您需要查找文档中的一个特定的元素 ...

  3. MySql Connector/C++8事务处理Demo

    #include <iostream> #include <exception> #include <vector> #include <unistd.h&g ...

  4. ABAP术语-Database Rollback

    Database Rollback 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/24/1051238.html Operation tha ...

  5. MyEclipse格式化JSP代码,其中Javascript无法格式化的原因

    MyEclipse格式化JSP代码,其中Javascript无法格式化的原因: 可能是JSP页面代码有错误的地方,而且可能是一个很微小的错误,比如多写了一个标点符号,这个需要仔细检查,包括HTML.C ...

  6. jQuery 切换图片(图标)效果

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 课时102.CSS精灵图(掌握)

    我们这节课来介绍一个和背景图片相关的东西,精灵图 1.设么是css精灵图? css精灵图是一种图像合成技术 2.css精灵图作用 可以减少请求的次数,以及可以降低服务器处理压力 3.如何使用css精灵 ...

  8. PHP接收http请求头信息

    1.PHP 自带函数 getallheaders() 目前 getallheaders() 只能用于 apache 中.如果想在 nginx 中也能使用,可以使用自定义函数. foreach (get ...

  9. Hue联合(hdfs yarn hive) 后续......................

    1.启动hdfs,yarn start-all.sh 2.启动hive $ bin/hive $ bin/hive --service metastore & $ bin/hive --ser ...

  10. PHP中文乱码分类及解决办法大全

    PHP+MYSQL做网站开发通常都会碰到浏览器输出中文字符时乱码,这个问题的原因主要是因为HTML内容编码,PHP文件编码和MySQL数据库编码这三者不一致造成的.下面我们以UTF-8为例简述一下如何 ...