全双工通信与半双工通信与单工通讯
半双工通信就像对讲机,一边说话另外一边接听,同一时间无法同时进行。
全双工通信就像手机,可以一边说话一边接听,可以同一时间进行。
单工通讯就像收音机,一边只能接收,另一边只能发送。或者例如,遥控器。
TCP如何实现全双工?
HTTP协议底层是基于TCP协议,WebSocket协议底层也同样是基于TCP协议。WebSocket与HTTP都是一种协议,跟Socket不是同一个东西,Socket是一个应用程序接口是一个API,不是一个协议,这个地方不要搞混。
在TCP协议为基础的网络实现中,实现半双工通信在PC与客户端之间开辟一个通道,PC向服务器发送请求传输数据的时候开启输出流(OutputStream),而另外一端的服务器则开启开启输入流(InputStream)用来接收数据。反之,服务器开启OutputStream向客户端输出数据,PC开启 InputStream接收。但是,如何同时输入跟输出呢?单个通道显然是不可以的,所以在实现全双工的时候,必然开启两个通道,这个时候就使用到多线程来实现双通道。
总结:TCP协议下的全双工通信是通过多线程的方式打开双通道,得以使用输入输出流实现同一时间一边读取一边发送。
TCP在建立通信的时候,通过三次握手连接,四次挥手断开。
通俗理解TCP:
有一些作者喜欢讲PC与服务器之间的物理层面的连接好比是一条路,那么TCP就是货车,运送的货物就是HTTP。我觉得这种比喻,会让人产生误导。这么比喻,主要想表达HTTP这个规范,可以成为信息的载体,而TCP是让这个载体得以传递。但是,如果这样理解,不如把TCP这个协议当成是路,要比货车感觉要更合理,因为货车给人的错觉是TCP也在传输,这样导致疑惑,因为TCP一套规范是不存在移动的说法。而HTTP既可以指规范(形容词词性),当他指规范的时候,它也不存在移动的形容,HTTP也可以指传递的信息实体为HTTP(名词词性),比如,我把这块很冰的冰给你,前面的冰指状态,后面的冰指实体。
HTTP与TCP都是一种协议,之间不同的是HTTP协议是一种信息规范,所以它更倾向语言的性质,而TCP协议里面有物理层面的规范,以及包含更多的信息规范的规范统称。所以,我觉得如果要形容TCP到底是什么,最恰当的比喻,只能说它是一种沟通方式的规范,HTTP是这个沟通方式的一种实现,即使这样形容也无法百分百正确,这个地方我们要注意,使用比喻只为让我们更好理解被比喻对象的概念,而喻体并非被比喻对象本身。
什么叫做沟通方式的规范,通俗讲:你今天要跟人进行谈判,那么你的沟通方式就应该要严肃正式(这是一种TCP规范,它规范了行为人,行为过程,以及沟通方式)。如果今天今天是跟朋友聊天,那么沟通方式就是自然随性开心(这个也是一种TCP规范)。再比如,你今天要参加节目,那么你可能传递方式就不是说了,而是用唱的方式表达信息,这种唱也可以理解是一种语言,音乐的语言(TCP规范)。