
、楼主,您好,很高兴为您解答: 当前常用的电子邮件协议有SMTP、POP3、IMAP4,它们都隶属于TCP/IP协议簇,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍: SMTP协议 SMTP的全称是“Simple Mail Transfer Protocol”
驱动程序,是指硬件转化成能计算机识别的程序
接口程序,是指与其他硬件连接时通信的程序
通讯协议,接口程序已经应用,相当于规则,比如我们人与人通讯是用的语言,你可以把语言看成通讯协议
Serial是串口通信协议,规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。
SSH是较可靠,专为远程登录会话和其他网络服务提供安全性的文件传输协议。建立在应用层和传输层基础上。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
Rlogin是unix系统中的远程登录协议。由于客户端进程和服务器进程已经事先知道了对方的 *** 作系统类型,因此也就省去了选项协商机制。
Telnet是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
Raw是打印设备的默认打印协议。为了发送 RAW 格式的作业,打印server将打开一个针对打印机网络接口的 TCP 流。
扩展资料:
Telnet与Rlogin协议在传输机制上是有安全漏洞的,因为它们在传输数据时使用明文机制;如果有人在网络上进行截获这样的数据,那么一些重要的数据将会不可避免的泄露。
而SSH协议可以替代以Telnet,Rlogin等传统网络程序协议,在不安全的通信环境中提供了比较可靠的数据保护机制。SSH协议采用了数据加密机制,能够防止DNS欺骗和IP欺骗。通过SSH协议所传输的数据是经过压缩的,因此相对来说加快了传输速度。
网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
例如,网络中一个微机用户和一个大型主机的 *** 作员进行通信,由于这两个数据终端所用字符集不同,因此 *** 作员所输入的命令彼此不认识。
为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,才进入网络传送,到达目的终端之后,再变换为该终端字符集的字符。
当然,对于不相容终端,除了需变换字符集字符外还需转换其他特性,如显示格式、行长、行数、屏幕滚动方式等也需作相应的变换。
常用端口对应的协议程序是:
21:文件传输服务器(控制连接)(FTP)。
23:运程终端服务器(TELNET)。
25:简单邮件传输服务器(SMTP)。
80:万维网服务器(>
扩展资料:
注意事项:
根据端口号,可以分为三类:
1.众所周知的端口:从0到1023,它们与某些服务绑定紧密。通常,这些端口的通信清楚地表明了某个服务的协议。例如:端口80实际上总是>
2.注册港口:从1024到49151。它们松散地绑定到一些服务。也就是说,有许多服务绑定到这些端口,这些端口也用于许多其他目的。例如,许多系统从1024左右开始处理动态端口。
3.动态和/或私有端口:从49152到65535。理论上,这些端口不应该分配给服务。实际上,机器通常从1024开始分配动态端口。也有例外:SUN的RPC端口从32768开始。
单片机通信协议
现在大部分的仪器设备都要求能过通过上位机软件来 *** 作,这样方便调试,利于 *** 作。其中就涉及到通信的过程。在实际制作的几个设备中,笔者总结出了通信程序的通用写法,包括上位机端和下位机端等。
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.总结
以上给出的是通信系统运作的基本雏形,虽然简单,但是可行。实际的通信系统中协议比这个要复杂,而且涉及到数据包响应、命令错误、延时等等一系列的问题,在这样的一个基础上可以克服这些困难并且实现出较为稳定可靠的系统
互联网上使用的基本通信协议是“TCP/IP”。
Tcp/IP(传输控制协议/互联网协议)是指能够实现不同网络间信息传输的协议簇。TCP/IP协议不仅仅指TCP和IP两种协议,而是指由FTP、SMTP、TCP、UDP、IP等组成的一个协议簇。它之所以被称为TCP/IP协议,是因为TCP和IP是TCP/IP协议中最具代表性的协议。
TCP/IP传输协议,即传输控制/网络协议,也称为网络通信协议。它是网络使用中最基本的通信协议。TCP/IP传输协议规定了互联网所有部分之间的通信标准和方法。而且,TCP/IP传输协议是保证网络数据信息及时完整传输的两个重要协议。TCP/IP传输协议严格来说是四层架构,包括应用层、传输层、网络层和数据链路层。
TCP/IP协议是互联网最基本的协议,其中应用层的主要协议有Telnet、FTP、SMTP等。,用于根据不同的应用需求和方式,从传输层接收数据或向传输层发送数据;传输层的主要协议是UDP和TCP,是用户使用平台和计算机信息网络内部数据的通道,可以实现数据传输和数据共享。网络层的主要协议有ICMP、IP和IGMP,主要负责数据包在网络中的传输。网络接入层,也称为网络接口层或数据链路层,以ARP和RARP为主要协议,主要功能是提供链路管理错误检测,有效处理不同通信介质的信息细节。
TCP/IP协议的组成:
TCP/IP协议在一定程度上参考了OSI的架构。OSI模型有七层,从下到上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。但这显然是复杂的,所以在TCP/IP协议中,它们被简化为四个层次。
应用层:应用层是TCP/IP协议的第一层,直接为应用进程提供服务。
(1)对于不同种类的应用,他们会根据自己的需求使用不同的应用层协议。SMTP协议用于邮件传输应用程序,>
(2)应用层还可以对数据进行加密、解密和格式化。
(3)应用层可以建立或取消与其他节点的联系,可以充分节省网络资源。
传输层:传输层作为TCP/IP协议的第二层,在整个TCP/IP协议中起着重要的作用。而在传输层,TCP和UDP也起着中流砥柱的作用。
网络层:网络层位于TCP/IP协议的第三层。在TCP/IP协议中,网络层可以建立和终止网络连接,查找IP地址等功能。
网络接口层:在TCP/IP协议中,网络接口层位于第四层。由于网络接口层融合了物理层和数据链路层,因此网络接口层不仅是数据传输的物理介质,也为网络层提供了精确的线路。
以上就是关于客户端专门程序通过什么传输协议全部的内容,包括:客户端专门程序通过什么传输协议、驱动程序 接口程序 通讯协议三者区别、Serial SSH Rlogin Telnet Raw分别是什么协议等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)