socket网络通信相关概念解析
什么是socket网络通信?
人通过的【电话】可以通信
程序通过【socket】来通信
比如说我在北京,张三在上海,我如果要联系他,用电话最方便了。
人跟人之间要联系,要通话,需要电话。而电脑之间或者说程序之间,要联系,要收发信息,
互相发数据,那这个时候就需要socket来进行通信了。所以说这个socket就可以理解为我们程序间的电话机。
我和张三打电话 电话 【规定好的语言】
电脑和电脑之间联系 【协议】
比如说我和张三打电话,我们都是中国人,我是山西人,张三是福建人,那我们在打电话之间一般默认的语言是普通话,因为我们都说家乡话的时候,我们两个人有可能都听不懂,所说我们要规定好一门语言,默认就是咱们的普通话。而电脑和电脑之间,或者说和应用程序之间通信,那你也应该有一个默认的语言,那么这个就是我们的协议。
我们在网络中常用的两个协议,一个是udp协议,一个是tcp协议
1.科普一下socket相关概念
Socket的英文原意是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述ip地址和端口号。是一个通信链接的句柄。(其实就是两个程序通信用的)。
Socket非常类似于电话插座。以一个电话网为例,电话的通话双方相当于相互通信的两个程序,电话号码就是ip地址,任何用户在通话之前,首先要占有一部电话机,相当于申请一个socket;同时要知道对方的号码,相当于对方有一个固定的socket,然后向对方拨号呼叫,相当于发出链接请求,对方假如在场并空闲,拿起电话话筒,双方就可以正式通话,就可以连接成功,双方的通话过程,是一方向电话机发出信号,和对方从电话机接受信号的过程,相当于socket发送数据和socket接收数据。通话结束后,一方挂起电话机,相当于关闭socket,撤销链接。
比如说有一个客户端,一个服务器。在我们的服务器当中有很多很多应用程序,那么我客户端想跟你服务器进行沟通,我不可能说我跟服务器进行连接,这样就太广泛了,我应该说确定的跟你服务器某个应用程序进行连接,比如说我们最常用的数据库,但是我想要连接你的服务器的数据库,我首先想要知道的就是你服务器的ip地址,但是仅仅知道ip地址就行了么,你知道了ip地址,连接的仅仅是我们的服务器,而我们的服务器当中有那么多的应用程序,它们的ip地址都是一样的,那这个时候你还想知道什么东西,就可以连接到你想要连接的应用程序呢?这就是我们所说的端口号。
所以说你需要连接到服务器的某个应用程序,你需要知道它的ip地址和端口号。
2.科普一下端口号相关概念
在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务,每种服务都打开了一个socket,并绑定到一个端口上,不同的端口对应不同的服务(应用程序)。
例如:http使用80端口,ftp使用21端口,smtp使用25端口
3.科普一下tcp协议和udp协议相关概念
Tcp协议:也叫流式socket(stream),是一种面向连接的socket,针对面向连接的tcp服务应用,安全但是效率低。
Udp协议:也叫数据报式socket(datagram),对应于无连接的udp服务应用,不安全(丢失信息,顺序混乱,在接收端要分析重排及要求重发),但效率高。一般视频通话用这个协议。可能有时候数据传输不稳,有点模糊,但好在畅通。
客户端可以通过服务器的ip地址,还有相关的端口号,可以准确的连接到服务器上的某个应用程序,但是在这个过程中呢,会发生一个什么事呢?
举个例子,如果我现在使用的是tcp协议,而tcp协议有一个三次握手的过程,要求我们必须有一个服务器,那么这个请求一定是客户端发给服务器的,而我们服务器不能去给客户端发请求,因为咱们服务器不知道客户端在哪,首先客户端向服务器发送一句话,问 “你有空么?”服务器收到客户端发的请求之后,回一句 “我有空”,然后客户端收到之后,又给服务器发一句“我知道你有空了”,那么这样的三个步骤我们就简称为三次握手。
那么tcp协议只有三次握手成功之后,这个时候呢,客户端和服务器才能互相的收发数据,否则的话就不会进行数据的沟通。所以说我们的tcp好处呢?就是安全稳定,但是效率相对比较低一些(因为有三次握手的过程,三次握手需要一定的时间)。
而与之相反的就是udp协议,那udp的优点呢,就是快速,效率高,但是不稳定,容易发生数据丢失。比如说,我客户端要向服务器发送数据了,我也不管你服务器有没有空,我怎么办?我就给你发,我把所有的消息都给你服务器发过去,我不管你服务器有没有精力接收这个消息,反正呢,我给你发过去了。就是这个意思。