• 通信基础
    • C/S、P2P
    • Socket:套接字
    • TCP/IP:互联网相关的各类协议族的总称
    • OSI:开放式系统互联
    • mDNS
    • TCP:传输控制协议
    • UDP:用户数据报协议
    • ARP:地址解析协议
    • FTP
    • HTTP
    • OSC
    • USB
    • BLE
  • Unity开发
    • 局域网(Local Area Network,LAN)
      • UNet(UNet已被弃用,将来会从Unity中删除。一个新的系统正在开发中。有关更多信息和后续步骤,请参阅此博客文章
      • MLAPI(UNet的替代方案)
      • Uduino(Arduino)
      • UniOSC(跨平台)
      • Multipeer Connectivity(iOS)
      • Wi-Fi Direct(Android)
    • 无线局域网(WLAN)
      • UNet(UNet已被弃用,将来会从Unity中删除。一个新的系统正在开发中。有关更多信息和后续步骤,请参阅此博客文章
      • MLAPI(UNet的替代方案)
      • System.Socket
      • 光子引擎:Photon PUN(Photon Unity Networking)

C/S与P2P

严格来讲客户端与服务器指的都是进程,N个Client客户端进程与一个或多个Server服务器进程可以组成一个C/S结构的网络,而同时既是客户端也是服务器的N个节点可以组成一个P2P网络。

C/S架构中,Client向Server提出请求,Server处理请求。P2P网络中每个节点互相都可以提出请求,也都可以处理请求。

OSI(Open System Interconnect)

OSI(Open System Interconnect),即开放式系统互联。一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。

OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。

每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。

IP地址

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。IP地址被用来给Internet上的电脑一个编号。我们可以把“个人电脑”比作“一台电话”,那么“IP地址”就相当于“电话号码”。若计算机1知道计算机2的IP地址,则计算机1就能访问计算机2。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用点分十进制表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

IP地址有IPv4IPv6之分,现在用得较多的是IPv4。其中,有一个特殊的IP地址需要我们记住:127.0.0.1,这是回送地址,即本地机,一般用来测试使用。后边我们的实例中会用到。

关于IP地址还有很多知识要点,但是对于在Socket编程中的应用,我们暂且知道这么多就可以。

端口

在网络上有很多电脑,这些电脑一般运行了多个网络程序。每种网络程序都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的网络程序。
常用端口:21 FTP ,25 SMTP ,110 POP3 ,80 HTTP , 443 HTTPS

Socket

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。
通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。
网络有一段关于socket和TCP/IP协议关系的说法比较容易理解:

“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。
这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,
TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。”

套接字分为三类:

  1. 流式socket(SOCK_STREAM):流式套接字提供可靠、面向连接的通信流;它使用TCP协议,从而保证了数据传输的正确性和顺序性。
  2. 数据报socket(SOCK_DGRAM):数据报套接字定义了一种无连接的服务,数据通过相互独立的保温进行传输,是无序的,并且不保证是可靠、无差错的。它使用的数据报协议是UDP。
  3. 原始socket:原始套接字允许对底层协议如IP或ICMP进行直接访问,它功能强大但使用复杂,主要用于一些协议的开发。

套接字由三个参数构成:IP地址,端口号,传输层协议。这三个参数用以区分不同应用程序进程间的网络通信与连接。


协议(Protocol)

协议(Protocol)是通信双方进行数据交互的一种约定。如TCP、UDP协议:

TCP和UDP使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP,文件传输协议FTP这样的协议等。

TCP/IP

TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。像这样把与互联网相关联的协议集合起来总称为 TCP/IP。也有说法认为,TCP/IP 是指 TCP 和 IP 这两种协议。还有一种说法认为,TCP/IP 是在 IP 协议的通信过程中,使用到的协议族的统称。

TCP(Transmission Control Protocol)

TCP即传输控制协议,是一种面向连接的、可靠的、基于字节流的通信协议。简单来说TCP就是有确认机制的UDP协议,每发出一个数据包都要求确认,如果有一个数据包丢失,就收不到确认,发送方就必须重发这个数据包。TCP面向连接的可靠传输协议,具有数据确认和数据重传机制。保证了发送数据一定能到达通信的对方,对数据完整性要求比较高的场合使用。

TCP串口要用IP地址,分先后,server先,client后,还要等段时间再可以执行。

UDP(User Datagram Protocol)

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768 [1] 是UDP的正式规范。

UDP串口不用 IP地址 client和server可以不分先后都可以执行。UDP一个重要特征是无连接,因为无连接,使用它进行广播就特别方便,不必像TCP先连接才能通讯,因为无连接,它没有保活机制,一个节点不知道其他节点的状态。

OSC(Open Sound Control)

OSC是一种网络传输协议,和MIDI一样。可以定义任何东西,在一定的规则下把信息通过网络从一个设备传输到另一个设备。通常OSC信息都是通过UDP来传送的,也就是说任何接收设备只要与发送设备在同一个网络中,并且监听同一个端口,那就能收到这个信息。

串口通信(Serial Communications)

串口通信是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以在使用一根线发送数据的同时用另一根线接收数据。它很简单并且能够实现远距离通信。


Uduino:Arduino USB

支持Arduino通过USB链接进行通信,插件可以从这里下载。

Uduino:Wifi for esp8266 and esp32

支持Arduino通过Wifi进行通信,插件可以从这里下载,可通过官方安装教程进行学习。

Arduino Bluetooth Plugin

支持Arduino通过BLE(低功耗蓝牙)进行通信,插件可以从这里下载。

Multipeer Connectivity(iOS)

在iOS7中,引入了一个全新的框架——Multipeer Connectivity(多点连接)。利用Multipeer Connectivity框架,即使在没有连接到WiFi(WLAN)或移动网络(xG)的情况下,距离较近的Apple设备(iMac/iPad/iPhone)之间可基于蓝牙和WiFi(P2P WiFi)技术进行发现和连接实现近场通信。

相比AirDrop,Multipeer Connectivity在进行发现和会话时并不要求同时打开WiFi和蓝牙,也不像AirDrop那样强制打开这两个开关,而是根据条件适时选择使用蓝牙或(和)WiFi。

Wi-Fi Direct(Android)

Android用Wi-Fi Direct技术可以让具备硬件支持的设备在没有中间接入点的情况下进行直接互联。Android 4.0(API版本14)及以后的系统都提供了对Wi-Fi Direct的API支持。通过对这些API的使用,开发者可以实现支持Wi-Fi Direct的设备间进行相互探测和连接,从而获得较之蓝牙更远距离的高速数据通信效果。

Photon PUN

Photon Unity Networking(首字母缩写PUN)是一个Unity多人游戏插件包。它提供了身份验证选项、匹配,以及快速、可靠的通过我们的Photon后端实现的游戏内通信。

Photon PUN默认使用的是(可靠的)UDP协议,但Photon还支持使用TCP以及将允许一个可靠的HTTP协议。官方建议使用UDP。PUN+不支持TCP。WebGL导出只能使用WebSockets。

发表评论