本文介绍: SOCKET、TCP、HTTP之间区别与联系SOCKET、TCP、HTTP之间区别与联系。

SOCKET、TCP、HTTP之间的区别与联系
一、 Socket

二、HTTP(基于TCP)

三、TCP/IP协议簇
四、HTTP、Socket、TCP的联系

五、HTTP、Socket、TCP的区别

六、常见问题

Long connection, Socket and tomcat containers

SOCKET、TCP、HTTP之间的区别与联系

联系

两个计算机进行网络通讯使用TCP协议就够了,双方就能收发数据,但是无法解析数据

HTTP协议解决浏览器服务器之间通讯协议的数据格式解析

HTTP协议基于TCP协议通过TCP协议传输数据;HTTP协议是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用

Socket接字通信的基石,是程序员能够进行 TCP/IP 编程最小单位。是支持TCP/IP协议的网络通信基本操作单元使用 TCP 协议进行连接时,该 Socket 连接就是一个TCP 连接。

区别

HTTP是应用层的协议,更靠近用户端TCP是传输层的协议socket是从传输层抽象出来的一个抽象层,本质接口

HTTP是短连接,Socket(基于TCP协议的)是长连接

HTTP连接服务端无法主动发消息客户端发送的每次请求服务器需要回送响应。Socket连接双方请求发送先后限制

一、 Socket

1、什么socket

接字socket)是通信的基石,是支持TCP/IP协议的网络通信基本操作单元

它是网络通信过程端点抽象表示包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。(其实就是bind绑定

2、为什么需要socket

应用层通过传输层行数通信时,TCP会遇到同时为多个应用程序进程提供并发服务问题多个TCP连接或多个应用程序进程可能需要通过同一个 TCP 协议端口传输数据

为了区别不同应用程序进程和连接,计算机操作系统应用程序与TCP/IP协议交互提供了套接字(Socket)接口

应用层可以传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输并发服务

3、建立socket连接

前面学习socket网络编程过程中,我们已经对这一个过程有了深刻的认识,由于本文更多了解的是概念性的东西,在这里不做socket编程展开

(1)建立Socket连接至少需要一对接字socket函数),其中一个运行客户端称为ClientSocket ,另一个运行服务器端称为ServerSocket 。

(2)bind网络通信必须的五种信息绑定

(3)套接字之间的连接过程分为三个步骤服务器监听客户端请求,连接确认

二、HTTP(基于TCP)

1、HTTP的概念

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用

2、HTTP连接的特点

连接请求一次连接

HTTP连接最显著的特点是客户端发送的每次请求服务器都需要回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为一次连接”。

(1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
(2)在HTTP> 1.1中,则可以一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

连接请求:短连接(socket是长连接)

由于HTTP在每次请求结束后服务端都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户程序在线状态客户端需要向服务器不断地发起连接请求。

服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开

通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定时间服务器发送一保持连接的请求(心跳包),服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。

三、TCP/IP协议簇

TCP/IP(Transmission Control Protocol/Internet Protocol传输控制协议/网际协议)是指能够在多个不同网络实现信息传输的协议簇。

注意:TCP/IP 协议不仅仅指的是 TCP 和 IP 两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在 TCP/IP 协议中 TCP协议 和 IP 协议最具代表性,所以被称为 TCP/IP 协议。

TCP/IP传输协议对互联网中各部分进行通信的标准方法进行了规定。

就像配置串口通信一样,通信双方要提前制定好规则,这样接受信息的过程、接受到的信息才会正确

四、HTTP、Socket、TCP的联系

1、SOCKET 是操作 TCP/IP 的编程接口

创建Socket连接时,可以指定使用传输层协议,Socket可以支持不同传输层协议(TCP或UDP),例如使用 TCP 协议进行连接时,该 Socket 连接就是一个TCP 连接。

程序员的层面上来说:socket 则是对 TCP/IP 协议的封装应用

Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口设计时候,就希望也能适应其他的网络协议。所以说,Socket的出现 只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本函数接口,比如createlistenconnectacceptsendreadwrite等等。

“TCP/IP只是一个协议栈,就像操作系统运行机制一样,必须要具体实现,同时还要提供对外的操作接口。TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

2、SOCKET与HTTP

长连接与短连接

Socket是长连接:由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开,这称为长连接(socket会自动服务端发送心跳包吧,这样可一直保持连接)。

HTTP是短连接:HTTP连接使用的是“请求—响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。【发送请求 > 回复 > 断开】,这称为短连接。

保持数据的实时同步

很多情况下,需要服务器端主动向客户端推送数据,保持客户端与服务器数据的实时与同步

(1)此时若双方建立的是Socket连接,服务器就可以直接数据传送给客户端;

在实际网络应用中,客户端到服务器之间的通信往往需要穿越多个中间节点例如路由器网关防火墙等,大部分防火墙默认关闭时间处于非活跃状态的连接而导致Socket 连接断连,因此需要通过轮询告诉网络,该连接处于活跃状态

(2)若双方建立的是HTTP连接,则服务器需要等到客户端发送一次请求后才能将数据传回给客户端。因此,客户端定时服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

3、TCP/IP和HTTP协议

TPC/IP协议是传输层协议,主要解决数据在网络中如何传输,而HTTP是应用层协议,主要解决如何包装数据。

我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多比如HTTP、FTP、TELNET等。

五、HTTP、Socket、TCP的区别

这三个概念经常被谈到,也是比较容易被混掉的概念。在回顾之前我们先看一下这三者在TCP/IP协议族中的位置关系
在这里插入图片描述
HTTP是应用层的协议,更靠近用户端;TCP是传输层的协议;而socket是从传输层抽象出来的一个抽象层,本质是接口。所以本质三种还是很好区分的。

Socket(套接字

现在我们了解到TCP/IP只是一个协议栈,就像操作系统运行机制一样,必须要具体实现,同时还要提供对外的操作接口。就像操作系统会提供标准的编程接口,比如Win32编程接口一样,TCP/IP也必须对外提供编程接口,这就是Socket。现在我们知道,Socket跟TCP/IP并没有必然的联系。Socket编程接口在设计时候,就希望也能适应其他的网络协议。所以,Socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本函数接口。比如createlistenacceptconnectreadwrite等等,不同语言都有对应的建立Socket服务端和客户端的库。

Socket长连接

所谓长连接,指在一个TCP连接上可以连续发送多个数据包,在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接(心跳包),一般需要自己做在线维持。 短连接是指通信双方有数据交互时,就建立一个TCP连接,数据发送完成后,则断开此TCP连接。比如Http的,只是连接、请求、关闭,过程时间较短,服务器若是一段时间没有收到请求即可关闭连接。其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态

短连接操作步骤是:
连接→数据传输→关闭连接;

长连接操作步骤是:
连接→数据传输→保持连接(心跳)→数据传输→保持连接(心跳)→……→关闭连接;

什么时候用长连接,短连接

长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理 速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如数据库的连接用长连接, 如果用短连接频繁的通信会造成Socket错误,而且频繁的Socket创建也是对资源浪费

TCP连接和HTTP连接的区别

HTTP是基于TCP的,客户端往服务端发送一个HTTP请求时第一步就是要建立与服务端的TCP连接,也就是先三次握手,“你好,你好,你好”。从HTTP 1.1开始支持持久连接,也就是一次TCP连接可以发送多次的HTTP请求。

总结:HTTP基于TCP

TCP连接与Socket连接的区别

socket层只是在TCP/UDP传输层上做的一个抽象接口层,因此一个socket连接可以基于连接,也有可能基于UDP。基于TCP协议的socket连接同样需要通过三次握手建立连接,是可靠的;基于UDP协议的socket连接不需要建立连接的过程,不过对方能不能收到都会发送过去,是不可靠的,大多数的即时通讯IM都是后者。

总结:Socket也基于TCP,socket 是实现TCP,UDP的。类似于jedisredisjava实现)和redis关系

HTTP连接与Socket连接的区别

区分这两个概念比较有意义的,毕竟TCP看不见摸不着,HTTP与Socket是实实在在能用到的。

HTTP是短连接,Socket(基于TCP协议的)是长连接。尽管HTTP1.1开始支持持久连接,但仍无法保证始终连接。而Socket连接一旦建立TCP三次握手,除非一方主动断开,否则连接状态一直保持。

HTTP连接服务端无法主动发消息,Socket连接双方请求的发送先后限制。这点就比较重要了,因为它将决定二者分别适合应用在什么场景下。HTTP采用“请求-响应机制,在客户端还没发送消息给服务端前,服务端无法推送消息给客户端。必须满足客户端发送消息在前,服务端回复在后。Socket连接双方类似peer2peer关系,一方随时可以向另一方喊话。

六、常见问题

什么时候该用HTTP,什么时候该用socket ?

浏览器在与服务器建立了一个 TCP 连接后是否会在一个 HTTP 请求完成后断开?什么情况下会断开?

在 HTTP/1.0 中,一个服务器在发送完一个 HTTP 响应后,会断开 TCP 链接。但是这样每次请求都会重新建立和断开 TCP 连接,代价过大。某些服务器在完成这个 HTTP 请求之后,不断开 HTTP 请求使用的 TCP 连接。这样的好处是连接可以被重新使用,之后发送 HTTP 请求的时候不需要重新建立 TCP 连接,以及如果维持连接,那么 SSL 的开销也可以避免。

所以结论是:默认情况下建立 TCP 连接不会断开,只有在请求报头声明 Connection: close 才会在请求完成后关闭连接。

一个TCP 连接可以发多少个 HTTP 请求?

如果维持连接,一个 TCP 连接是可以发送多个 HTTP 请求的。

一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?

在 HTTP/1.1 存在 Pipelining 技术可以完成这个多个请求同时发送,但是由于浏览器默认关闭,所以可以认为这是不可行的。

在 HTTP2 中由于 Multiplexing 特点的存在,多个 HTTP 请求可以在同一个 TCP 连接中并行进行。

那么在 HTTP/1.1 时代浏览器如何提高页面加载效率的呢?主要有下面两点

  • 维持和服务器已经建立的 TCP 连接,在同一连接上顺序处理多个请求。
  • 和服务器建立多个 TCP 连接。

为什么有时候刷新页面不需要重新建立 SSL 连接?

TCP 连接有的时候会被浏览器和服务端维持一段时间。TCP 不需要重新建立,SSL 自然也会用之前的。

原文地址:https://blog.csdn.net/m0_62140641/article/details/134752863

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44776.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注