TCP/IP 协议支持全双工的一些疑惑

2021-02-23 10:17:03 +08:00
 bbbai

今天猛然惊觉 ,TCP/IP 是支持全双工传输的,但是在印象中一般都是使用多线程进行处理,比如一个线程负责接收,一个线程负责发送。这样的话不就是等同于每线程同一时间要么处理接收要么处理发送,这不就是半双工了么。

对此实在感到不解。TCP/IP 支持全双工的具体表现形式和应用场景是什么样的?

如果有了解此处问题的还望不吝赐教。

3502 次点击
所在节点    问与答
17 条回复
monsterxx03
2021-02-23 10:37:24 +08:00
比如 http2 的 multiplexing , 在同一个 tcp connection 上跑多个 stream, 好处是减少了 latency(只需要一次连接建立), 坏处是单 connection 用不上多核, 很注重吞吐量的场景还需要在这之上实现一个线程池.
sagaxu
2021-02-23 10:39:45 +08:00
非阻塞 io 了解一下
misaka19000
2021-02-23 10:40:40 +08:00
全双工和线程有什么关系
si
2021-02-23 10:45:16 +08:00
你的线程怎么处理和 TCP/IP 全双工没有关系啊,TCP/IP 的全双工只是说 TCP/IP 的底层处理的。
全双工是指一方发送的时候,另一方也可以同时发送,对应过来就是可以同时发送和接收。
半双工是一方发送的时候,另一方要接收完成才可以开始发送。
发送和接收是不同的 buffer,两种操作可以同时进行就是全双工。如果发送要等接收结束,接收要等发送结束,就是半双工。
换到你的线程上来说,一个线程 A 正在接收,另一个线程 B 同时可以发送,线程 B 不用等 A 接收完成再发送。发送不影响接收,接收不影响发送。
就算只有一个线程,用非阻塞的 API 发送和接收,正在发送的时候也不用等待发送结束就可以开始处理收到的数据。
不管线程有没有正在执行,都不影响网卡的发送和接收处理。
这个全双工、半双工和线程没有什么关系。
noe132
2021-02-23 10:52:47 +08:00
全双工是物理层的吧?和 tcp 有啥关系么
newtype0092
2021-02-23 10:54:18 +08:00
打一通电话,既有听筒又有话筒,能边听边说,这就是全双工。
两个人拿同一个电话,一个只用听筒听,一个只用话筒说,就是你说的多线程,这并不影响这通电话是按全双工的方式工作的,只是你这端把收发分别处理了而已。

如果是半双工电话,那通话就要同时打两通电话,第一通设置为只能你说对面听,保持住,然后再打一通,设置为只能你听对面说,这样两边才能对话。
Jooooooooo
2021-02-23 10:54:28 +08:00
cpu 单核一个时钟只能干一件事, 你理解一下.
liuminghao233
2021-02-23 12:24:09 +08:00
两个 tcp 对端难道不能同时发送数据吗
systemcall
2021-02-23 13:08:01 +08:00
@noe132 #5
物理层的话,记得 WiFi 一般是半双工的,一个周期内要么收要么发。百兆的以太网也是支持全双工和半双工的
串口通信全双工模式也不是一边处理发送一边处理接收吧,还是要读对应寄存器看缓冲区有没有满、有没有收到数据之类的。没有写过以太网的东西,不清楚
fucUup
2021-02-23 13:43:34 +08:00
一般是 Epoll 边缘触发,另外,不要造垃圾轮子
ungrown
2021-02-23 13:57:58 +08:00
@noe132 #5 一语惊醒梦中人,确实 TCP 哪来的全双工半双工的说法嘛
alw
2021-02-23 14:59:26 +08:00
好家伙,这个好像一般是串口通信里的用到的名词,搞电子的可能知道。
我估计 计算机科班有可能没听说过 什么叫全双工。
ScepterZ
2021-02-23 15:19:57 +08:00
lz 的问题看起来是忘记了 cpu 是多核的,可以并行处理
julyclyde
2021-02-23 15:34:56 +08:00
@newtype0092 你这两通电话不是半双工,而是两个单工
julyclyde
2021-02-23 15:35:50 +08:00
lz 以为是半双工,其实并不是 tcp/ip 的问题,而是应用层协议是应答型导致的
如果你不考虑请求应答,只是发数据的话,就可以全双工了
aheadlead
2021-02-23 15:46:41 +08:00
@alw #11 ……计算机科班只是不常用这个词,但应该还是要知道的
newtype0092
2021-02-23 16:08:46 +08:00
@julyclyde 额,确实我写草率了,应该是同一条线路可切换方向但不可同时传输。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/755345

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX