上半年时白师傅去了某个易*软件公司面试实习时,被面试官问到TCP是全双工还是半双工模式?
我回答说是全双工,面试官说TCP是半双工! 当时面试房间内三个负责人看着有点紧张也没说什么。想到TCP有三次握手,应该是半双工吧?
今天看了下资料解释一下TCP的全双工。
一 TCP双方可以同时发送数据
这一点属性其实就可以完全解释为什么TCP是全双工了。
如果不理解的话可以看以下TCP差错控制中的选择重发ARQ协议,在每一时刻是同时存在收发端发送的帧和ACK信号的。
二 TCP握手为什么看起来像半双工
仔细看TCP三次握手建立连接的过程,可以看到每一时刻只有发送端发送的SYN信号或者是接收端发送的ACK确认信号。
但是!TCP三次握手不能代表平时的数据传输,三次握手的目的是为了确立连接建立,而在实际TCP传输过程中大多情况是收发端同时发送数据的。
三 传输层TCP是全双工的,但是其上层应用层可能是半双工的
每一个层次都有自己的双工模式,传输层有传输层的双工模式,应用层有应用层的双工模式。
但下层的双工模式会影响到上层,比如下层支持半双工,上层顶多支持半双工,不可能支持全双工。
tcp是全双工的,但它的上层可能支持半双工,比如http1.x,也有可能支持全双工,比如http2.,
学习笔记的记录,如有错误欢迎指正!