iOS-网络理解
Contents
iOS-网络理解
一:网络层级结构
TCP/IP四层结构
- 应用层
- 传输层
- 网络层
- 网络接口层
OSI七层网络结构
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
二:HTTP协议-超文本传输协议
应用层面向对象的协议
常基于TCP链接方式
- 特点:
- 支持客户端/服务端模式
- 简单快捷灵活
- 客户端每次发送的请求,都需要服务器回送响应,请求结束后主动释放链接.俗称
短连接
三:TCP协议
传输层
提供面向链接的可靠的字节流服务,提供超时重发,丢弃重复数据,校验数据,流量控制等功能
在正式收发数据前,需要建立三次握手建立可靠的链接
- 三次握手
- 客户端向服务器发送一个SYN报文(syn=j),计入
SYN_SEND状态,等待服务器确认 - 服务器接收到客户端的SYN报文,确认客户端的SYN(ack=j+1),同时自己也发送一个SYN报文(syn=k),即
SYN+ACK报文,服务器进入SYN_RECV状态 - 客户端收到服务器的
SYN+ACK报文,向服务器发送确认报文ACK(ack=k+1),此包发送完毕,客户端服务端进入ESTABLISHED状态,完成三次握手
- 客户端向服务器发送一个SYN报文(syn=j),计入
四:UDP协议
传输层
面向非链接,不保证可靠性的数据传输协议,没有超时重发等机制,故传输速度很快
不与对方建立连接,直接把数据包丢过去,所以适合少量数据且可靠性要求不高的场景
五:Socket
IP地址+端口=Socket
应用程序通过
Socket向网络发送请求或响应
它是一个针对TCP/UDP编程的接口,基于它建立TCP/UDP连接.Socket连接就是所谓的长连接,一旦建立起连接,不会主动断掉
六:HTTP-Socket-TCP 的关系
- HTTP协议提供了封装或者显示数据的具体形式
- Socket连接提供了网络通信的能力
- TCP连接提供如何在网络中传输
- socket是纯C语言的,跨平台
- HTTP协议是基于socket的,底层使用的就是socket
- 创建Socket连接时,可以指定使用的传输层协议(TCP或UDP),当使用TCP协议进行连接时,该Socket连接就是一个TCP连接
七:TCP/UDP的区别
- 基于连接和无连接
- TCP对系统资源占用较多,UDP较少
- UDP程序结构简单
- TCP是字节流数据类型,UDP是用户数报文类型
- TCP保证数据可靠性,UDP不保证,可能丢包
八.Socket工作流程
- 服务端创建一个socket
- 绑定服务器主机地址,监听一个端口
- 调用accept函数,一致初一阻塞状态
- 当客户端有客户端请求,并自己进入阻塞,一直到服务返回数据
- 服务端保存客户端的socket,然后向客户单的socket 写入数据
- 客户端接收后可以发送close消息断开链接,那么就完成一次完成的socket交流
九:HTTP和Socket的区别
HTTP连接是短连接,Socket连接是长连接- 尽管
HTTP1.1开始支持持久链接但仍无法保证始终链接 - Socket建立TCP三次握手后,除非一方自动断开链接否则链接将一直保持
- 尽管
HTTP服务端无法主动发送消息- 采用
请求-响应机制
- 采用
- 应用场景
- HTTP
- 双方不需要同时保持在线,如客户端资源获取,上传等
- Socket
- IM APNs等
- HTTP

