iOS Socket编程(一)基本概念
iOS Socket编程(二)TCP三次握手,四次挥手
iOS Socket编程(三)Socket与HTTP的区别
iOS Socket编程(四) Socket具体使用
Socket的解释
Socket翻译过来中文称为套接字, 这里我找到了一段比较官方的解释Socket是什么东西:
Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。
在实际当中, 肯定是不止一个TCP/IP或者是一个应用程序进程在传输数据, 为了可以区分开来, 系统提供了一套API, 方便TCP/IP与应用程序交互, 一般把这个称为Socket API.
酱紫应用层可以和传输层通过这个Socket API, 区分来自不同的应用程序进程或者是网络通信, 使得数据可以并发传输.
Socket的C/S端
Socket的使用其实也没有我们想象中那么难, 只是这里需要有一个前提条件, 因为建立Socket通信是至少需要一对套接字, 其中一个是运行在我们的客户端上, 称为Client Socket, 还有一个是运行在服务器上, 称为Service Socket.
Socket之间的连接过程分为三个过程:
- 服务器监听
- 客户端请求
- 连接确认
Socket同时支持TCP和UDP两种传输协议, 啥意思呢?
当Socket使用TCP协议通信的时候, Socket就是一个TCP的连接, 那么如果Socket使用的是UDP协议通信, 那么这时候的Socket就是UDP连接.
如果要有图的话, 大概就这样了:
网络的协议
既然讲到Socket, 那么就要说说网络里面的协议, 这里就要普及一下网络里面的到底都有啥, 首先我们要知道, 在网络里面一共有七层协议.
从上往下分的话:
- 应用层
- 表达层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
但我们通常会把底下三层(网络层, 数据链路层, 物理层)统称为媒体层, 一般都是专门搞网络的网络工程师大神们研究的对象.
而上面四层(传输层, 会话层, 表示层, 应用层)被称为主机层, 也是广大用户所面向和关心的内容.
说到协议, 我们就不得不提一下HTTP:
- HTTP协议: 它是对应着应用层.
- TCP协议: 它是对应着传输层.
- IP协议: 则对应着网络层.
而HTTP协议是基于TCP连接的, 所以三者根本就没啥可比性.
- TCP/IP协议: 属于传输层协议, 主要解决数据如何在网络中传输.
- HTTP协议: 属于应用层, 主要解决如何包装数据.
而Socket是应用层与TCP/IP协议族通信中间的软件抽象层, 是它的一组接口.
TCP/IP五层模型
既然都提到了TCP/IP这个协议, 那么就来讲讲, TCP/IP里的五层模型.
这里面的五层模型分别为:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
那么我们日常生活中所接触到的网络器材有哪些? 分别处于哪个模型?
- 物理层: 中继器, 集线器, 双绞线
- 数据链路层: 以太网交换机(Modem), 网卡(网卡有一半是工作在物理层)
- 网络层: 路由器, 三层交换机
- 传输层: 四层交换机, 路由器(也有一些特殊的路由器在传输层中工作)
其中TCP/IP的应用层比较特殊, 它是包含了会话层, 表达层, 应用层等功能, 这里要说一点, TCP/IP协议并不能在传输层总是保证可靠的传输数据包, 但七层模型可以做到.
TCP/IP还提供了另一种传输模式, 叫做UDP(用户数据报协议), 但这种协议不能保证可靠的数据包传输.
这里再解释一下:
- TCP: 面向连接, 提供可靠的数据传输, 用于传输大量数据, 使用数据流模式, 速度慢, 建立连接时开销较大
- UDP: 非面向连接, 传输不可靠, 用于传输少量的数据, 速度快
总的来说TCP是一个数据流的模式协议, 而UDP是一种数据报模式的协议.
刚刚说了Socket是基于TCP/IP协议上的抽象, 也就是说Socket只是对TCP/IP的封装, 本身是没有协议的, 只有通过Socket API, 我们才能够使用TCP/IP协议.
大概的关系图就是酱紫吧:
总结
这篇文章虽然不涉及任何的代码, 但都是一些必备的基础知识, 如果想更详细的了解或者是找更官方的文档, 可以去看看苹果爸爸提供的Networking Overview这篇文章.