美文网首页
iOS Socket学习笔记(一)

iOS Socket学习笔记(一)

作者: 小芒果味 | 来源:发表于2018-04-28 09:40 被阅读17次

    知识搬运工

    Socket与TCP/IP定义

    Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它的一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议

    TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机的数据往来格式以及传输方式

    上边的定义只是大概了解了一下Socket和TCP/IP是什么,下面根据模型结构看看它们到底都是做什么的,这里首先要介绍一下网络七层参考模型,参照它更方便我们理解tcp/ip协议

    一、OSI参考模型与TCP/IP四层

    图片参考1

    如图左边是OSI参考模型,右边是TCP/IP协议模型

    OSI参考模型包括:

    应用层:对应应用通信服务,例如:TELNET,HTTP,FTP,NFS,SMTP等

    表达层:定义数据格式及加密,例如:ASCLL,JPEG,MPEG等

    会话层:定义如何开始、控制和结束一个会话、包括对多个消息双向消息的管理和控制,例如:RPC、SQL、ASP等

    传输层:是否选择差错恢复协议还是无差错恢复协议,在同一主机上对不同应用的数据流的输入进行复用,对收到的顺序不对的数据包的重新排序功能,例如:TCP、UDP、SPX等

    网络层:对端对端的包传输进行定义,定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习方式和如何将一个包分解成更小的包的分段方法,例如:IP、IPX等

    数据链路层:定义了在单个链路上如何传输数据,与被讨论的各种介质有关,例如:ATM、HDLC等

    物理层:传输介质的规范,例如:连接头、帧、电流、编码及光调制等

    TCP/IP协议包括:

    应用层:应用程序间沟通

    传输层:提供节点间的数据传送服务,TCP(传输控制协议)、UDP(用户数据报协议)

    网络层:负责提供基本的数据封包传送功能,IP

    网络接口层:对实际的网络媒体管理,定义如何使用实际网络

    为什么上边说Socket是TCP/IP中间的抽象层呢?关系图大概是酱紫:(图片参考2),Socket创建连接的时候可以指定传输协议,Socket可以支持不同的传输协议(TCP或UDP),当使用TCP传输协议的时候,该Socket连接就是一个TCP连接;

    图片参考2

    介绍完Socket基本结构和模型,下边我们来看看它的工作原理,Socket是面向客户/服务器模型设计的,针对客户和服务器程序提供不同的Socket系统调用。通过Socket建立通信连接至少需要一对套接字,其中一个运行客户端,称为ClientSocket,另一个运行服务器端,称为ServerClient。套接字之间连接过程分为三个步骤:服务器监听,客户端请求,连接确认;

    参考图片3

    想要明白Socket连接,先要明白TCP连接。手机能够使用互联网功能是因为手机底层实现了TCP/IP协议,可以使手机终端通过无线网络建立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状态,完成三次握手

    三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换TCP窗口大小信息,在Socket编程中,客户端执行connect()时,将触发三次握手。

    有连接就有断开,TCP断开的过程需要经过“四次握手”,之所以断开连接要四次握手,是因为当服务器端收到FIN报文时,很可能并不会立即关闭Socket,所以只能先回复一个ack报文,告诉客户端,“你发的FIN报文我收到了”。只有等服务端所有的报文都发送完了,才能发送FIN报文;

    理想状态,TCP连接一旦建立,在通信双方的任何一方主动关闭连接之前,TCP连接都一直将被一直保持下去,但实际情况中,如果中间节点出现什么故障是难以知道的,更要命的是,有的节点(防火墙)会自动把一定时间之内没有数据交互的链接给断掉,在这个时候,就需要我们的心跳包了,用于维持长连接,保活;

    相关文章

      网友评论

          本文标题:iOS Socket学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/eisnhftx.html