iOS Socket(1) —— 简介

什么是Socket

  • Socket的定义

Socket,也称“套接字”,用于描述IP地址和端口,是一个通讯链的句柄,能够用来实现不一样虚拟机或不一样计算机之间的通讯。咱们知道不一样的程序之间的网络通信是要经过端口来区分的。简单来讲,网络上的两个程序经过一个双向的通讯链接实现数据的交换,这个链接的一端称为一个socket,而创建网络通讯链接至少要一对端口号(socket)。服务器

  • Socket和TCP/IP的关系

Socket本质是对TCP/IP的封装,是一套用来实现TCP或UDP通信的API。 根据网络通信的OSI参考模型的定义,IP位于网络层,TCP/UDP位于传输层,HTTP位于应用层,而Socket位于传输层和应用层之间,是它们以前的桥梁。网络

Socket是怎样通信的

  • TCP传输协议:TCP是面向链接的,须要“三次握手,四次挥手”,是可靠的传输,用来传输大的数据,可是,创建时间要花费时间和资源,相对于UDP速度较慢。socket

  • UDP:UDP是面向无链接的,发送端不会关心数据是否到达目标端,简单高效。常常用于如下几方面:函数

    • 总量较小的通信(DNS,SNMP等)
    • 视频、音频等多媒体通信(即时通信)
    • 限定于LAN等特定网络中的应用通信
    • 广播通信(广播、多播)
  • Socket的TCP通信流程图: 3d

    image

  1. 服务端:经过socket()初始化一个socket,bing()绑定端口号,listen()监听端口,accept()阻塞直到有客户端链接。
  2. 客服端:经过socket()初始化一个socket,connect() 与服务端创建链接
  3. 若是链接成功,即可互相发送接受数据
  • Socket的TCP的“三次握手,四次挥手”图:

image

  1. 当客户端调用connect时,触发了链接请求,向服务器发送了SYNJ包,这时connect进入阻塞状态;
  2. 服务器监听到链接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态
  3. 客户端收到服务器的SYN K ,ACK J+1以后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,链接创建

image

  1. 某个应用进程首先调用 close 主动关闭链接,这时 TCP 发送一个 FIN M
  2. 另外一端接收到 FIN M 以后,执行被动关闭,对这个 FIN 进行确认。它的接收也做为文件结束符传递给应用进程,由于 FIN 的接收意味着应用进程在相应的链接上再也接收不到额外数据
  3. 一段时间以后,接收到文件结束符的应用进程调用 close 关闭它的 socket。这致使它的 TCP 也发送一个 FIN N
  4. 接收到这个 FIN 的源发送端 TCP 对它进行确认。这样每一个方向上都有一个 FIN 和 ACK
  • Socket的UDP通信流程图:

image

相对TCP,UDP少了connect()的创建链接,也没有三次握手和四次挥手cdn

相关文章
相关标签/搜索