都9012年了,还不知道Socket?3分钟揭露Socket的庐山真面目!
Socket 编程是一门技术,它主要在网络通信中经常使用。
那什么又是网络通信呢?比如你在百度上搜索佩奇的动画片叫啥名字,浏览器就会帮你搜索到,这里面浏览器进程是和Web服务器进行通信的? 又例如,你用微信聊天,微信进程如何与你的好友的微信进程进行通信? 这些都得依靠Socket。
下面就带你了解Socket是啥?想要了解Socket 就得先了解以下概念:
- 网络的进程如何进行通信?
- 什么是Socket?
- Socket函数 有哪些?
- Socket的工作原理是什么?
接下里 小编就带你一一揭秘这些什么主题:
一、 网络进程通信
说到网络进程通信,我们就不得不说到TCP/IP 协议,网络通信是依靠它来完成的。举个例子吧,网络通信过程好比,你点了外卖,送餐员需要把外卖送到你手里,那他就得选择一条道路送来,选择走哪条道路来 就是有TCP/IP 来协议来完成的。送餐从餐馆到你手中就是一次通信过程。
我们知道TCP/IP 的协议依靠于OSI 五层网络模型(实际上是七层网络模型,主要使用到的是下面这五层模型):
- 物理层:比特流传输
- 数据链路层: 提供戒指访问
- 网络层:提供寻址和路由选择
- 传输层: 建立主机与主机端到端的连接
- 应用层:提供应用程序间通信
五层模型中每一层都是建立在第一层所提供的服务,也就是低一层为高一层进行服务。
上图可看出:低一层需要向高一层的提供服务,计算机上的应用程序直接的相互信息传输需要传输层的TCP和网络层的IP协议提供服务。但是我们要讨论的是Socket 在TCP/IP协议中的哪一部分呢?就如同,在古代传递信件时,我们的道路已经修好了,那么驿站该设置在哪里呢?
二、接下来我们就来理解第二个问题,什么是Socket?
我们知道socket编程基于TCP/IP的网络编程,但socket 在ISO七层模型哪一部分呢?经过资料查询,我们得出了Socket 所存在的位置:
实际上Socket就是对TCP/IP协议的封装,Socket 本身也就是一个调用接口(API),只有通过Socket 我们才能够使用TCP/IP协议的,而Socket是通过一些基本的接口函数来完成TCP/IP协议的调用,从而来完成网络通信功能的。
既然socket的通信是依赖于接口函数来完成通信功能的。
那么接下来我们就来了解一下,socket 有哪些基本函数呢?
三、 socket 函数
下面这张图即用到的接口函数:
我们从图中可看到,Socket 调用的函数有 connect()、write()、read()、bind()、accept()、listen()等。
三、 Socket 建立网络连接的步骤
Socket 的连接至少得需要 一对套接字,其中一个存在于客户端,即为 ClientSocket.。 另一个存在于 服务器端,即为 ServerSocket。这对套接字之间的连接过程分为: 服务器监听、 客户端请求、连接确认。
- 服务器监听:服务器端的Socket实时监控网络状态,等待客户端发来的连接请求。
- 客户端请求:指客户端的Socket发送连接请求,向服务器端Socket发出请求。客户端 的Socket里面发生请求时 要包含有服务器端的Socket的地址和端口号,然后就像服务器端的Socket发送连接请求。确保连接对象正确性。
- 连接确认:当服务器端Socket监听到客户端Socket的连接请求时,立马回应客户端Socket的请求,建立一个新的线程,把服务器端Socket的描述发给客户端,一旦客户端 确认了此描述,双方就正式建立连接。而服务器端Socket则继续处于监听状态,继续接收其他客户端Socket的连接请求。
结论:
如文章开头写的,在百度里面搜索佩奇的图片。
Socket通信原理:即百度服务器端这边设置一个监听线程,专门用于监听客户端是否有Socket请求响应, 这时在客户端发送一个Socket请求,即搜索佩奇的图片,并且客户端的Socket要含有寻找服务的Socket 的地址和端口号,保证可以准确连接到百度服务器端的Socket. 百度服务器端接收到客户端发来的请求响应,给予回应。两者建立一个新的进程,建立连接。服务器端将结果返回给客户端,客户端显示佩奇的图片。
微信聊天应用的Socket原理也是这样的。