文章目录

  • 单工、全双工、半双工
    • 1. 单工
    • 2. 半双工
    • 3. 全双工
  • HTTP协议的工作模式
  • TCP协议的工作模式

本文参考:

图解网络传输单工、半双工、全双工 - 知乎 (zhihu.com)

问:HTTP是单工的还是双工的还是半双工的 - 简书 (jianshu.com)

关于TCP全双工模式的解释_忙碌了一天的白师傅的博客-CSDN博客_tcp全双工

单工、全双工、半双工

1. 单工

定义:单工数据传输只支持数据在一个方向上传输。

例如:灯塔发发出光信号,航船只能接受信号

2. 半双工

定义:半双工数据传输允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。

例如:http1.1,对讲机,只能让一个人说一个人听

实现原理:半双工传输模式采用载波侦听多路访问 /冲突检测。传统的共享型LAN以半双工模式运行 ,线路上容易发生传输冲突。与集线器相连的节点(即多个节点连接到集线器,共享一条到交换机端口的连接)必须以半双工模式运行。因为这种节点必须能够冲突检测,类似于单车道桥梁。

3. 全双工

定义:全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。

例如:http2.0websocket,打电话,双方都能说对方也都能听到

实现原理:全双工传输模式可以用于点到点以太网连接和快速以太网连接,同时不会发生冲突,因为他们使用双绞线中两条不同线路,类似于双车道桥梁。

HTTP协议的工作模式

分版本,版本不同,工作模式不同

  1. http1.0:通常认为http1.1以下是单工,但是我认为是有歧义的,请求方和接收方可以相互交流。http连接为短连接, 每次请求交互都需要建立tcp连接。
  2. http1.1:半双工。请求应答模型,虽然引入管道传输,在请求的响应回来之前可先后发送多个http请求,不用等待回复,但是是请求-应答模型,对于一次请求-应答的事务来说,服务端回复需要按客户端发送的顺序返回响应,客户端在同一个事务等待的过程中是没办法做其他事情的。
  3. http2.0:全双工,引入stream,多个 Stream 复用在一条 TCP 连接,客户端和服务器双方都可以建立 Stream,允许服务端主动向客户端发送数据。

TCP协议的工作模式

TCP是全双工的。

可以从TCP选择重传中看出来,在每一时刻是同时存在收发端发送的帧和ACK信号的。

但是从三次握手看起来又像是半双工,但是TCP三次握手不能代表平时的数据传输,三次握手的目的是为了确立连接建立,而在实际TCP传输过程中大多情况是收发端同时发送数据的。

总结:传输层TCP是全双工的,但是其上层应用层可能是半双工的。每一个层次都有自己的双工模式,传输层有传输层的双工模式,应用层有应用层的双工模式。下层的双工模式是支持上层双工模式的上限。比如下层支持半双工,上层顶多支持半双工,不可能支持全双工。tcp是全双工的,但它的上层可能支持半双工,比如http1.1,也有可能支持全双工,比如http2.0。

比较全面的HTTP和TCP网络传输的单工、全双工和半双工相关推荐

  1. 解决TCP网络传输“粘包”问题

    当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport contro ...

  2. UNIX网络编程——解决TCP网络传输“粘包”问题

           当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API).TCP/IP传输层有两个并列的协议:TCP和UDP.其中TCP(transport ...

  3. 解决TCP网络传输粘包问题

    作者:杨小平  王胜开 文章出处:http://blog.csdn.net/michelsn/archive/2008/01/02/2009894.aspx 当前在网络传输应用中,广泛采用的是TCP/ ...

  4. UDP/TCP网络传输方式

    网络传输方式 1.面向无连接型: 不要求建立和断开连接,发送端可于任何时候自由发送数据. 反之, 接收端也永远不知道自己会在何时从那里接收到数据. 因此, 面向无连接的情况下, 接收端需要时常确认是否 ...

  5. 基于CAsyncSocket类模拟TCP网络传输之客户端

    本例程对应的服务端请看https://blog.csdn.net/qq_34911636/article/details/88254711 本例程通信的流程和操作请看https://blog.csdn ...

  6. 网络编程—代码—TCP网络传输

    一.TCP:用字符流传输信息 ------------------------------------------------------------------------------ [用字符流的 ...

  7. windows下tcp网络传输

    1.服务端 #include <stdio.h> #include <WinSock2.h> #include <stdlib.h> #pragma comment ...

  8. 网络请求优化之全双工,半双工

    请求后端服务时,如果频繁的创建短连接,必然会带来比较大性能损耗和高请求延时.复用长连接主要有以下两种方式: 半双工,基于Connect Pool,每次从Pool中拿到一个 Connect,发包并收到回 ...

  9. 网络传输层之TCP、UDP详解

    1.传输层存在的必要性 由于网络层的分组传输是不可靠的,无法了解数据到达终点的时间,无法了解数据未达终点的状态.因此有必要增强网络层提供服务的服务质量. 2.引入传输层的原因 面向连接的传输服务与面向 ...

最新文章

  1. 哈希表的分类,创建,查找 以及相关问题解决
  2. binlog_group_commit_sync_delay 参数对并发的影响
  3. 总结一下遇到的各种核函数
  4. open-capacity-platform 项目启动
  5. java中文字符怎么保证出现正确_JAVA中文字符编码问题详解
  6. javascript与三角函数之二:圆周运动
  7. CTO被裁,离职前给组了的高级开发们8个建议。
  8. band math函数_波段运算(bandmath)工具中常用的函数和实例.docx
  9. 如何查找求职简历模板及pdf编辑器去水印
  10. MYSQL闪退的解决方法
  11. 解决Sublime Text 3在GB2312编码下的中文乱码问题
  12. RoaringBitmap
  13. python 单词纠错_自然语言处理1——语言处理与Python(内含纠错)
  14. 解决.NET报错【80040154 没有注册类】的问题
  15. Android——横幅通知
  16. js获取用户浏览器信息和ip地址以及位置
  17. python 选择文件对话框插件_Python DearPyGui 常用控件一
  18. Mac M1芯片Android Studio使用模拟器
  19. parentElement\parentNode.parentNode.childNodes用法例子
  20. Logisim的使用

热门文章

  1. 摘录:三件大事和三件小事
  2. 三十而立,从零开始学ios开发(十一):Tab Bars和Pickers
  3. Matlab使用coder.checkGpuInstall时报错‘emlc:compilationError‘
  4. 为了更广阔的行业应用!达索、水晶石、NVIDIA三方共建VR行业应用推广中心
  5. JAVA SWING 台球收费系统 设置台球桌数量
  6. 解决SP3自定义桌面里没有IE选项的办法
  7. 叩问教育公平:财经郎眼20150209
  8. 通信原理简明教程 | 现代数字调制
  9. z7 mini Android8.1,Z7 mini(支持电信4G版本)
  10. 双十一有哪些数码产品值得买、这几款高性价比好物超值