问题描述
我知道有很多不同的 comminucation protocals
,例如:http,tcp,ssh,socks5,SMTP,POP,
等。
我也知道要实现通信,我们需要将 localhost:localport
连接到 remotehost:remoteport
。例如,如果我们用谷歌搜索某些东西,我们会将随机的本地 port
连接到 www.google.com: 80
。如果我们ssh
远程主机,我们会将随机本地 port
连接到 remotehost: 22
。
我的问题是:通信协议是半双工还是全双工?
我猜答案是Half-duplex
。因为我认为在 http
连接中,首先我们将请求从 localhost:localport
发送到 remotehost:80
,然后远程服务器将其响应从 remotehost:80
发送到 localhost:localport
.同理,在ssh
连接中,首先我们向远程主机发送了ssh
命令,远程主机收到命令后,做一些事情并将结果发送回本地主机。
所以我认为在 localhost:localport
和 remotehost:remoteport
之间的一个连接中,消息要么从 localhost:localport
发送到 remotehost:remoteport
,要么从 remotehost:remoteport
发送到 {{ 1}}。
我说得对吗?
解决方法
如this article中所述:
SSH 是一种双向全双工协议,这意味着它不像 HTTP 那样需要同步发送消息才能发生响应。
使用 SSH,即使您保持沉默,远程主机也可能想告诉您一些事情。此连接器使用回调流方法将“发送”操作与“接收”操作分离。
如 in this IETF draft 所述,大多数实现确实允许全双工 HTTP(用于 2xx 响应)。
全双工 HTTP 遵循基本的 HTTP 请求-响应语义,但也允许服务器在客户端向服务器发送请求正文的同时向客户端发送响应正文。
在现有的 HTTP(超文本传输协议——HTTP/1.1)规范中对全双工 HTTP 的要求没有明确规定,本备忘录旨在在基本 HTTP 协议语义之上阐明全双工 HTTP 的要求.