HTTP、TCP/IP、Socket与WebSocket的区别!

来源:互联网 发布:记事本软件的英文名 编辑:程序博客网 时间:2024/06/16 11:44

重温Socket的概念
Socket是通信的雨花石,支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,内含了网络通信须有的五中信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远程主机的IP地址,远程进程的协议端口。

独立的Socket是一对IP地址和端口。                                Socket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息送给另外一个Socket中,使这段信息能传送到另一个程序中。

Socket的作用
应用层—>通过–>传输层–>进行=数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题。为了去区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了Socket的接口,去区分不同的应用程序进程间的网络通信和连接。

Socket的实现方式
主要有3个参数:通信目地的IP地址,传输层协议TCP or UDP和协议端口号。
Socket原意是“插座”的意思,通过这3个参数结合起来,与一个“插座”Socket绑定,应用层就可以和传输层通过套接字接口来区分来自不同应用程序进程或网络连接的通信,进而实现数据传输的并发服务。

例:HostA上的程序将一段信息写入Socket中,Socket的内容被HostA的网络管理软件访问,并将这段信息通过HostA的网络接口卡发送到HostB,HostB的网络接口卡接收到这段信息后,传送给HostB的网络管理软件,网络管理软件将这段信息保存在HostB的Socket中,然后程序B才能在Socket中read这段信息。socket连接的实现方式要通过互联网进行通信,至少需要一对套接字,一个运行于客户机端(ClientSocket),另一个运行于服务端(ServerSocket).根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:       服务器监听,客户端请求,连接确认。服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是出于等待连接的状态,实时监控网络状态。客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字首先必须描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务端套接字提出连接请求。连接确认:是指当服务端套接字监听到或者说是接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了,而服务端套接字继续出于监听状态,继续接收其他客户端套接字的连接请求。

Socket与TCP/IP的关系
像创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。

Socket则是对TCP/IP协议的封装和应用(Coder上)。也可以说*TCP/IP协议是传输层协议*,主要解决数据如何在网络中传输,而*HTTP是应用层协议*,主要解决如何包装数据。

哈哈~
关于TCP/IP协议的关系、有一段比较容易理解的介绍:
(我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多:如HTTP,FIP,TELNET等,也可以自己定义应用层协议。Web使用HTTP协议作应用协议,以封装HTTP文本信息,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上)

我们在开发过程中说的最多的Socket是什么呢!    实际上就是Socket对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口API,通过Socket我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。    Socket编程接口在设计的时候,就希望也能适应其它的网络协议,so Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口:如Create、Listen、Accept、Read、Send、Write等。

哈哈~
关于Socket和TCP/IP协议关系,有一段比较容易理解的介绍:

    TCP/IP只是一个协议栈,就好比操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标注的编程接口,比如Win32编程接口一样,TCP/IP也要提供程序员做网络开发所用的接口,这就是Socket编程接口,实际上,传输层的TCP是基于网络层的IP协议,而应用层的Http协议又是基于传输层的TCP协议,哈哈~ 而Socket本身不算是协议,就如上所说,它只是提供了一个针对TCP或者UDP编程的接口,Socket是对端口通过开发的工具,它更底层一些。

Socket与HTTP的关系

在通常情况下Socket连接就是TCP连接,因此Socket一旦建立连接,通信双方即可开始相互发送数据内容,直到双方连接断开,但在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间点,例如:路由器、网关、防火墙,大部分防火墙默认会关闭长时间处于非活跃状态的连接而导致Socket连接断开,因此需要通过轮询告诉网络,该连接处于活跃状态。

而HTTP连接使用的是“请求–响应”的方式,不仅在请求需要先建立连接,而且需要客户端想服务端发出请求后,服务端才能回复数据。

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步,此时双方建立的是Socket连接,服务器就可以直接将数据传送给客户端,要是双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端,因此,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在询问 服务器是否有新的数据,如果有就将数据传给客户端。

HTTP协议是应用层协议
有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式,Socket是发动机,提供了网络通信的能力。

WebSocket与HTTP的关系
WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的。

说下相同之处
1.都是一样基于TCP的,都是可靠性传输协议。
2.都是应用层协议。

说下不同之处
1.WebSocket是双向通信协议,模拟Socket协议,可以双向发送或接收信息,HTTP是单向的。
2.WebSocket是需要握手进行建立连接的。

联系关联
WebSocket在建立握手时,数据是通过HTTP传输的,但是建立之后,在真正传输时候是不需要HTTP协议的。

WebSocket与Socket的关系
Socket其实并不是一个协议,以上有说,而是为了方便使用TCP or UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

当2台主机通信时,必须通Socket连接,Socket则利用TCP/IP协议建立连接,TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

WebSocket则是一个典型的应用层协议。

两者区别
Socket是传输控制层协议,WebSocket是应用层协议。

原创粉丝点击