当前位置:首页 > 技术 >

http和socket连接有什么区别(http长连接和socket长连接)

来源:原点资讯(www.yd166.com)时间:2022-10-26 13:21:32作者:YD166手机阅读>>

前言:作为一名开发人员我们经常会听到HTTP协议、TCP/IP协议、UDP协议、Socket、Socket长连接、Socket连接池等字眼,然而它们之间的关系、区别及原理并不是所有人都能理解清楚,这篇文章就从网络协议基础开始到Socket连接池,一步一步解释他们之间的关系。

七层网络模型

首先从网络通信的分层模型讲起:七层模型,亦称OSI(Open System Interconnection)模型。自下往上分为:物理层、据链路层、网络层、传输层、会话层、表示层和应用层。所有有关通信的都离不开它,下面这张图片介绍了各层所对应的一些协议和硬件。

http和socket连接有什么区别,http长连接和socket长连接(1)

通过上图,我知道IP协议对应于网络层,TCP、UDP协议对应于传输层,而HTTP协议对应于应用层,OSI并没有Socket,那什么是Socket,后面我们将结合代码具体详细介绍。

TCP和UDP连接

关于传输层TCP、UDP协议可能我们平时遇见的会比较多,有人说TCP是安全的,UDP是不安全的,UDP传输比TCP快,那为什么呢,我们先从TCP的连接建立的过程开始分析,然后解释UDP和TCP的区别。

TCP的三次握手和四次分手

我们知道TCP建立连接需要经过三次握手,而断开连接需要经过四次分手,那三次握手和四次分手分别做了什么和如何进行的。

http和socket连接有什么区别,http长连接和socket长连接(2)

第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x 1(Sequence Number 1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN ACK报文段。然后将Acknowledgment Number设置为y 1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

完成了三次握手,客户端和服务器端就可以开始传送数据。以上就是TCP三次握手的总体介绍。通信结束客户端和服务端就断开连接,需要经过四次分手确认。

第一次分手:主机1(可以使客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

第二次分手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

第三次分手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

第四次分手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

可以看到一次tcp请求的建立及关闭至少进行7次通信,这还不包过数据的通信,而UDP不需3次握手和4次分手。

TCP和UDP的区别

  1. TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
  2. 也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。知道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似TCP的“三次握手”而实现了TCP所无法达到的传输效率。

问题

关于传输层我们会经常听到一些问题

1.TCP服务器最大并发连接数是多少?

关于TCP服务器最大并发连接数有一种误解就是“因为端口号上限为65535,所以TCP服务器理论上的可承载的最大并发连接数也是65535”。首先需要理解一条TCP连接的组成部分:客户端IP、客户端端口、服务端IP、服务端端口。所以对于TCP服务端进程来说,他可以同时连接的客户端数量并不受限于可用端口号,理论上一个服务器的一个端口能建立的连接数是全球的IP数*每台机器的端口数。实际并发连接数受限于linux可打开文件数,这个数是可以配置的,可以非常大,所以实际上受限于系统性能。通过#ulimit -n查看服务的最大文件句柄数,通过ulimit -n xxx 修改 xxx是你想要能打开的数量。也可以通过修改系统参数:

http和socket连接有什么区别,http长连接和socket长连接(3)

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的Socket可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

3.TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态会产生什么问题

通信双方建立TCP连接后,主动关闭连接的一方就会进入TIME_WAIT状态,TIME_WAIT状态维持时间是两个MSL时间长度,也就是在1-4分钟,Windows操作系统就是4分钟。进入TIME_WAIT状态的一般情况下是客户端,一个TIME_WAIT状态的连接就占用了一个本地端口。一台机器上端口号数量的上限是65536个,如果在同一台机器上进行压力测试模拟上万的客户请求,并且循环与服务端进行短连接通信,那么这台机器将产生4000个左右的TIME_WAIT Socket,后续的短连接就会产生address already in use : connect的异常,如果使用Nginx作为方向代理也需要考虑TIME_WAIT状态,发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决。

http和socket连接有什么区别,http长连接和socket长连接(4)

栏目热文

websocket和http的区别(websocket登录验证)

websocket和http的区别(websocket登录验证)

一、这一大堆关键词之间到底有啥区别?有名字就有定义,理解的前提从来都是对定义有所了解。就好比现在让你形容一下梯形的定义,...

2022-10-26 13:32:34查看全文 >>

websocket一般用什么服务器(websocket服务器怎么打开)

websocket一般用什么服务器(websocket服务器怎么打开)

安装nodeJs和配置, 参考nodeJs安装文档,下图问本人本地安装的版本查看版本 npm-v在本地创建存放项目文件夹...

2022-10-26 13:47:10查看全文 >>

websocket和http2.0的区别(websocket和socket哪个稳定)

websocket和http2.0的区别(websocket和socket哪个稳定)

昨天的文章中提到了HTTP/2,很多同学问HTTP/2是啥,找了这篇文章分享给各位文章来源:http://www.hol...

2022-10-26 13:29:39查看全文 >>

websocket和tcp区别(websocket服务器要多大)

websocket和tcp区别(websocket服务器要多大)

本文引用自“ 豆米博客”的《JS实时通信三把斧》系列文章,有优化和改动。1、引言有关Web端即时通讯技术的文章我已整理过...

2022-10-26 13:04:40查看全文 >>

socket和http优缺点(http和socket区别)

socket和http优缺点(http和socket区别)

一、OSI 网络七层模型第一层:应用层,定义了用于在网络中进行通信和传输数据的接口;(Http协议位于该层)第二层:表示...

2022-10-26 13:44:57查看全文 >>

http和socket有什么关系(http与socket关系)

http和socket有什么关系(http与socket关系)

最近项目中需要自己去实现一个http的接口。所以趁这个机会跟大家讲一下http和socket的关系,以及与TCP又有什么...

2022-10-26 13:37:24查看全文 >>

socket和http协议哪个好(socket和http哪个响应快)

socket和http协议哪个好(socket和http哪个响应快)

我们先来看看HTTP协议 与 TCP协议 的区别TCP协议是传输层协议 ,主要解决数据如何在网络中传输,而HTTP是应用...

2022-10-26 13:05:33查看全文 >>

socket接口和http接口区别(http和socket如何抉择)

socket接口和http接口区别(http和socket如何抉择)

IP:网络层协议;TCP和UDP:传输层协议;HTTP:应用层协议;Socket:TCP/IP网络的API。TCP/IP...

2022-10-26 13:22:56查看全文 >>

小米11好用系统版本(小米11哪个系统版本合适)

小米11好用系统版本(小米11哪个系统版本合适)

2022年1月2日20点小米官方直接在小米11推送MIUI13稳定版,你的小米手机推送了吗?欢迎评论区发表留言本次更新不...

2022-10-26 13:28:41查看全文 >>

小米11系统历史版本安装包(小米11系统安装包在哪里)

小米11系统历史版本安装包(小米11系统安装包在哪里)

今天又是调侃MIUI系统的一天。首先声明一点,文章内容仅代表个人观点,由于今天咱们谈到的MIUI系统更新至今已经有上百个...

2022-10-26 13:04:18查看全文 >>

文档排行