在网络传输中,数据在线路上的传送方式可以分为单工通信、半双工通信和全双工通信三种。以下我们将通过简单的叙述方式,配图了解这三种方式的定义和区别。
一、单工
定义:单工数据传输只支持数据在一个方向上传输。
举例:意思就是A只能发信号,B只能接受信号,通信是单向的。类比于灯塔发发出光信号,航船只能接受信号。
二、半双工
定义:半双工数据传输允许数据在两个方向上传输,但是在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信。
举例:指A 能发信号给B,B也能发信号给A,但这两个过程不能同时进行。可以想象一下对讲机,你收到的回复并不是都马上就有的。而且前提是双方不能在同一个状态,如果双方同时处于收状态,或同时处于发状态,便不能正常通信了。
计算机主机用串行接口连接显示终端时, 在半双工方式中,输入过程和输出过程使用同一通路 。有些计算机和显示终端之间采用半双工方式工作,这时,从键盘打入的字符在发送到主机的同时就被送到终端上显示出来,而不是用回送的办法, 所以避免了接收过程和发送过程同时进行的情况。
三、全双工
定义:全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力。
举例:全双工比半双工又进了一步。在A 给B发信号的同时,B也可以给A发信号。典型的例子就是打电话,双方都能说,对方也能听到。
网卡的全双工是指网卡在发送数据的同时也能够接收数据,两者同步进行。网卡一般都支持全双工。对于全双工以太,IEEE 制订了802.3x 全双工 / 流控制标准,该标准对全双工方式下的流控制机制做了具体的规定。
四、半双工和全双工区别
1、半双工传输模式采用载波侦听多路访问 /冲突检测。传统的共享型 LAN以半双工模式运行 ,线路上容易发生传输冲突。与集线器相连的节点(即多个节点共享一条到交换机端口的连接)必须以半双工模式运行。因为这种节点必须能够冲突检测,类似于单车道桥梁。
2 、全双工传输模式可以用于点到点以太网连接和快速以太网连接,同时不会发生冲突,因为他们使用双绞线中两条不同线路,类似于双车道桥梁。
3、一般在网卡的高级属性里可以修改网卡的双工类型,默认是自动协商。交换机上有Duplex灯,如果亮表示工作在全双工方式。绝大多数的交换机均能自动识别与支持双工方式,无需手工设置。
HTTP协议的工作模式
分版本,版本不同,工作模式不同
http1.0:通常认为http1.1以下是单工,但是我认为是有歧义的,请求方和接收方在http1.0应该就可以相互交流。这时http连接为短连接, 每次请求交互都需要建立tcp连接。
http1.1:半双工。请求应答模型,虽然引入管道传输,在请求的响应回来之前,可发送多个http请求,不用等待回复,但是也由于是请求-应答模型,对于一次请求-应答的事务来说,服务端回复需要按客户端发送的顺序返回响应,客户端在等待同一个事务回复的过程中是没办法做其他事情的。
http2.0:全双工,引入stream,多个 Stream 复用一条 TCP 连接,客户端和服务器双方都可以建立 Stream,允许服务端主动向客户端推送数据。
TCP协议的工作模式
TCP是全双工的。
可以从TCP选择重传中看出来,在每一时刻是同时存在收发端发送的帧和ACK信号的。
但是从三次握手看起来又像是半双工,但是TCP三次握手不能代表平时的数据传输,三次握手的目的是为了确立连接建立,而在实际TCP传输过程中大多情况是收发端同时发送数据的。
总结:
传输层TCP是全双工的,但是其上层应用层可能是半双工的。
每一个层次都有自己的双工模式,传输层有传输层的双工模式,应用层有应用层的双工模式。下层的双工模式是支持上层双工模式的上限。比如下层支持半双工,上层顶多支持半双工,不可能支持全双工。
tcp是全双工的,但它的上层可能支持半双工,比如http1.1,也有可能支持全双工,比如http2.0。