tcpip如何间隔两帧数据_tcpip连接数怎么设置
6-AT命令交互之-TCPIP
对于AT方式的TCPIP接口一般都是各个厂家自己封装的指令,下面以移远和simcom公司的为例进行说明。
tcpip如何间隔两帧数据_tcpip连接数怎么设置
tcpip如何间隔两帧数据_tcpip连接数怎么设置
tcpip如何间隔两帧数据_tcpip连接数怎么设置
tcpip如何间隔两帧数据_tcpip连接数怎么设置
1.连接TCP
TCP的建立可以是IP也可以是域名,不过需要在连接之前设置
设置为域名连接:AT+QIDNSIP=1
建立TCP连接:AT+QIOPEN="TCP","121.201.34.111","1234"
QIOPEN返回的结果的时间跟网络有关系,所以有时候为了避免等待会主动查询当前的网络状态。
查询TCP连接状态:AT+QISTAT
2.发送
发送数据:AT+QISEND=195
查询发送结果:AT+QISACK
3.接收
数据的接收有两种情况,一种是模块将接收到的数据直接返回给AT发送者,一种是模块将接收到的数据存在缓存里面,有用户自行调用接口去读取数据。
要在TCP连接之前就设置为缓存模式
数据的接收可以不一次性接收完成,可能分段接收。
查询接收结果:AT+QIRD
4.断开TCP
断开TCP连接:AT+QICLOSE
5.其他
断开GPRS:AT+QIDEACT
激活GPRS:AT+QIACT
1.连接TCP
建立TCP连接:AT+CIPSTART="TCP","121.201.34.111","1234"
CIPSTART返回的结果的时间跟网络有关系,所以有时候为了避免等待会主动查询当前的网络状态。
查询TCP连接状态:AT+CIPSTATUS
2.发送
发送数据:AT+CIPSEND=12
CIPSEND返回的结果的时间也跟网络有关系,所以有时候为了避免等待会主动查询当前的发送状态。
查询发送结果:AT+CIPACK
3.接收
数据的接收有两种情况,一种是模块将接收到的数据直接返回给AT发送者,一种是模块将接收到的数据存在缓存里面,有用户自行调用接口去读取数据。
要在TCP连接之前就设置为缓存模式
数据的接收可以不一次性接收完成,可能分段接收。
查询接收结果:AT+CIPRXGET=2,69
4.断开TCP
断开TCP连接:AT+CIPCLOSE
5.其他
断开GPRS:AT+CIPSHUT
激活GPRS:AT+CIICR
TCP/IP协议有那几层?每一层功能?每一层设备
TCP/IP协议层次 模型共分为四层,分别是:应用层、传输层、网络层、数据链路层;
1、应用层是指所有用户所面向的应用程序的统称,TCP/IP协议族在这里层由许多协议来支持不同的应用,比如、FTP、SMTP、DNS、net等等。而这里对于用户来说看到的是一个个的软件所构筑的图形化的界面,比如浏览器、远程登录界面等。
2、传输层的主要功能是提供应用程序间的通讯,TCP/IP协议在这次层的协议有TCP和UDP。该层对于用户来说是主机对主机层,负责对上层应用程序隐藏网络的复杂性。
3、网络层的主要功能是定义了IP格式,从而使得不同应用类型的数据在Internet上通常的传输。主要包括协议比如IP、ICMP、ARP、RARP、ARP等。网络层对用户来说标志性设备为路由器,负责路由选择以及提供单个到上层的网络结构。
4、数据链路层是层,主要功能是负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层。该层对于用户来说标志性设备为交换机。
为什么有时需要对IP数据报进行分片?如何分片?
任何时候IP层接收到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU。IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发生在原始发送端主机上,也可以发生在中间路由器上。
把一份IP数据报分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,它们要求在下一站就进行进行重新组装,而不是在最终的目的地)。重新组装由目的端的IP层来完成,其目的是使分片和重新组装过程对运输层( T C P和UDP)是透明的,除了某些可能的越级作外。已经分片过的数据报有可能会再次进行分片(可能不止一次)。IP首部中包含的数据为分片和重新组装提供了足够的信息。
回忆IP首部(图3 - 1),下面这些字段用于分片过程。对于发送端发送的每份IP数据报来说,其标识字段都包含一个值。该值在数据报分片时被到每个片中(我们现在已经看到这个字段的用途)。标志字段用其中一个比特来表示“更多的片”。除了一片外,其他每个组成数据报的片都要把该比特置1。片偏移字段指的是该片偏移原始数据报开始处的位置。另外,当数据报被分片后,每个片的总长度值要改为该片的长度值。
,标志字段中有一个比特称作“不分片”位。如果将这一比特置1,IP将不对数据报进行分片。相反把数据报丢弃并发送一个I C M P错报文(“需要进行分片但设置了不分片比特”,见图6 - 3)给起始端。在下一节我们将看到出现这个错的例子。
当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组。这样,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据报片。
尽管IP分片过程看起来是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。为什么会发生这种情况呢?因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(T C P有超时和重传机制,但UDP没有。一些UDP应用程序本身也执行超时和重传)。当来自T C P报文段的某一片丢失后,T C P在超时后会重发整个T C P报文段,该报文段对应于一份IP数据报。没有办法只重传数据报中的一个数据报片。事实上,如果对数据报分片的是中间路由器,而不是起始端系统,那么起始端系统就无法知道数据报是如何被分片的。就这个原因,经常要避免分片。文献[Kent and Mogul 1987]对避免分片进行了论述。
使用UDP很容易导致IP分片(在后面我们将看到, T C P试图避免分片,但对于应用程序来说几乎不可能T C P发送一个需要进行分片的长报文段)。我们可以用s o c k程序来增加数据报的长度,直到分片发生。在一个以太网上,数据帧的长度是1 5 0 0字节(见图2 - 1),其中1 4 7 2字节留给数据,定IP首部为2 0字节, UDP首部为8字节。我们分别以数据长度为1471, 1472, 1473和1 4 7 4字节运行s o c k程序。两次应该发生分片:
bsdi % sock -u -i -nl -w1471 svr4 discard
bsdi % sock -u -i -nl -w1472 svr4 discard
bsdi % sock -u -i -nl -w1473 svr4 discard
bsdi % sock -u -i -nl -w1474 svr4 discard
相应的tcpdump输出如图11 - 7所示。
前两份UDP数据报(第1行和第2行)能装入以太网数据帧,没有被分片。但是对应于写1473字节的IP数据报长度为1 5 0 1,就必须进行分片(第3行和第4行)。同理,写1 4 7 4字节产生的数据报长度为1 5 0 2,它也需要进行分片(第5行和第6行)。
当IP数据报被分片后, tcpdump打印出其他的信息。首先,frag 26304(第3行和第4行)和frag 26313(第5行和第6行)指的是IP首部中标识字段的值。
分片信息中的下一个数字,即第3行中位于冒号和@号之间的1480,是除IP首部外的片长。两份数据报片的长度均为1480:UDP首部占8字节,用户数据占1 4 7 2字节(加上IP首部的2 0字节分组长度正好为1 5 0 0字节)。第1份数据报的第2片(第4行)只包含1字节数据—剩下的用户数据。第2份数据报的第2片(第6行)包含剩下的2字节用户数据。
在分片时,除一片外,其他每一片中的数据部分(除IP首部外的其余部分)必须是8字节的整数倍。在本例中, 1480是8的整数倍。
位于@符号后的数字是从数据报开始处计算的片偏移值。两份数据报第1片的偏移值均为0(第3行和第5行),第2片的偏移值为1480(第4行和第6行)。跟在偏移值后面的加号对应于IP首部中3 bit标志字段中的“更多片”比特。设置这一比特的目的是让接收端知道在什么时候完成所有的分片组装。
,注意第4行和第6行(不是第1片)省略了协议名( UDP)、源端口号和目的端口号。协议名是可以打印出来的,因为它在IP首部并被到各个片中。但是,端口号在UDP首部,只能在第1片中被发现。
发送的第3份数据报(用户数据为1473字节)分片情况如图11 - 8所示。需要重申的是,任何运输层首部只出现在第1片数据中。
另外需要解释几个术语: IP数据报是指IP层端到端的传输单元(在分片之前和重新组装之后),分组是指在IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。
TCPIP通信建立的过程是什么
1、TCP、IP通信过程,简单为,三次建立,四次断开;
2、三次建立,三次握手完成,主机A和主机B能够建立连接;
3、四次断开,某个应用进程先调用close,称该端执行主动关闭,该端的TCP发送一个FIN分节,表示数据发送完毕一段时间的等待后,接收到这个文件结束符的应用进程将调用close关闭它的套接字,所以它的TCP也发送一个FIN,接收到这个最终FIN的原发送端TCP确认这个FIN,因为每个方向都需要一个FIN和ACK,所以断开需要四个次连接。
tcpip 一对多通信如何实现
同学您好!!!单个与
多个用户的通信连接,用户方面的流程是:1.新建套接字Socket
s;2.确定IP地址和端口号 addr = 192.168.1.12 port =
8080;3.对本机地址进行显式或隐式绑定(一般采用隐式绑定故这步可以忽略)4.开启与的连接connect(s,addr);5.进行数据交
互传输 send recv;6.通信结束 关闭套接字closesocket(s);
方面的流程是:1.新建套接字Socket
s;2.确定本地IP和端口号(不能隐式绑定)addr = 192.168.1.12 port =
8080;3.对本地IP和端口进行绑定bind(s,addr);4.对端口进行listen(s);5.接收一个连接 newsock =
accept(s);6.在接收了一个连接之后,便新建一个套接字newsock,
此时要开启一个子线程来负责处理与该用户机的数据传输,而主线程继续端口创建新的子线程来与多个用户进行连接。C下可以采用createThread
函数,
CreateThread( NULL,0,
chat, //子线程函数入口
&newsock, //传给子线程的参数
0, &Tid);然后在chat函数中进行recv和send即可
TCPIP间隔多久收发一次
100ms。
用TCP助手做客户机每隔100ms发送一次数据。S7-1200PLC接收端使用不定长接收(引脚ADHOC=1)。产生的问题:发送间隔100ms时,PLC端有时会将2次接收的数据合并成1条。发送间隔200ms时,PLC端逐条接收。
通常tcpsocket的send和recv系统调用都有阻塞的语义,如果发送接收条件不足,应用程序会无限期的阻塞在调用处。超时就是在应用程序上注册了一个信号处理器,当调用超时时,作系统向应用程序发送一个信号。
版权声明:图片、内容均来源于互联网 如有侵权联系836084111@qq.com 删除