关掉ack之后,是不是网络传输数据包大小只会传输一次

IP数据包经由路由转发的时候,源ip和目的IP是否改变
日期: 18:08:55
来源:转载
IP数据包经由路由转发的时候,源ip和目的IP是否改变
IP数据包经由路由转发的时候源IP,目的ip是否改变?
这是个搞网络的基础问题,答案是不能改变的,除非做了nat转换才能改变。否则,数据包在整个传输过程中,源IP和目的IP不会发生改变。
不过MAC地址是变化的,因为发送端开始不知道目的主机的MAC地址,所以每经过一个路由器,MAC地址都会发生变化。
目的MAC地址是如何得到的?
TCP/IP里面是用的ARP协议。比如新建了一个内网,如果一台机器A找机器B,封装Fram时(OSI的第二层用的数据格式),要封装对方的
MAC,开始时A不知道B的MAC,只知道IP,它就发一个ARP包,源IP是自己的,目的IP是B的,源MAC是自己的,目的MAC是广播的。然后这个ARP请求包在内网内被广播,当其他机器接到这个包时,用目的IP和自己的IP比较,不是的话就丢弃。是的话,B接到时,发现IP与自己的一样,就答应这个包的请求,把自己的MAC送给A。如果B是其他子网的机器,那么路由器会判断出B是其他子网,然后路由器把自己的MAC返回给A,A以后再给B发包时,目的MAC封装
的是路由器的。
路由转发过程:
当主机A发向主机B的数据流在网络层封装成IP数据包,IP数据包的首部包含了源地址和目标地址。主机A会用本机配置的24位IP网络掩码255.255.255.0与目标地址进行与运算,得出目标网络地址与本机的网络地址是不是在同一个网段中。如果不是将IP数据包转发到网关。
在发往网关前主机A还会通过ARP的请求获得默认网关的MAC地址。在主机A数据链路层IP数据包封装成以太网数据帧,然后才发住到网关……也就是路由器上的一个端口。
当网关路由器接收到以太网数据帧时,发现数据帧中的目标MAC地址是自己的某一个端口的物理地址,这时路由器会把以太网数据帧的封装去掉。路由器认为这个IP数据包是要通过自己进行转发,接着它就在匹配路由表。匹配到路由项后,它就将包发往下一条地址。
路由器转发数据包就是这样,所以它始终是不会改IP地址的。只会改MAC.
当有数据包传到路由器时,路由器首先将其的目的地址与路由表进行对比,如果是本地网络,将不会进行转发到外网络,而是直接转发给本地网内的目的主机;但是如果目的地址经路由表对比,发现不是在本网中,有nat就将改变源地址的IP(原源地址的Ip地址改为了路由器的IP地址),路由器将数据包转发到相应的端口,进行通信。
举个例子,如:A访问B: 首先对比是否同一子网,如果是,检查ARP表,有B的MAC就直接发送,没有就发送ARP请求.如果否,发送到默认网关C,源IP为A,源MAC为A,目的IP为B,目的MAC地址为C, C接收到这个包,检查路由表,发送到下一跳D,源IP为A,源MAC为C,目的IP为B,目的MAC为D….. 如此循环,直到发送到B.
NAT为特殊应用,会修改源IP为网关自己外网IP。
本文出自 “” 博客,转载请与作者联系!
本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
1、隐藏nginx header版本号 2、更改源码隐藏软件名称 3、更改nginx默认用户及用户组 4、配置nginx worker进程个数 5、根据CPU核数进行nginx进程优化 6、nginx事件处理模型优化 7、调整Nginx worker单个进程允许的客户端最大连接数 8、配置Nginx worker进程最大打开文件数 9、开启高效的文件传输模式 10、设置连接超时时间 11、上传文件大小设置(动态应用) 12、fastcgi调优(配合PHP引擎动态服务) 13、配置nginx gzip压缩功
收到通知公司断网,公司核心交换机是两台cisco4507做了VSS,但是由于出口线只有一个跟所以没有正常切换,进入机房发现主交换机办卡都是亮红灯,经过重启,恢复正常。 但是楼层网络依然不通,进入弱电间,查看交换机端口不亮。 console进入交换机,发现error-disable ZPBMC-F16-1# showetherchannelsummary Flags:D-downP-bundledinport-channel I-stand-alones-suspended H-Hot-standby(LA
Linux用户与之权限组管理 权限(rwx、sst、umask) chown chmod ACL(见下篇) 试验环境:CentOS 7.2 与CentOS 6.8,具体会在应用场景明确指出 权限 Linux系统对用户与组的管理,其具体操作手段就是对于权限的分配,而常见的权限分配工具有 rwx, sst, umask, ACL. 跟用户与组有uid和gid一样,权限也有自己的数字标识,用八进制数表示。 我们先逐一作个简单认知,其具体的应用就在后面的实验中慢慢说明了! rwx 当我们在ls -l 时,会看见如
1、LVS环境组网 由于是使用的VM环境,自己PC当作客户机(即公网地址),调度器与服务器都是VM中虚拟机,所以客户和所有服务器之间都是物理直接相连网络,逻辑拓扑图如下: 2、ipvsadm安装前准备 外部IP地址 内部IP地址 角色 10.211.55.16/24 192.168.1.3/24 LVS调度器(虚拟机) 10.211.55.15/24 192.168.1.4/24 RS1(虚拟机) 10.211.55.14/24 192.168.1.5/24 RS2(虚拟机) 10.211.55.19/2
一、cacti 监控软件简介 1. cacti 是用 php 语言实现的一个软件,它的主要功能是用 snmp 服务获取数据,然后用 rrdtool 储存和更新数据,当用户需要查看数据的时候用 rrdtool 生成图表呈现给用户。因此, snmp 和 rrdtool 是 cacti 的关键。 Snmp 关系着数据的收集, rrdtool 关系着数据存储和图表的生成。 2. Mysql 配合 PHP 程序存储一些变量数据并对变量数据进行调用,如:主机名、主机 ip 、 snmp 团体名、端口号、模板信息等变量
之前一直没怎么关注过TCP,直到公司这次的事件,这才开始慢慢去研究,去学习TCP的相关知识,中间也尝试了很多方法,走了很多弯路,因此记下这篇文章,方便以后回顾 首先说下网络架构 Nginx和jetty都在同一个服务器,Nginx代理HTTP流量至多个jetty应用,基本情况就是这样 首先我们来看下,为什么会有TIMEWAIT的状态 客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间,进入CLOSED状态。 也就是说一般timewait只会出现在client
因为都知道安装linux软件包rpm 很好用;但是不能解决软件包的个别依赖关系;所以安装数据包时出现依赖时、yum到可以解决这类数据包依赖关系;而且还能便于管理大量数据包更新的问题;它的特点 、可以同时配置多个资源库(Repository) ,简洁的配置文件(/etc/yum.conf) ,自动解决增加或删除rpm包时遇到的倚赖性问题,保持与RPM数据库的一致性这也是它的优势。因此解决数据包的依赖关系;也是基于服务器和客户端的一种应用。 首先呢 介绍一下YUM 的简单指令: yum info // 查询详
最近在做一个Exchange升级的项目,在部署Exchange Server 2016之前需要将现有环境的Exchange 2010 SP1更新至Exchange Server 2010 SP3RU11或更新的版本中。在更新完SP3+RU11后发现登录OWA时出现异常,在最开始初步以为是RU11的问题,但是卸载后RU11还是一样的问题,所以当时排除是花了比较长的时间的。如下是本次的现象和最后解决的办法供大家参考。 升级至SP3+RU11重启后发现有时可以登录OWA但是点击“新建“邮件时提示 ”无法完成您的
谁说Lync Server 前端不可以使用Windows网络负载平衡实现高可用的?(仅限测试环境) 本章内容有: 1.两台Lync Server安装Windows功能---网络负载平衡 2.配置网络负载平衡 3.DNS记录修改 4.测试故障切换(模拟两种故障,网络故障和服务故障) 5.开始的时候别忘了上一章中的提示,将两台前端Server都进行重启 = = 安装网络负载平衡 两台服务器都需要进行安装 = = 配置网络负载平衡 1)新建群集 2)将LyncFE01先添加到群集中 3)群集IP自己随便填写 4
建立完存储池之后,创建虚拟硬盘的时候,在此虚拟磁盘上创建存储层无法勾选,原因是windows系统识别不出来RAID卡下的硬盘,显示未知如图: 解决办法:powershell 运行在管理员模式下,用下面两条命令(视情况使用其中一条命令即可)。 set-physicaldisk -friendlyname physicaldisk3(看名称自己改) -mediatype hdd (转换磁盘类型为HDD) set-physicaldisk -friendlyname physicaldisk3(看名称自己改)-
Copyright (C)
ITfish.net博客访问: 560537
博文数量: 237
博客积分: 2366
博客等级: 大尉
技术积分: 1620
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: LINUX
&分类:&&2056人阅读&&&TCP传输小数据包效率问题(译自MSDN)&摘要:当使用TCP传输小型数据包时,程序的设计是相当重要的。如果在设计方案中不对TCP数据包的延迟应答,Nagle算法,Winsock缓冲作用引起重视,将会严重影响程序的性能。这篇文章讨论了这些问题,列举了两个案例,给出了一些传输小数据包的优化设计方案。背景:当Microsoft TCP栈接收到一个数据包时,会启动一个200毫秒的计时器。当ACK确认数据包发出之后,计时器会复位,接收到下一个数据包时,会再次启动200毫秒的计时器。为了提升应用程序在内部网和Internet上的传输性能,Microsoft TCP栈使用了下面的策略来决定在接收到数据包后什么时候发送ACK确认数据包:1、如果在200毫秒的计时器超时之前,接收到下一个数据包,则立即发送ACK确认数据包。2、如果当前恰好有数据包需要发给ACK确认信息的接收端,则把ACK确认信息附带在数据包上立即发送。3、当计时器超时,ACK确认信息立即发送。为了避免小数据包拥塞网络,Microsoft TCP栈默认启用了Nagle算法,这个算法能够将应用程序多次调用Send发送的数据拼接起来,当收到前一个数据包的ACK确认信息时,一起发送出去。下面是Nagle算法的例外情况:1、如果Microsoft TCP栈拼接起来的数据包超过了MTU值,这个数据会立即发送,而不等待前一个数据包的ACK确认信息。在以太网中,TCP的MTU(Maximum Transmission Unit)值是1460字节。2、如果设置了TCP_NODELAY选项,就会禁用Nagle算法,应用程序调用Send发送的数据包会立即被投递到网络,而没有延迟。为了在应用层优化性能,Winsock把应用程序调用Send发送的数据从应用程序的缓冲区复制到Winsock内核缓冲区。Microsoft TCP栈利用类似Nagle算法的方法,决定什么时候才实际地把数据投递到网络。内核缓冲区的默认大小是8K,使用SO_SNDBUF选项,可以改变Winsock内核缓冲区的大小。如果有必要的话,Winsock能缓冲大于SO_SNDBUF缓冲区大小的数据。在绝大多数情况下,应用程序完成Send调用仅仅表明数据被复制到了Winsock内核缓冲区,并不能说明数据就实际地被投递到了网络上。唯一一种例外的情况是:通过设置SO_SNDBUT为0禁用了Winsock内核缓冲区。Winsock使用下面的规则来向应用程序表明一个Send调用的完成:1、如果socket仍然在SO_SNDBUF限额内,Winsock复制应用程序要发送的数据到内核缓冲区,完成Send调用。2、如果Socket超过了SO_SNDBUF限额并且先前只有一个被缓冲的发送数据在内核缓冲区,Winsock复制要发送的数据到内核缓冲区,完成Send调用。3、如果Socket超过了SO_SNDBUF限额并且内核缓冲区有不只一个被缓冲的发送数据,Winsock复制要发送的数据到内核缓冲区,然后投递数据到网络,直到Socket降到SO_SNDBUF限额内或者只剩余一个要发送的数据,才完成Send调用。案例1一个Winsock TCP客户端需要发送10000个记录到Winsock TCP服务端,保存到数据库。记录大小从20字节到100字节不等。对于简单的应用程序逻辑,可能的设计方案如下:1、客户端以阻塞方式发送,服务端以阻塞方式接收。2、客户端设置SO_SNDBUF为0,禁用Nagle算法,让每个数据包单独的发送。3、服务端在一个循环中调用Recv接收数据包。给Recv传递200字节的缓冲区以便让每个记录在一次Recv调用中被获取到。性能:在测试中发现,客户端每秒只能发送5条数据到服务段,总共10000条记录,976K字节左右,用了半个多小时才全部传到服务器。分析:因为客户端没有设置TCP_NODELAY选项,Nagle算法强制TCP栈在发送数据包之前等待前一个数据包的ACK确认信息。然而,客户端设置SO_SNDBUF为0,禁用了内核缓冲区。因此,10000个Send调用只能一个数据包一个数据包的发送和确认,由于下列原因,每个ACK确认信息被延迟200毫秒:1、当服务器获取到一个数据包,启动一个200毫秒的计时器。2、服务端不需要向客户端发送任何数据,所以,ACK确认信息不能被发回的数据包顺路携带。3、客户端在没有收到前一个数据包的确认信息前,不能发送数据包。4、服务端的计时器超时后,ACK确认信息被发送到客户端。如何提高性能:在这个设计中存在两个问题。第一,存在延时问题。客户端需要能够在200毫秒内发送两个数据包到服务端。因为客户端默认情况下使用Nagle算法,应该使用默认的内核缓冲区,不应该设置SO_SNDBUF为0。一旦TCP栈拼接起来的数据包超过MTU值,这个数据包会立即被发送,不用等待前一个ACK确认信息。第二,这个设计方案对每一个如此小的的数据包都调用一次Send。发送这么小的数据包是不很有效率的。在这种情况下,应该把每个记录补充到100字节并且每次调用Send发送80个记录。为了让服务端知道一次总共发送了多少个记录,客户端可以在记录前面带一个头信息。案例二:一个Winsock TCP客户端程序打开两个连接和一个提供股票报价服务的Winsock TCP服务端通信。第一个连接作为命令通道用来传输股票编号到服务端。第二个连接作为数据通道用来接收股票报价。两个连接被建立后,客户端通过命令通道发送股票编号到服务端,然后在数据通道上等待返回的股票报价信息。客户端在接收到第一个股票报价信息后发送下一个股票编号请求到服务端。客户端和服务端都没有设置SO_SNDBUF和TCP_NODELAY选项。性能:测试中发现,客户端每秒只能获取到5条报价信息。分析:这个设计方案一次只允许获取一条股票信息。第一个股票编号信息通过命令通道发送到服务端,立即接收到服务端通过数据通道返回的股票报价信息。然后,客户端立即发送第二条请求信息,send调用立即返回,发送的数据被复制到内核缓冲区。然而,TCP栈不能立即投递这个数据包到网络,因为没有收到前一个数据包的ACK确认信息。200毫秒后,服务端的计时器超时,第一个请求数据包的ACK确认信息被发送回客户端,客户端的第二个请求包才被投递到网络。第二个请求的报价信息立即从数据通道返回到客户端,因为此时,客户端的计时器已经超时,第一个报价信息的ACK确认信息已经被发送到服务端。这个过程循环发生。如何提高性能:在这里,两个连接的设计是没有必要的。如果使用一个连接来请求和接收报价信息,股票请求的ACK确认信息会被返回的报价信息立即顺路携带回来。要进一步的提高性能,客户端应该一次调用Send发送多个股票请求,服务端一次返回多个报价信息。如果由于某些特殊原因必须要使用两个单向的连接,客户端和服务端都应该设置TCP_NODELAY选项,让小数据包立即发送而不用等待前一个数据包的ACK确认信息。提高性能的建议:上面两个案例说明了一些最坏的情况。当设计一个方案解决大量的小数据包发送和接收时,应该遵循以下的建议:1、如果数据片段不需要紧急传输的话,应用程序应该将他们拼接成更大的数据块,再调用Send。因为发送缓冲区很可能被复制到内核缓冲区,所以缓冲区不应该太大,通常比8K小一点点是很有效率的。只要Winsock内核缓冲区得到一个大于MTU值的数据块,就会发送若干个数据包,剩下最后一个数据包。发送方除了最后一个数据包,都不会被200毫秒的计时器触发。2、如果可能的话,避免单向的Socket数据流接连。3、不要设置SO_SNDBUF为0,除非想确保数据包在调用Send完成之后立即被投递到网络。事实上,8K的缓冲区适合大多数情况,不需要重新改变,除非新设置的缓冲区经过测试的确比默认大小更高效。4、如果数据传输不用保证可靠性,使用UDP。
阅读(1898) | 评论(0) | 转发(1) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。君,已阅读到文档的结尾了呢~~
24L01 带数据包的ACK,用于双向传输
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
24L01 带数据包的ACK,用于双向传输
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口发现网上关于24L01带数据包的ACK介绍的比较;带数据包的ACK应答传输,有的人说只能用在24L;利用这个ACK做数据传输,首先要配置正确,对于配;1,需要设置成为可变长度的接收与发送;2,需要将接收数据的ACK使能;3,由于ACK带有数据因此自动重发的时间要改成5;4,将数据写入等待发送使用的是W_ACK_PAY;作为接收模式,若要让ACK带上数据包,那
发现网上关于24L01带数据包的ACK介绍的比较少,自己之前做四轴的时候想说用24L01做双向通讯,但是对于频繁切换发送、接收模式很是麻烦,时间调的不好很容易造成通讯失败,后来想到24L01的带数据包的ACK做双向通讯,在网上找了资料,但是就只做了简单介绍,没有介绍用的时候是怎么实现,下面我就对我使用的过程做一个总结,在附上测试程序(C51),本人热衷于使用STC单片机做东西,四轴也是用STC单片机来做的控制板,飞的也还行。对于初学者来讲,STC单片机的程序看起来也比较容易看得懂,对于双向传输,我看过STM32的程序,想要移植到51上,但是对于发送接收部分没有详细的注释,所以刚开始也是一头雾水,找半天都找不到什么时候吧带数据的ACK包送入缓存,所以也就放弃了,但是我觉得初始化部分写的比较好,所以也就移植了部分程序,好了不多说,下面开始将原理:
带数据包的ACK应答传输,有的人说只能用在24L01+上,没有+的用不了,然而我刚好只有带+的,没带+的用不用的了这个我就不知道了,但是我看过没带+的芯片手册,并没有看到有关带数据包的ACK的介绍,然后又看了带+的芯片手册,在带+的手册上发现有相关带数据包的ACK的介绍,所以我也认为ACK要能带数据包,只能用在有+的芯片上。
利用这个ACK做数据传输,首先要配置正确,对于配置,你们网上找找,也能找到,我也在这里直接复制粘贴别人的说法:
1,需要设置成为可变长度的接收与发送
2,需要将接收数据的ACK使能
3,由于ACK带有数据因此自动重发的时间要改成500μS
4,将数据写入等待发送使用的是W_ACK_PAYLOAD命令
作为接收模式,若要让ACK带上数据包,那就得在接收到数据之前,把数据包送到ACK发送缓存,将数据写入W_ACK_PAYLOAD这个地址里面,详细介绍如下
从这里可以看出,W_ACK_PAYLOAD的地址为0xA8-0xAD,用哪个地址由你喜欢,缓存字节数为32字节。
所以,初始化为接收模式之后,就先装载ACK包,然后在进入接收循环,每当接收到发送端发送过来的数据,读取数据完毕,马上把ACK数据包再写进去,不写的话发送端就接收不到带数据包的ACK。
作为发送端,在发送完数据之后立马就读取到ACK数据包了,我刚开始用的时候也是犯傻,怎么把ACK里面的数据提取出来,想了半天,后来也是灵光一现,想着,手册上说,通道0是接收应答信号的,那收到的ACK数据包读取方式应该跟一般接收到的数据读取方式是一样的,所以我就尝试了一下,果然成了,能接收到数据了,废话不多说,我文采不好,不想打这么多字了,下面直接附上程序:
以下是.h文件
/*****************************************************************************************************************************************************/
#ifndef __NRF24L01_H_
#define __NRF24L01_H_
#define uchar unsigned char
#define uint unsigned int
1:GND;2:V3:CE;4CSN;5:SCK;6:MOSI;7:MISO;8:IRQ
// sbit CE
// Chip Enable pin signal (output)
// sbitCSN
// Slave Select pin, (output to CSN, nRF24L01)
// sbitSCK
// Interrupt signal, from nRF24L01 (input)
// sbit MOSI = P7^0;
// Master In, Slave Out pin (input)
// sbit MISO = P3^7;
// Serial Clock pin, (output)
// sbitIRQ
// Master Out, Slave In pin (output)
// Chip Enable pin signal (output)
// Slave Select pin, (output to CSN, nRF24L01)
// Interrupt signal, from nRF24L01 (input)
sbit MOSI = P0^1;
// Master In, Slave Out pin (input)
sbit MISO = P0^0;
// Serial Clock pin, (output)
// Master Out, Slave In pin (output)
// SPI(nRF24L01) commands
#define READ_REG
//读寄存器指令
#define WRITE_REG
//写寄存器指令
#define R_RX_PL_WID 0x60
//读接收到的数据长度
#define RD_RX_PLOAD 0x61
//读接收数据指令
#define WR_TX_PLOAD 0xA0
//写待发送数据指令
#define W_ACK_PAYLOAD 0xA8
//写ACK数据指令,用于接收模式
#define FLUSH_TX
//冲洗发送FIFO指令
#define FLUSH_RX
//冲洗接收FIFO指令
#define REUSE_TX_PL 0xE3
//重复装载数据指令
#define NOP
//空指令,用于读出状态字
//寄存器地址
#define CONFIG
//配置寄存器
#define EN_AA
//自动应答,禁止自动应答后可以与2401通讯
#define EN_RXADDR
//接收地址允许
#define SETUP_AW
//设置地址宽度
#define SETUP_RETR
//自动重发
#define RF_CH
//射频通道
#define RF_SETUP
//射频寄存器
#define STATUS
//状态寄存器
#define OBSERVE_TX
//发送检测寄存器
#define CD
//地址检查
#define RX_ADDR_P0
//数据通道0接收地址,最大长度5个字节,先写低字节,所有字节数量由SETUP_AW设定
#define RX_ADDR_P1
//数据通道1接收地址,最大长度5个字节,先写低字节,所有字节数量由SETUP_AW设定
#define RX_ADDR_P2
//数据通道2接收地址,最低字节可设定,高字节部分必须与RX_ADDR_P1[39:8]相等
#define RX_ADDR_P3
//数据通道3接收地址,最低字节可设定,高字节部分必须与RX_ADDR_P1[39:8]相等
#define RX_ADDR_P4
//数据通道4接收地址,最低字节可设定,高字节部分必须与RX_ADDR_P1[39:8]相等
#define RX_ADDR_P5
//数据通道5接收地址,最低字节可设定,高字节部分必须与RX_ADDR_P1[39:8]相等
#define TX_ADDR
//发送地址
#define RX_PW_P0
//通道0接收数据长度
#define RX_PW_P1
//通道1接收数据长度
#define RX_PW_P2
//通道2接收数据长度
#define RX_PW_P3
//通道3接收数据长度
#define RX_PW_P4
//通道4接收数据长度
#define RX_PW_P5
//通道5接收数据长度
#define FIFO_STATUS 0x17
//FIFO状态寄存器
#define DYNPD 0x1C
#define FEATURE 0x1D
#define Mode_RX1 1
//普通接收模式
#define Mode_TX1 2
//普通发送模式
#define Mode_RX2 3
//双向传输接收模式
#define Mode_TX2 4
//双向传输发送模式
#define TX_ADR_WIDTH
// 5字节宽度的发送地址
#define RX_ADR_WIDTH
// 5字节宽度的接收地址
#define TX_PLOAD_WIDTH 32
// 数据通道有效数据宽度
#define RX_PLOAD_WIDTH 32
// 数据通道有效数据宽度
externuchar code TX_ADDRESS[TX_ADR_WIDTH];
externuchar code RX_ADDRESS[RX_ADR_WIDTH];
extern uchar
RX_BUF[TX_PLOAD_WIDTH];
extern uchar
TX_BUF[TX_PLOAD_WIDTH];
extern ucharRX_
//接收标志
extern uchar L
//数据长度
//接收缓存
//发送缓存
void Init_24L01(Byte ModeDat,Bytech);
//初始化24L01
void Delay12us();
uchar SPI_RW(uchar byte);
//SPI读写函数
ucharSPI_Write_Reg(ucharreg, uchar value);
ucharSPI_Read(ucharreg);
ucharSPI_Read_Buf(ucharreg, uchar * pBuf, uchar bytes);
ucharSPI_Write_Buf(ucharreg, uchar * pBuf, uchar bytes);
void NRF_TX(uchar *pBuf, uchar Len); //发送数据包,用于发送模式2/4
void NRF_TX_AP(uchar *pBuf, uchar Len); //发送数据包,接收模式2
ucharCheck_ACK(bit clear);
void Read_24L01_data(void);
/********************************************************************************************************************************************************/
以下是.c文件
#include &STC15W.h&
#include &nrf24l01.h&
#include &intrins.h&
#include &uart1.h&
MAX_RT = sta^4;
uchar code TX_ADDRESS[TX_ADR_WIDTH] = {0x13,0x14,0x52,0x05,0x20};
// 定义一个静态发送地址
uchar code RX_ADDRESS[RX_ADR_WIDTH] = {0x13,0x14,0x52,0x05,0x20};
// 定义一个静态发送地址
uchar RX_BUF[TX_PLOAD_WIDTH];
//接收缓存
uchar TX_BUF[TX_PLOAD_WIDTH];
//发送缓存
//接收标志
//数据长度
/**************************************************/
/**************************************************
函数: init_io()
/**************************************************/
void Init_24L01(Byte ModeDat,Bytech)
// SPI禁止
// SPI时钟置低
// 中断复位
Delay12us();
SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);
// 写入发送地址
SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH);
// 为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Reg(WRITE_REG + EN_AA, 0x01);
// 使能接收通道0自动应答
SPI_Write_Reg(WRITE_REG + EN_RXADDR, 0x01);
// 使能接收通道0
SPI_Write_Reg(WRITE_REG + SETUP_RETR, 0x1a);
// 自动重发延时等待500us,自动重发10次
SPI_Write_Reg(WRITE_REG + RF_CH, ch);
// 选择射频通道ch
SPI_Write_Reg(WRITE_REG + RF_SETUP, 0x0f);
// 数据传输率1Mbps,发射功率0dBm,低噪声放大器增益
switch(ModeDat)
case 1: SPI_Write_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH);
// 接收通道0选择和发送通道相同有效数据宽度
SPI_Write_Reg(WRITE_REG + CONFIG, 0x0f);
case 2: SPI_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);
SPI_Write_Reg(WRITE_REG + CONFIG, 0x0e);
case 3: SPI_Write_Reg(FLUSH_TX,0xff);
SPI_Write_Reg(FLUSH_RX,0xff);
三亿文库包含各类专业文献、生活休闲娱乐、应用写作文书、各类资格考试、专业论文、文学作品欣赏、高等教育、外语学习资料、中学教育、幼儿教育、小学教育、9724L01+带数据包的ACK,用于双向传输等内容。 
 提供可靠地数据传输 网络层:IP:IP 包传输和路由...172.118.128.0/21 172.118.129.0/24 ....14. ACK:仅当 ACK=1 时该字段有效。TCP 规定,...  SMT32实现的nRF24L01的双向通信_信息与通信_工程科技...用于读数据,reg:为寄存器地址,pBuf:为待读出数据...// 写接收端地址 只设置了频道 0 自动 ACK 应答...  (3)客户端也返回一个确认报文 ACK 给服务器端,...针对某数据包的应答报文段丢失的情况下,只要在超时...(60×60×24=86400),以 75Tb/s 速率传输,序号...  (C) A、用于传输的网络设备将调节该网段的 MTU ...网段的 MTU(D) A、1 B、2 C、 3 D、4 24....的数据 包(C) A、SYN-ACK B、SYN-2 C、ACK ...  熟悉 TCP 数据包的结构; 深刻理解网络体系结构中传输层与上下层之间的关系; 二...//32 位序列号 ULONG th_ //32 位确认号 UCHAR th_ //4 位...  实验三:利用分组嗅探器分析传输层与网络层协议【实验...每一个片段接收到 ACK 是什么时候?请给出每一个 ...回答以下问题: (24) (25) 从原始的数据包中产生...  TCP 数据包格式 源端口和目的端口字段――各占 2 字节。端口是传输层与应用层...ACK――只有当 ACK=1 时确认号字段才有效。当 ACK=0 时,确认 确认比特 ACK...  因通信丢失而重新传输的数据包 D 特定层的封装 005...A、Host1 会向 Host2 发送带有 ACK 标志 = 0、...24 网络划分子网 E 禁用交换机上未使用的所有接口...  和控制报文协议,不仅用于传输差错报文,还传输 控制...Request 数据包 ACK 数据包 Q7.你的 DHCP 服务器...实验时间: 12-24 客户端 MAC: A.上传的文件名是...

我要回帖

更多关于 tcp压缩传输数据包 的文章

 

随机推荐