http与socket的区别

http与socket的区别http与socket的区别

大家好,又见面了,我是你们的朋友全栈君。

1、TCP连接

 手机能够使用联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立TCP连接。TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在“无差别”的网络之上。

 

建立起一个TCP连接需要经过“三次握手”:

 

第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

 

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

 

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

 

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客户端交互,最终确定断开)

 

2、HTTP连接

 

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

 

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

 

1)在HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。
 
2)在HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。
 
由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

 

3、SOCKET原理

 

3.1套接字(socket)概念

套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

 

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序进程提供并发服务的问题。多个TCP连接或多个应用程序进程可能需要通过同一个 TCP协议端口传输数据。为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(Socket)接口。应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。

3.2 建立socket连接

建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。

 

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

 

服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

 

客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

 

连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。

 

4、SOCKET连接与TCP连接

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

 

5、Socket连接与HTTP连接

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

 

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

 

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106206.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月23日 下午2:20
下一篇 2022年4月23日 下午2:20


相关推荐

  • 80+提示词 震撼发布|Seedance 2.0 提示词完全指南:从新手到“AI导演“

    80+提示词 震撼发布|Seedance 2.0 提示词完全指南:从新手到“AI导演“

    2026年3月13日
    2
  • 宽带上行速率和下行速率的区别

    宽带上行速率和下行速率的区别本文由广州宽带网 http www ymeibai com 整理发布 广州电信宽带报装 上广州宽带网 我们一般所说的 4M 宽带 6M 宽带 都是指宽带的下行速率 可以理解为就是下载的速度 平时我们用迅雷 或者网页下载软件时 用的就是下行速率 而上行速率就是上传的速度 平时用发消息 用发送文件 或者上传文件到网站都用的是上行速率 但并非说上行速率就不会影响浏览网页 看视频 玩游戏的速度

    2026年3月19日
    3
  • 常用的javascript事件大全

    常用的javascript事件大全整理一下 js 事件 发现居然有这么多 常用的不常用的 感觉还是很灵活的详细属性 事件属性描述 onabort 图像的加载被中断 onblur 元素失去焦点 onchange 域 元素 的内容被改变 onclick 当用户点击某个对象时调用的事件 ondblclick 当用户双击某个对象时调用的事件 onerror 在加载文档或图像是发生错误 onfocus 元素获得焦点 onkeydown 某个键盘按键被按下 onkeypress 某个键盘按键按下并松开

    2026年3月19日
    2
  • pycharm更新python_当我有两个版本的python时,如何更新PyCharm中的pip?

    pycharm更新python_当我有两个版本的python时,如何更新PyCharm中的pip?我已经在 Windows10 上安装了 Python2 7 和 Python3 5 在当前的 PyCharm 项目中使用 python2 7 并且该项目的 python 解释器设置为 python2 7 现在 我打开 PyCharm 设置 并想更新 python2 7 的 pip pip 版本为 8 1 1 我单击了 update 希望将其更新为最新版本 但是 在提示 成功更新 之后 我注意到 pip 的版本仍为 8

    2026年3月27日
    2
  • 12 款适用于开发人员的最佳 Web 开发软件

    12 款适用于开发人员的最佳 Web 开发软件如果您正在寻找最好的 Web 开发软件 那么您可能会对从哪里开始构建网站感到有些困惑 对于我们大多数人来说 构建网站或做任何与 Web 开发相关的事情都是一项艰巨的任务 好吧 没有必要担心 因为我们可以利用技术来创建一个功能齐全且美观的网站 并使用正确的 Web 开发或设计软件 这里列出了 12 款最好的网站开发软件 包括免费和付费 它们将使您能够毫不费力地创建 编辑和更新网页 而且 如果您是新手或没有编码经验 您可以使用此集合中包含的 WYSIWYG 编辑器编辑 创建网页 1 WordPre

    2026年3月16日
    3
  • 邀您免费加入到程序猿小密圈

    邀您免费加入到程序猿小密圈

    2022年3月13日
    49

发表回复

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

关注全栈程序员社区公众号