基于Linux-ARM的智能家具项目(6)--socket,tcp,http的区别

之前我们介绍了OSI的网络模型,这一节我们来聊聊socket,tcp,http的区别,本文主要是学习笔记,需要结合内容借鉴一哈这位大佬的博客,有需要的朋友也可以看看,这里有传送门。

大佬的博客

一、socket

1、什么是socket

        通常我们在Linux环境下要搭建tcp与udp的客户端与服务器,都会用到socket,那这个关键字到底是什么呢?其实套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元

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

2、为什么要用socket

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

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

应用层可以和传输层通过Socket接口,区分来自不同应用程序进程或网络连接的通信,实现数据传输的并发服务。说白了应用层与传输层之间就需要socket来搭建桥梁通道。

3、建立socket的过程

前面我已经学习过Linux网络编程了,后面有需要我会专门做一期tcp/udp客户端与服务器的博客,现在已经对这一个过程有了深刻的认识,由于本文更多了解的是概念性的东西,在这里不做socket编程的展开。

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

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

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

(4)通常还可以在服务器端设置多进程,多线程来并发接入客户端,可以实现多机通信。

二、HTTP

1、什么是HTTP

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

2、HTTP的连接过程

HTTP连接的过程,因为是TCP协议会在建立连接到关闭连接的过程会进行“三次握手”与“四次挥手”的过程。

三次握手

这三次通信分别是:

1、客户端向服务端发送一个数据包,告诉服务端需要建立连接;

2、服务端收到客户端发送的数据包之后,会返回一个数据包,通知客户端,我已经收到你的连接请求;

3、客户端收到服务端返回的信息后,知道服务端已经准备好建立连接,但是还需要再发送一个数据包给服务端,用于告诉服务端我已经收到你的回复了。

这个时候,连接就已经建立了。双方可以进行数据传输了。

四次挥手

由于TCP连接是全双工的,因此,每个方向都需要单独进行关闭。这一原则是指当一方完成数据传输任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只意味着这一方向上没有数据传输,但在这个TCP连接上仍然能够发送数据,直到这一方向也发送FIN来。也就是说要同时出现两个FIN才可以结束通信

这四次挥手是:

1、第一次挥手:client发送一个FIN,用来关闭client到server的数据传输,client进入FIN_WAIT_1状态,也就是结束的状态;

2、第二次挥手:server收到FIN后,发送一个ACK给client,确认序号为收到序号+1,server进入CLOSE_WAIT状态,但是这个时候可能server的数据还没有发送完毕,还不能发送FIN信号;

3、第三次挥手:当该有的数据发送完成后,server发送一个FIN,用来关闭server到client的数据传输,server进入LAST_ACK状态;

4、第四次挥手:client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1,server进入CLOSE状态。

3、HTTP的连接特点

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

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

HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”,要保持客户端程序的在线状态,需要不断地向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。(socket是长连接

三、TCP/IP

1、TCP

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

2、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还是HTTP在连接过程中都需要将通信和连接规则设置好,就好比stm32串口通信,需要双方配置好才能进行通信。

联系

四、socket与tcp

创建Socket连接时,可以指定使用的传输层协议,Socket可以支持不同的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。socket则是对TCP/IP协议的封装和应用(程序员层面上)。也可以说,TPC/IP协议是传输层协议,主要解决数据 如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

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

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

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

五、Socket与HTTP

1、(socket)长连接与(http)短连接

        Socket是长连接:由于通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,直到双方连接断开,这称为长连接。

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

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

使用场景

用HTTP的情况:双方不需要时刻保持连接在线,比如客户端资源的获取、文件上传等。

用Socket的情况:大部分即时通讯应用(QQ、微信)、聊天室、苹果APNs等。

六、HTTP与TCP

TPC/IP协议是传输层协议,主要解决数据在网络中如何传输,而HTTP是应用层协议,主要解决如何包装数据。说白了HTTP协议是建立在TCP协议之上的一种应用

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

七、HTTP与TCP与socket

最后我们再来一次总结,如图下所示

HTTP是应用层的协议,更靠近用户端;TCP是传输层的协议;而socket是从传输层上抽象出来的一个抽象层,本质是接口。所以本质上三种还是很好区分的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值