IOS —— 网络那些事(下) - Socket

好的,还是我,今天第二篇东西解释的是Socket。这也是菜鸡程序员的我对网络这块深渊领域的初识的总结

虽然在解读有很多不足(非常非常多),但是详细的释义以后遇到了麻烦了,了解的更多了。会回头编辑备注更改的!

事不宜迟开始socket的依我所见吧!


 1.Socket是什么?

(图片来源于网络)

是的没错还是这张网络七层架构图,上篇文章也有提及到的一张图片

这里拿出来是要根据图文释义,解释一下Socket到底是什么。

Socket(套接字):网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端被称作为Socket

以上这段话的释义其实还能更简单一些,Socket实际上就是网络通讯连接的接口

上篇文章也有提及到,TCP/IP协议分别对应的是传输层、网络层。他们的作用主要是解决数据传输

是的没错,Socket并不是协议,是通过封装于TCP/IP协议实现的接口。他是建立通讯的基石。是网络通讯中端点的抽象表示。

socket里面包含了网络通讯的5个要素,其分别是

1.连续使用的协议

2.本地主机的IP

3.本地进程协议端口

4.远方主机的IP

5.远方进程协议端口

问题1:而为什么要使用Sokcet呢?

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

为了区别不同的应用程序连接,许多计算机操作系统为应用程序与TCP/IP间提供Socket交互接口,应用程序层和传输层通过socket区分来自不同应用程序进程或网络接口通讯。实现数据并发传输。

看着都嫌麻烦吗?没关系。总结一句就是

使用Socket就是为了区分不同的应用程序以及网络接口通讯,实现数据并发传输。

 

接下来我们借助下百科图片,综合上下文了解一下通讯的过程

 

在网络中,网络通讯可以理解为上船开船移动的行为,那么主机地址以及主机端口号俩者绑定在一起可以是作为一张上船的船票,并且船票是唯一的。

只有通过船票上船(通讯软件),才能通过大海(网络协议)到达另外一端,下船(通讯软件)完成通信。

过程是这么个过程(省略了非常非常多详细的内容),那么建立连接呢?


2.Socket 连接的建立

Socket连接的建立有一个前提,必须得有一对对应的Socket接口

1.正在运行的服务器端socket(serverSocket)

2.正在运行的客户端socket(ClientSocket)

建立在这个大前提下,Socket的连接还分三个步骤

1.服务器的监听

服务器端的socket并不定位具体的客户端socket,而是出等待连接的状态,实时监控网络状态。等待客户端的连接。

(一不是对一,而是一对多)

2.客户端请求

客户端socket提出连接请求,目标是某服务器端socket时,客户端socket为此必须描述她要连接的服务器端socket的详情。指出该服务器socket的具体地址具体端口号,并且向服务器提出连接申请。

(必须具体的船票'地址+端口号' 才能针对服务器socket发起请求)

3.连接确认

当服务器确认/监听/接受到客户端socket连接请求时,便会响应客户端socket的请求,建立一个新的线程,把服务器socket具体详情(地址、端口号),发送给客户端。等待客户端确认描述信息后。双方正式确认连接成立。

此时服务器继续变为监听状态,继续接受其他客户端socket给与自身服务器的请求。

(你买东西,我就必须发货呀,发完一单就交易结束。其他人来买的时候我就继续给其他人发货)

 

结合上篇文章提问:Socket与TCP连接的区别是?

创建连接的时候,是可以指定传输层中任意协议的,socket可以使用不同的传输协议。当Socket使用TCP协议连接的时候,Socket连接就是一个TCP连接。

(后宫佳丽三千任意挑选,挑中佳丽就变成佳丽本身了)

结合上上篇文章提问:Socket与HTTP的区别的是?

一般情况下,Socket本身就是TCP连接。一旦经过三握四挥建立了连接,客户端与服务器端就能互相发送数据,直至连接断开。

但是在实际的运用上,客户端与服务器端通信往往需要通过许多节点,如防火墙、网关等。大部分防火墙也会默认关闭处于非活跃状态的连接,导致Socket断连。

(高速公路上也有路不平不好走的时候)

因此需要通过轮询的方式通知防火墙,连接还在活跃中。 轮询:客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已。)

而HTTP本身使用的是 '请求 - 回应' 的方式,不仅要在发送请求先建立起连接。而且需要在客户端发送完请求给服务器端后,服务器端才会根据请求返还数据。

很多情况下,需要服务器端主动发动数据信息保持连接,保证服务器端时刻与客户端保持数据的实时与同步。

此时双方若建立的是socket连接,则服务器端可以直接发送数据给客户端。

此时双方若建立的是HTTP连接,则服务器端需要等客户端发送一条消息给自身后才能把数据发送给客户端。

因此客户端不停向服务器端发送连接请求,不仅可以保证正常在线。也在这个过程中不断的"询问"服务器端是否有新数据,如果有新数据则传递给自身。

(连接请求就像是一个不懂就要问的孩子,问到大人睡觉就不问了)


 

 

这里就结束啦,关于网络这一块的初探端倪,实际上也都是理论

缺少部分实战,过阵子自己会写一个基于socket连接的,聊天室软件。之后期待下慵懒的自己能写出流畅畅读的代码吧

posted @ 2018-11-12 19:00  幽幽幽瓜  阅读(155)  评论(0)    收藏  举报