Socket

作者: oncezou | 来源:发表于2020-09-22 16:05 被阅读0次

    Socket,也称套接字,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。程序之间的网络通讯是要通过端口来区分的。简单来说,网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,而建立网络通信连接至少要一对端口号(socket)。

    1、Socket与TCP/IP

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

    OSI参考模型
    2、TCP/IP特性
    • TCP传输协议:TCP是面向连接的,需要“三次握手,四次挥手”,是可靠的传输,用来传输大的数据,但是,建立时间要花费时间和资源,相对于UDP速度较慢。
    • UDP:UDP是面向无连接的,发送端不会关心数据是否到达目标端,简单高效。经常用于以下几方面:
     1、总量较小的通讯(DNS,SNMP等)
     2、视频、音频等多媒体通讯(即时通讯)
     3、限定于LAN等特定网络中的应用通讯
     4、广播通讯(广播、多播)
    
    3、Socket的TCP通讯流程
    TCP-Socket
    4、Socket的UDP通讯流程
    UDP-Socket

    Scoket-TCP/UDP通信示例: ScoketDemo

    5、TCP三次握手、四次挥手流程
    三次握手:四次挥手.png
    • 􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂三次握手:

      1、􏱉􏷲􏴱􏶿􏼞􏺸􏴱􏳈􏱙􏱥􏶭􏵅􏱱􏱉􏷲􏴱􏶿􏼞􏺸􏴱􏳈􏱙􏱥􏶭􏵅􏱱clientserver发起请求链接(connect),首先发送SYN报文,SYN=1,seq=x,并且client进入SYN_SENT状态
      2、server收到请求链接,serverclient进行回复(accept),并发送响应报文,SYN=1,seq=y,ACK=1,ack=x+1,并且server进入SYN_RECD状态
      3、client收到确认报文后,向server发送确认报文,ACK=1,ack=y+1,此时client进入到ESTABLISHED,server收到client发送过来的确认报文后,也进入到ESTABLISHED状态,此时链接创建成功

    根据上述的Scoket-TCP通信流程更容易理解三次握手

    • 四次挥手

      • clientserver发起关闭链接,并停止发送数据
      • server收到关闭链接的请求,向client发送回应,并且停止接收数据
      • server发送数据结束之后,向client发送关闭链接,并停止发送数据
      • client收到关闭链接的请求时,向server发送回应,然后停止接受数据
    • 􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂为什么需要三次握手:
      为了防止已失效的连接请求报文段突然又传送到server,因而产生错误

    1、假设这是一个早已失效的报文段,但`server`收到此失效的连接请求报文段后,就误认为是`client`再次发出的一个新的连接请求.于是就向`client`发出确认报文段,同意建立连接
    2、假设不采用“三次握手”,那么只要`server`发出确认,新的连接就建立了,由于现在`client`并没有发出建立连接的请求,因此不会理睬`server`的确认,也不会向`server`发送数据.但`server`却以为新的通信连接已经建立,并一直等待`client`发来数据.这样服务端的很多资源就浪费
    
    • 􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂􏶬􏰷􏶙􏶋􏽂为什么需要四次挥手:
      因为TCP是全双工通信的,在接收到client的关闭请求时,还可能在向client发送数据,因此不能再回应关闭连接的请求时,同时发送关闭连接的请求
    6、相关资料

    iOS Socket简介
    SocketDemo

    相关文章

      网友评论

          本文标题:Socket

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