当前位置:首页 » 合同协议 » 数据协议

数据协议

发布时间: 2020-11-21 08:15:54

⑴ 封装UDP报文的IP数据包首部协议字段值为____,封装TCP报文的IP数据包首部协议字段值为___

上图是IP包的头结构,其中协议(Protocol)部分长度8比特。标识了上层所使用的协版议。
以下是权比较常用的协议号:
1ICMP
2IGMP
6TCP
17 UDP
88 IGRP
89 OSPF

所以,封装了UDP包,值 为17,封装了TCP包,值 为6.

⑵ 为什么数据中要有协议

没有通信协议,我们都用自己的协议,那接口不就是不同的了吗?那样就没有办法通信了.

⑶ 什么是“数据带通用协议”

数据传输通用协议包括:TCP/IP协议、IPX/SPX协议、NetBEUI协议等。(专用通信协议相对于通用数据协议而言,如:VPN等)利用这些协议“附带”传输数据非常危险,很容易被截获。普通的抓包软件就可以将这些数据包内容解析出来,获得“附带”的数据。
利用通用协议传输数据被称为“隐蔽通道”。这种数据传输方式被拒绝,原因主要有两个:
一是利用这种方式传递合法数据是危险的,因此很少有人使用;
二是非法分子利用这种传递方式传递恶意代码,可能对系统造成很大损害。这是四级安全防护要求避免这种数据传输方式的主要目的。

⑷ 数据协议标准 的定义

PDU
传输层的数据叫段
网络层叫包
数据链路层叫帧
物理层叫比特流

⑸ 单片机中所说的通信协议是什么

单片机通信协议
现在大部分的仪器设备都要求能过通过上位机软件来操作,这样方便调试,利于操作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。
1.自定义数据通信协议

这里所说的数据协议是建立在物理层之上的通信数据包格式。所谓通信的物理层就是指我们通常所用到的RS232、RS485、红外、光纤、无线等等通信方式。在这个层面上,底层软件提供两个基本的操作函数:发送一个字节数据、接收一个字节数据。所有的数据协议全部建立在这两个操作方法之上。
通信中的数据往往以数据包的形式进行传送的,我们把这样的一个数据包称作为一帧数据。类似于网络通信中的TCPIP协议一般,比较可靠的通信协议往往包含有以下几个组成部分:帧头、地址信息、数据类型、数据长度、数据块、校验码、帧尾。

帧头和帧尾用于数据包完整性的判别,通常选择一定长度的固定字节组成,要求是在整个数据链中判别数据包的误码率越低越好。减小固定字节数据的匹配机会,也就是说使帧头和帧尾的特征字节在整个数据链中能够匹配的机会最小。通常有两种做法,一、减小特征字节的匹配几率。二、增加特征字节的长度。通常选取第一种方法的情况是整个数据链路中的数据不具有随即性,数据可预测,可以通过人为选择帧头和帧尾的特征字来避开,从而减小特征字节的匹配几率。使用第二种方法的情况更加通用,适合于数据随即的场合。通过增加特征字节的长度减小匹配几率,虽然不能够完全的避免匹配的情况,但可以使匹配几率大大减小,如果碰到匹配的情况也可以由校验码来进行检测,因此这种情况在绝大多说情况下比较可靠。

地址信息主要用于多机通信中,通过地址信息的不同来识别不同的通信终端。在一对多的通信系统中,可以只包含目的地址信息。同时包含源地址和目的地址则适用于多对多的通信系统。

数据类型、数据长度和数据块是主要的数据部分。数据类型可以标识后面紧接着的是命令还是数据。数据长度用于指示有效数据的个数。

校验码则用来检验数据的完整性和正确性。通常对数据类型、数据长度和数据块三个部分进行相关的运算得到。最简单的做法可是对数据段作累加和,复杂的也可以对数据进行CRC运算等等,可以根据运算速度、容错度等要求来选取。

2.上位机和下位机中的数据发送

物理通信层中提供了两个基本的操作函数,发送一个字节数据则为数据发送的基础。数据包的发送即把数据包中的左右字节按照顺序一个一个的发送数据而已。当然发送的方法也有不同。

在单片机系统中,比较常用的方法是直接调用串口发送单个字节数据的函数。这种方法的缺点是需要处理器在发送过程中全程参与,优点是所要发送的数据能够立即的出现在通信线路上,能够立即被接收端接收到。另外一种方法是采用中断发送的方式,所有需要发送的数据被送入一个缓冲区,利用发送中断将缓冲区中的数据发送出去。这种方法的优点是占用处理器资源小,但是可能出现需要发送的数据不能立即被发送的情况,不过这种时延相当的小。对于51系列单片机,比较倾向于采用直接发送的方式,采用中断发送的方式比较占用RAM资源,而且对比直接发送来说也没有太多的优点。以下是51系列单片机中发送单个字节的函数。

void SendByte(unsigned char ch)
{
SBUF = ch;
while(TI == 0);
TI = 0;
}

上位机中关于串口通信的方式也有多种,这种方式不是指数据有没有缓冲的问题,而是操作串口的方式不同,因为PC上数据发送基本上都会被缓冲后再发送。对于编程来说操作串口有三种方式,一、使用windows系统中自带的串口通信控件,这种方式使用起来比较简单,需要注意的是接收时的阻塞处理和线程机制。二、使用系统的API直接进行串口数据的读取,在windows和linux系统中,设备被虚拟为文件,只需要利用系统提供的API函数即可进行串口数据的发送和读取。三、使用串口类进行串口操作。在此只介绍windows环境下利用串口类编程的方式。

CSerialPort是比较好用的串口类。它提供如下的串口操作方法:

void WriteToPort(char* string, int len);

串口初始化成功后,调用此函数即可向串口发送数据。为了避免串口缓冲所带来的延时,可以开启串口的冲刷机制。

3.下位机中的数据接收和协议解析

下位机接收数据也有两种方式,一、等待接收,处理器一直查询串口状态,来判断是否接收到数据。二、中断接收。两种方法的优缺点在此前的一篇关于串口通信的文章中详细讨论过。得出的结论是采用中断接收的方法比较好。

数据包的解析过程可以设置到不同的位置。如果协议比较简单,整个系统只是处理一些简单的命令,那么可以直接把数据包的解析过程放入到中断处理函数中,当收到正确的数据包的时候,置位相应的标志,在主程序中再对命令进行处理。如果协议稍微复杂,比较好的方式是将接收的数据存放于缓冲区中,主程序读取数据后进行解析。也有两种方式交叉使用的,比如一对多的系统中,首先在接收中断中解析“连接”命令,连接命令接收到后主程序进入设置状态,采用查询的方式来解析其余的协议。

以下给出具体的实例。在这个系统中,串口的命令非常简单。所有的协议全部在串口中断中进行。数据包的格式如下:

0x55, 0xAA, 0x7E, 0x12, 0xF0, 0x02, 0x23, 0x45, SUM, XOR, 0x0D

其中0x55, 0xAA, 0x7E为数据帧的帧头,0x0D为帧尾,0x12为设备的目的地址,0xF0为源地址,0x02为数据长度,后面接着两个数据0x23, 0x45,从目的地址开始结算累加、异或校验和,到数据的最后一位结束。

协议解析的目的,首先判断数据包的完整性,正确性,然后提取数据类型,数据等数据,存放起来用于主程序处理。代码如下:

if(state_machine == 0) // 协议解析状态机
{
if(rcvdat == 0x55) // 接收到帧头第一个数据
state_machine = 1;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到帧头第二个数据
state_machine = 2;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 2)
{
if(rcvdat == 0x7E) // 接收到帧头第三个数据
state_machine = 3;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 3)
{
sumchkm = rcvdat; // 开始计算累加、异或校验和
xorchkm = rcvdat;
if(rcvdat == m_SrcAdr) // 判断目的地址是否正确
state_machine = 4;
else
state_machine = 0;
}
else if(state_machine == 4)
{
sumchkm += rcvdat;
xorchkm ^= rcvdat;
if(rcvdat == m_DstAdr) // 判断源地址是否正确
state_machine = 5;
else
state_machine = 0;
}
else if(state_machine == 5)
{
lencnt = 0; // 接收数据计数器
rcvcount = rcvdat; // 接收数据长度
sumchkm += rcvdat;
xorchkm ^= rcvdat;
state_machine = 6;
}
else if(state _machine == 6 || state _machine == 7)
{
m_ucData[lencnt++] = rcvdat; // 数据保存
sumchkm += rcvdat;
xorchkm ^= rcvdat;
if(lencnt == rcvcount) // 判断数据是否接收完毕
state_machine = 8;
else
state_machine = 7;
}
else if(state_machine == 8)
{
if(sumchkm == rcvdat) // 判断累加和是否相等
state_machine = 9;
else
state_machine = 0;
}
else if(state_machine == 9)
{
if(xorchkm == rcvdat) // 判断异或校验和是否相等
state_machine = 10;
else
state_machine = 0;
}
else if(state_machine == 10)
{
if(0x0D == rcvdat) // 判断是否接收到帧尾结束符
{
retval = 0xaa; // 置标志,表示一个数据包接收到
}
state_machine = 0; // 复位状态机
}

此过程中,使用了一个变量state_machine作为协议状态机的转换状态,用于确定当前字节处于一帧数据中的那个部位,同时在接收过程中自动对接收数据进行校验和处理,在数据包接收完的同时也进行了校验的比较。因此当帧尾结束符接收到的时候,则表示一帧数据已经接收完毕,并且通过了校验,关键数据也保存到了缓冲去中。主程序即可通过retval的标志位来进行协议的解析处理。

接收过程中,只要哪一步收到的数据不是预期值,则直接将状态机复位,用于下一帧数据的判断,因此系统出现状态死锁的情况非常少,系统比较稳定,如果出现丢失数据包的情况也可由上位机进行命令的补发,不过这种情况笔者还没有碰到。

对于主程序中进行协议处理的过程与此类似,主程序循环中不断的读取串口缓冲区的数据,此数据即参与到主循环中的协议处理过程中,代码与上面所述完全一样。

4.上位机中的数据接收和命令处理

上位机中数据接收的过程与下位机可以做到完全一致,不过针对不同的串口操作方法有所不同。对于阻赛式的串口读函数,例如直接进行API操作或者调用windows的串口通信控件,最好能够开启一个线程专门用于监视串口的数据接收,每接收到一个数据可以向系统发送一个消息。笔者常用的CSerialPort类中就是这样的处理过程。CSerialPort打开串口后开启线程监视串口的数据接收,将接收的数据保存到缓冲区,并向父进程发送接收数据的消息,数据将随消息一起发送到父进程。父进程中开启此消息的处理函数,从中获取串口数据后就可以把以上的代码拷贝过来使用。

CSerialPort向父类发送的消息号如下:

#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.
因此需要手动添加此消息的响应函数:

afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);
ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)

响应函数的具体代码如下:

LONG CWellInfoView::OnCommunication(WPARAM ch, LPARAM port)
{
int retval = 0;
rcvdat = (BYTE)ch;
if(state_machine == 0) // 协议解析状态机
{
if(rcvdat == 0x55) // 接收到帧头第一个数据
state_machine = 1;
else
state_machine = 0; // 状态机复位
}
else if(state_machine == 1)
{
if(rcvdat == 0xAA) // 接收到帧头第二个数据
state_machine = 2;
else
state_machine = 0; // 状态机复位
......

5.总结

以上给出的是通信系统运作的基本雏形,虽然简单,但是可行。实际的通信系统中协议比这个要复杂,而且涉及到数据包响应、命令错误、延时等等一系列的问题,在这样的一个基础上可以克服这些困难并且实现出较为稳定可靠的系统

⑹ 数据链路层的协议都有什么

数据链路层的主要协议有:

1、Point-to-Point Protocal——PPP点到点。

2、Ethernet——以太网。

3、High-Level Data Link Control Protocal——高级链路控制协议。

4、Frame Relay——帧中继。

5、Asynchronous Transfer Mode——异步传输模式。

随机访问协议:

在随机访问协议中,不采用集中控制方式解决信息发送的次序问题。所有用户都可以根据自己的意愿随机发送信息,占用信道全部速率。在总线网中,当有两个或者多个用户同时发送信息的时候,就会产生帧的冲突。这导致所有冲突用户的发送均失败。

为了解决随机接入发生的碰撞,每个用户需要按照一定的规则反复的重传他的帧。知道帧没有碰撞到通过。

这些规则就是随机访问MAC协议。

重用的协议:ALOHA协议,CSMA协议,CSMA/CD协议,CSMA/CA协议

这些协议的核心思想都是:胜利者通过争用获得信道,进而获得信息的发送权,所以说随机访问MAC协议,也叫争用型协议。

MAC采用信道划分机制,那么节点之间的通信,要不就是共享空间,要不就共享时间,要不就两个都共享。

随机MAC:实质上是一种广播信道转化为点到点信道的行为。

因为交换机可以转发广播,随机访问MAC,可以将广播转化为point to point

1.1、ALOHA协议:随机接入系统协议

1.2、CSMA协议:

如果每个站点在发送前都先侦听一下公用的信道,那么发送信道空闲后再发送,那么将会大大减小冲突的可能。从而提高信道的利用率。

载波侦听多路访问(Carrier Sense Multiple Access,CSMA)

CSMA协议对ALOHA协议的一种改进,也就是多了一个载波侦听装置。

1.3、CSMA/CD协议:载波侦听多路访问/碰撞检测

是对CSMA协议的改进方案,适用于总线型网络或者半双工网络环境

载波侦听:也就是发送前先侦听,每次发送数据之前都要先检查一下总线上是否有其他站点在发送数据,如果有则暂时不要发送数据,等待信道变为空闲的时候再发送。

碰撞检测:就是一边发送一边侦听,适配器在发送数据的时候变检测信道上的信号电压的变化情况,用来判断自己在发送数据的时候其他站点是否也在发送数据。

CSMA/CD工作流程:先听后发,边听边发,冲突停发,随机重发总线的传播时延对CSMA/CD的影响很大,CSMA/CD中的站不能同时发送和接收所以CSMA/CD的以太网是不进行全双工通信,只能进行半双工通信。

1.4、CSMA/CA协议

CSMA/CD协议已经应用在使用有线连接的局域网中,但是要在无线局域网的环境下,却不能用。

CSMA/CD协议,尤其是碰撞部分,因为无线局域网中,接受信号的强度远远小于发送信号的强度。而且在无线介质上信号强度变化范围很广,要实现碰撞检测,那么在硬件上要花费很大。

在无线通信中,并非所有的站点都可以侦听到对方,也就是隐蔽站的问题。

CSMA/CA协议,广泛用于无线局域网。

把碰撞检测改成了碰撞避免(Collision Avoidance,CA)。

碰撞避免:不是指协议可以完全避免碰撞,而是指协议的设计要尽量减少碰撞的发生概率。

CSMA/CA采用二进制指数退避算法。通过预约信道,ACK帧,RTS/CTS帧,三种机制来实现碰撞避免

RTS/CTS帧,主要用来解决无线网的隐蔽站问题。

预约信道,ACK帧,都是必须要实现的。

预约信道:发送方在发送数据的同时想起他站点通过告知自己传输数据需要的时间长度,方便让其他站点在这段时间内部发送数据,避免碰撞。

ACK帧:所有站点在正确接收到发送给自己的数据帧后,都需要向发送方应答一个ACK帧。

总结:

CSMA/CA协议的基本思想:发送数据的时候先广播告知其他节点,让其他节点在某个时间段内不要发送数据,避免碰撞。

CSMA/CD协议的基本思想:发送前先侦听,边发送边侦听,一旦出现碰撞马上停止发送。

轮询访问MAC:令牌传递协议:

在轮询访问中,用户不能随机的发送信息,是通过集中控制的监控站,以循环的方式轮询每个节点。然后决定信道的分配。

当某个节点使用信道的时候,其他节点都不能使用信道。典型的轮询MAC协议是令牌传递协议,令牌环局域网。

令牌传递协议:一个令牌在各个节点以一个固定的次序交换。令牌是个特殊的比特组成的帧,当换上的站希望传递帧的时候,就必须等待令牌,一旦收到令牌,站点就可以启动发送帧。

轮询MAC适合复杂很高的广播信道,负载很高的信道就是多个节点在同一时刻发送数据概率很大的信道。

如果广播信道采用随机MAC,发生冲突的概率很大,而采用轮询MAC则可以更好满足各个节点的要求。

轮序的实质:不共享时间,空间。实质上就是在随机MAC的基础上,限定了有权利发送数据的节点只能有一个。

即使是广播信道,都可以通过MAC使得广播信道逻辑上变成点对点的信道。所以说数据链路层研究的是点对点之间的通信。

局域网使用的协议主要在数据链路层。

广域网使用的协议主要在网络层。

也就是说网络中的两个节点要进行数据交换,节点除了要给出数据外,还要给数据包装上一层控制信息,用来实现检错纠错的功能。如果这层信息是数据链路层的协议控制信息,就叫做使用了数据链路的协议,如果这层控制信息是在网络层,就是使用了网络层的协议。

广域网强调:资源共享。

局域网强调:数据传输。

广域网中一个重要问题:路由选择和分组转发。

路由选择协议:负责搜索分组从某个节点到目的节点的最佳路由,以便构成路由表。

分组转发:从路由表构造出转发分组的转发表。

PPP协议和HDLC协议是目前最常用的两种广域网数据链路层的面向字节的协议

PPP协议(Point to Point Protocol):

使用串行线路通信的面向字节的协议,PPP协议应用在直接连接的两个节点的连路上。

目的:通过拨号或者专线方式建立点对点的连接放松数据,让它成为各种主机,网桥,路由器之间简单连接的解决方法。

PPP协议:在SLIP的基础上发展而来,可以在异步线路上传输,也可以在同步线路上用。

不仅用于Modem链路,还可以用于路由器和路由器之间的链路。

PPP组成:

链路控制协议LCP:用来建立,配置,测试,管理数据链路。

网络控制协议NCP:由于PPP可以同时用多种网络层协议,每个不同的网络层协议要用一个相应的NCP来配置。一个将IP数据报封装到串行链路的方法。

PPP帧和HDLC帧的格式一样,收尾都是相同的标志字段为7E。

PPP协议是点对点的,不是总线型,不用CSMA/CD协议。

HDLC协议:

高级数据链路控制(High-level Data Link Control):面向比特的数据链路层协议。

HDLC协议不依赖任何一种字符集编码,数据报文可以透明传输。

PPP是面向字节的,HDLC协议是面向比特的。

TCP/IP协议簇:TCP,IP,ICMP,ARP,RARP,UDP,DNS,FTP,HTTP。

HDLC,PPP是ISO提出的数据链路层协议,不属于TCP/IP协议簇。

(6)数据协议扩展阅读:

数据链路层比较:

适用场合:

就系统结构而言,HDLC适用于点到点或点到多点式的结构,BSC同样也能适用于这些结构;就工作方式而方,HDLC适用于半双工或全双工,而BSC则更适用于半双工方式(也可扩充为全双工);就传输方式而言,BSC和HDLC两者都只用于同步传输。

在传输速率方面,BSC和HDLC虽然都没有限制,但由于它们各自的特点所定,通常BSC用于低、中速传输,而HDLC则常用于中、高速传输。

传输效率:

HDLC开始发送一帧后,就要连续不断地发完该帧,而BSC的同一数据块中的不同字符之间可能有时间间隔,这些间隔用SYN字符填充。HDLC可以同时确认几个帧,而BSC则在发完一数据块后必须要等待确认(即“停一等”方式)。

HDLC中的每个帧都含有地址字段A,在多点结构中,每个从站只接收含有本站地址的帧,因此,主站在选中一个从站并与之通信的同时,不用拆链,便可选择其它的站通信,即同时与多个站建立链路。

而在BSC中,从建链开始,两站之间的链路通道就一直保持到传输结束为止。由于以上特点,HDLC的传输效率高于BSC的传输效率。

传输可靠性:

HDLC中所有的帧(包括响应帧)都有FCS,在BSC的监控报文中只有字符校验能力而无块校验能力。HDLC中的I帧按窗口序号顺序编号,BSC的数据块不编号。由于以上特点,HDLD的传输可靠性比BSC高。

数据透明性:

HDLC采用“0比特插入法”对数据实现透明传输,传输信息的比特组合模式无任何限制。BSC用DLE字符填充法来实现透明传输,依赖于采用的字符编码集,且处理复杂。

信息传输格式:

HDLC采用统一的帧格式来实现数据、命令、响应的传输,实施起来方便。而BSC的格式不统一,数据传送、正反向监控各规定了一套格式,给实施带来了不便

链路控制:

HDLC利用改变一帧中的控制字段的编码模式来完成各种规定的链路操作功能,提供的是面向比特的传输功能。BSC则是通过改变控制字符来完成链路操作功能,提供的是面向字符的传输功能。

参考资料来源:网络-数据链路层



⑺ 如何实现一个最简单的通信协议

协议一般要包含:起始符、、数据、校验码、结束符,5个部分的定义。其中 起始符、结束符,不能与其他数据重码。如只要传输字母与数字,可以看下ASCII码表,使用非数字和字母的符号做起始结束符即可,如{};数据长度码即表示此串数据包的数据长度,如果传输的数据串长度固定可省去;校验码相当于对此串数据正确性的校验,和奇偶校验效果类似,一般是和校验,即将数据全部累加得到一个和值当校验码,接收方收到数据也做一样的运算与收到的检验码比较,相等就说明正确接收。如要发{1234567890 }换成16进制即:7B 10 31 32 33 34 35 36 37 38 39 30 25 7D;31~30是数据,7B,7D分别为起始和结束符,10为数据长度的BCD码,25是校验码,是31~30的和模100后的BCD码,转成BCD码是为了避免与 起始和结束符重码。

⑻ 用户数据报文协议udp属于什么协议

传输层无连接协议
速度快,但不能保证不丢包和按顺序到达,不可靠协议
需要程序员在上层协议中实现可靠性

⑼ 网络协议中那些属于数据链路层协议

很多教科书和培训教材上,都把arp协议划分到网络层。我想主要的原因在内于arp协议容属于tcp/ip协议簇,而在tcp/ip模型中,所有定义的协议至少是在网际层(或称网络层,ip层)。
但是,按照osi的标准,当数据向下传递时,每层会加上自己的信息,各层互不干扰.这样当网络层的ip包进入链路层时,链路层该如何加这个头部的目标信息呢?它要依靠arp协议来完成.显然如何加链路头并不是网络层的功能.而且,arp协议工作时,并不使用ip的包头。所以也有很多人说,arp是链路层的。
可以说,在tcp/ip模型中,arp协议属于ip层;在osi模型中,arp协议属于链路层。
在sniffer软件中,捕获协议数据时,如果使用ip地址是无法捕获到arp包的,因为ip地址是arp协议的载荷,不在包头中。但arp协议的载荷中,也并不包含任何上层的ip数据包。所以,构造和使用arp协议的主体理解ip地址。从这个角度考虑,将arp协议划分到ip层也有一定道理。
我觉得逻辑上应该处于链路层,但是在抓包的时候,arp和rarp的数据包是封装在链路层的数据包里

热点内容
美发店认证 发布:2021-03-16 21:43:38 浏览:443
物业纠纷原因 发布:2021-03-16 21:42:46 浏览:474
全国著名不孕不育医院 发布:2021-03-16 21:42:24 浏览:679
知名明星确诊 发布:2021-03-16 21:42:04 浏览:14
ipad大专有用吗 发布:2021-03-16 21:40:58 浏览:670
公务员协议班值得吗 发布:2021-03-16 21:40:00 浏览:21
知名书店品牌 发布:2021-03-16 21:39:09 浏览:949
q雷授权码在哪里买 发布:2021-03-16 21:38:44 浏览:852
图书天猫转让 发布:2021-03-16 21:38:26 浏览:707
宝宝水杯品牌 发布:2021-03-16 21:35:56 浏览:837