zoukankan      html  css  js  c++  java
  • tcp与http传输效率通俗解释

    可以再去回顾一下我之前做的笔记:TCP、HTTP、Socket :https://www.cnblogs.com/xtxt1127/p/12341530.html

    今天做项目不知道把原来的http协议改为tcp协议有什么区别,会不会http效率更高一点哇,

    于是我百度了一下  “tcp和http哪个传输效率高”  这个问题,发现这个问题真是个问题问题,闹笑话了。。

    1.两个不同层面的协议无法比较。

      HTTP是应用层的协议,TCP是传输层协议,IP是网络层协议,本质上没有可比性。

    2.何况HTTP协议是基于TCP连接的。

      这个比较就好像要比较飞机上的人的速度快还是飞机的速度快一样。人在飞机上,受飞机速度影响,HTTP就好比人,TCP就好比飞机。

      人在飞机上跑,那人就比飞机快。哈哈,说笑的

    3.还有人说,

       局网tcp/ip 快,广网http 快。(不知道正确与否)

    通俗的说,

    TCP /IP协议就是搬运工,保证搬动的东西不被损坏  

    保证连接的可靠性,我不管发出任何东西给你,都要有这一套协议来保证不丢包
    比如说TCP协议就是这样,无论上层让他传啥数据,他都通过与IP协议的操作,把这些东西分段,然后输送,同时保证在这个过程中,数据不会丢,如果丢了一块,他还得想办法重新传一次。


    http协议做业务的,用来决定要不要搬运,以及如何搬运,从哪去搬运 

    http里面规定了我们访问网页的时候如何进行缓存,以及请求什么格式。等等,主要是为了让人们访问网页的时候更快,更安全,而规定了很多参数。

    那HTTP和TCP分别代表了什么呢?

    HTTP的责任是去定义数据,在两台计算机相互传递信息时,HTTP规定了每段数据以什么形式表达才是能够被另外一台计算机理解。

    TCP所要规定的是数据应该怎么传输才能稳定且高效的传递与计算机之间。

    HTTP的核心概念

    除了HTTP存在于应用层之外,该协议还有5个特点。

    1. HTTP的标准建立在将两台计算机视为不同的角色:客户端和服务器。客户端会向服务器传送不同的请求(request),而服务器会对应每个请求给出回应(response)。

    2. HTTP属于无状态协议(Stateless)。这表示每一个请求之间是没有相关性的。在该协议的规则中服务器是不会记录任何客户端操作,每一次请求都是独立的。(记录用户浏览行为会通过其他技术实现)

    3. 客户端的请求被定义在几个动词意义范围内。最长用到的是GET和POST,其他动词还包括DELETE, HEAD等等。

    4. 服务器的回应被定义在几个状态码之间:5开头表示服务器错误,4开头表示客户端错误,3开头表示需要做进一步处理,2开头表示成功,1开头表示在请求被接受处理的同时提供的额外信息。

    5. 不管是客户端的请求信息还是服务器的回应,双方都拥有一块头部信息(Header)。头部信息是自定义,其用途在于传递额外信息(浏览器信息、请求的内容类型、相应的语言)。

    TCP的核心概念

    在HTTP的规范内,两台计算机的交互被视为request和response的传递。而在实际的TCP操作中,信息传递会比单纯的传递request和response要复杂。通过TCP建立的通讯往往需要计算机之间多次的交换信息才能完成一次request或response。

    TCP的传输数据的核心是在于将数据分为若干段并将每段数据按顺序标记。标记后的顺序可以以不同的顺序被另一方接收并集成回完整的数据。计算机对每一段数据的成功接收都会做出相应,确保所有数据的完整性。

    TCP在传递数据时依赖于实现定义好的几个标记(Flags)去向另一方表态传达数据和连接的状态:

    * F : FIN - 结束; 结束会话
    * S : SYN - 同步; 表示开始会话请求
    * R : RST - 复位;中断一个连接
    * P : PUSH - 推送; 数据包立即发送
    * A : ACK - 应答
    * U : URG - 紧急
    * E : ECE - 显式拥塞提醒回应
    * W : CWR - 拥塞窗口减少

    也是基于这些标志TCP可以实现三次(three ways handshake)和四次握手 (four ways tear down)。三次握手是初步建立连接的机制,而四次握手则是断开链接。两者之间大致操作是一样的,A发出建立链接(SYN)或者断开链接(FIN)的请求,B认可(ACK)其请求然后发出同样的请求给A并等待A的认可。在双方认可后,链接正式成立或者断开。

    这里有两个问题:

    1. 为什么A发出请求并且得到认可后B还有重复同样的动作?

    在建立连接的过程中SYN标记代表的是一个随机序列号,因为当文件被切断的时候并不是从0或者1开始标记每段的顺序,所以双方都需要通过传递SYN来告知文件片段的第一个序列是多少号。

    2. 为什么同样的机制,建立链接和断开链接需要握手的次数不同?

    三次和四次握手的区别在于,在建立连接时,B的ACK和SYN会一起发送回A,而在断开链接时因为B发送ACK之后还要做其他处理后才能返回FIN,,因此将两步拆开。
    ————————————————
    摘自:https://blog.csdn.net/weixin_40784198/article/details/81434530

  • 相关阅读:
    转:使用vs2013打开VS2015的工程文件的解决方案(适用于大多数vs低版本打开高版本)
    linq 动态组合条件
    转:Web应用程序项目XX已配置为使用IIS
    转:centos彻底删除文件夹、文件命令
    转:WebClient类(温习一下)
    解决 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务
    转:装完Centos7提示Initial setup of CentOS Linux 7 (core)
    PL/SQL Developer 登录 Oracle 12c和Win10下安装Oracle 11g
    centos7-linux安装docker(离线方式)
    windows7安装gitblit
  • 原文地址:https://www.cnblogs.com/xtxt1127/p/12497569.html
Copyright © 2011-2022 走看看