导航:首页 > IDC知识 > 服务器通讯协议

服务器通讯协议

发布时间:2020-11-18 02:48:34

1、WWW服务器和浏览器之间采取什么协议进行通信。

采用超文本文件传输协议(即http)进行通信

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。

2、HTTP是通信协议吗

HTTP/1.0和HTTP/1.1都把TCP作为底层的传输协议。HTTP客户首先发起建立与服务器TCP连接。一旦建立连接,浏览器进程和服务器进程就可以通过各自的套接字来访问TCP。如前所述,客户端套接字是客户进程和TCP连接之间的“门”,服务器端套接字是服务器进程和同一TCP连接之间的“门”。客户往自己的套接字发送HTTP请求消息,也从自己的套接字接收HTTP响应消息。类似地,服务器从自己的套接字接收HTTP请求消息,也往自己的套接字发送HTTP响应消息。客户或服务器一旦把某个消息送入各自的套接字,这个消息就完全落入TCP的控制之中。TCP给HTTP提供一个可靠的数据传输服务;这意味着由客户发出的每个HTTP请求消息最终将无损地到达服务器,由服务器发出的每个HTTP响应消息最终也将无损地到达客户。
Http协议一定通过指定的端口,80,所以一般计算机上不会限制这个端口,所以Http协议能够顺利通过所有机器上的防火墙。而使用Socket编程的话,就需要自己指定特定的端口,那么很可能这个端口是在某个环境中禁用的,那么就无法穿透防火墙。IIS使用的是80端口,也就是这个程序一直在监听着这个端口。一旦发现有人要建立到这个端口的连接,他就会响应,然后建立连接。这里说的连接都是短连接。所以你对服务器上的网址的请求,都是通过80端口送到网站程序的。然后通过这个端口发送的客户端浏览器。

3、做linux系统上的数据通讯服务器一般采用什么协议,协议的具体内容是什么

SNMP简单网络管理协议。一般服务器监控系统都采用这种协议通讯

4、如何设计客户端与服务器双向通信协议

1.
报文头:

l
版本号:

10个字符,以Ver开头,例如:Ver1.0.0.0=Ver1000。

l
报文类型(命令字):

最长不超过20个字符。

l
报文驱动者:

客户端(当前登录的帐号),服务端(当前服务器名)(最长不超过20个字符)。

l
有无参数指示器:

当有参数时,指示器为1,当无参数时,指示器为0。目的是加快解析速度。

l
报文长度:

最长不超过10个字符

l
参数体:

长度可变,但是报文头+参数体不超过2K字节,(相当于2048个char型数据,其中连命令字之间的“,“也包括在里面。)参数与参数之间应用“,”隔开,参数体最大长度为1024个字节,相当于1K

l
整体报文格式:

版本号,报文类型,报文驱动者,参数指示器,报文长度,Value(参数1,参数2,。。。。。。。)

例如:

ABC服务器认证请求的报文:

Ver1000,Login,ABC,0,报文长度,Value()

ABC客户端登录的报文:

Ver1000,Login,ABC,1,报文长度,Value(账号,密码,IP地址)

l
报文结构体:

Struct
Server/CustomMessage

{

char
m_cVersion[10]; //版本号

char m_cCommandType[20]; //报文类型

char m_cDriver[20]; //报文驱动者

char m_cValueSwitch; //参数指示器

char m_cMessageLen[10]; //报文长度

char m_cInputValue[1024]; //参数体

}

2.
具体的报文

定义:->:表示发向那里。

为了明了,以及方便,直接将参数填入结构体内。

设定服务器为ABC,客户端为CDE,Sizeof返回值为字符串。

在“”内表示值为字符串

参数体以Value开头的字符串。

客户端的登录与认证
(命令字与参数)

1、 服务器->客户端:要求客户端把账号、密码等信息传过来。

GetLogin()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“GetLogin”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=NULL;

}

2、 服务器<-客户端:客户端上传账号、密码等信息。

Login(账号,密码,IP地址)

struct CustomMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“Login”;

m_cDriver=“CDE”;

m_cValueSwitch=1;

m_cMessageLen=sizeof(CustomMessage);

m_cInputValue=“Value(账号,密码,IP地址)”;

}

3、 服务器->客户端:错误提示,表示账号错误,一般为无此账号。

AccountError()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“AccountError”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=NULL;

}

4、 服务器->客户端:错误提示,表示账号对,但密码不对。

PasswordError()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“PasswordError”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=NULL;

}

5、 服务器->客户端:错误提示,表示帐号被封,请和管理人员联系。

BlockAccount()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“BlockAccount”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=NULL;

}

6、 服务器->客户端:错误提示,表示已有相同的帐号登陆。

HaveSameAccount()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“HaveSameAccount”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=NULL;

}

7、 服务器<-客户端:客户端已显示错误提示,并将自己与服务器断开

ErrorMsgReceive()

struct CustomMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“ErrorMsgReceive”;

m_cDriver=“CDE”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(CustomMessage);

m_cInputValue=NULL;

}

8、 服务器->客户端:客户端已通过服务器的认证,服务器向客户端发送帐号,一次最多40个,估计1K左右。

SendCustomList(客户端的账号1,客户端账号2,。。。。。。。)

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“SendCustomList”;

m_cDriver=“ABC”;

m_cValueSwitch=1;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=“Value(客户端的账号1,客户端账号2,。。。。。。。)”;

}

9、 服务器<-客户端:表示40个账号已收到

SendCustomOk()

struct CustomMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“SendCustomOk”;

m_cDriver=“CDE”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(CustomMessage);

m_cInputValue=NULL;

}

10、
服务器->客户端:表示服务器把当前已接入进的所有客户账号发送完毕

SendCustomEnd()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“SendCustomEnd”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=NULL;

}

11、
服务器->客户端:向当前已连接上的所有的客户端发送刷新消息,客户端和服务器会重复9、10、11的动作。

FlashCustomList()

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“FlashCustomList”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=“Value(客户端的账号1,客户端账号2,。。。。。。。)”;

}

12、
服务器<-客户端:表示向某个客户发送消息。

Message(对方客户端帐号,自己客户端帐号,客户信息)

struct CustomMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“Message”;

m_cDriver=“CDE”;

m_cValueSwitch=1;

m_cMessageLen=sizeof(CustomMessage);

m_cInputValue=“Value(对方客户端帐号,自己客户端帐号,客户信息)”;

}

13、
服务器->客户端:转发某个客户端的消息给另一个客户端。

Message(对方客户端帐号,客户信息)

struct ServerMessage

{

m_cVersion=“Ver1000”;

m_cCommandType=“Message”;

m_cDriver=“ABC”;

m_cValueSwitch=0;

m_cMessageLen=sizeof(ServerMessage);

m_cInputValue=“Value(对方客户端帐号,客户信息)”;

}

5、网络服务器通信协议用用什么来识别高层服务

1.检查网络是否稳定
2.查看服务器是否正在维护
3.使用杀毒工具清理缓存
4.更新软件版本

6、从服务器端向客户端推送信息采用什么协议实现(基于HTTP方式)?

但是这种情况的确存在,例如Comet架构。
Dojo Foundation定义了一套Bayeux协议专门从事这种场景下的使用。
通常,要实现浏览器和服务器之间的双工通讯,需要建立长连接,并通过异步调用来实现。
Bayeux也被称作分路复用协议,
Bayeux的主要目的是支持使用ajax的客户端与服务器端之间灵敏,快速的信息交互。
Bayeux 是一种用来在客户端和服务器端传输低延迟的异步消息(主要通过http)的一种协议。它定义的消息通过命名通道进行路由并且能够进行交互传 送:server - client, client - server 甚至 client - client (当然还是需要通过server中转)。默认的,此通道已经引用了发布的路由语义,但同时也支持其它路由模块。
从服务器端向客户端异步发送的数据通常被叫做 “服务器推”(server-push)。这种使用ajax的web应用和服务器推技术的结合称作“Comet”。 Cometd是一个提供多种开发语言的Bayeux项目,由Dojo基金会提供支持。

7、我一多个地面设备通过4G网络向远程服务器发送数据采用什么通信协议

4G网络只是平台,对于你的这个需求来说是透明的,你采用你的协议向远程服务器发数据这个操作是在这个4G平台上完成,所以使用什么协议取决于你的应用。4G网络是承载,不用你考虑的。

8、Android服务器通信的几种方式详解

大 学学习网络基础的时候老师讲过,网络由下往上分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。通过初步的了解,我知道IP协议对应于网 络层,TCP协议对应于传输层,而HTTP协议对应于应用层,三者从本质上来说没有可比性,socket则是对TCP/IP协议的封装和应用(程序员层面 上)。也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和 HTTP协议的关系,网络有一段比较容易理解的介绍: “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使 用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装 HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API), 通过Socket,我们才能使用TCP/IP协议。实际上,Socket跟TCP/IP协议没有必然的联系。Socket编程接口在设计的时候,就希望也 能适应其他的网络协议。所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道 的一些最基本的函数接口,比如create、listen、connect、accept、send、read和write等等。网络有一段关于 socket和TCP/IP协议关系的说法比较容易理解:“TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外 的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是 Socket编程接口。”
关于TCP/IP协议的相关只是,用博大精深来讲我想也不为过,单单查一下网上关于此类只是的资料和书籍文献的数量就知道,这个我打算会买一些经典的书籍 (比如《TCP/IP详解:卷一、卷二、卷三》)进行学习,今天就先总结一些基于基于TCP/IP协议的应用和编程接口的知识,也就是刚才说了很多的 HTTP和Socket。
CSDN上有个比较形象的描述:HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。
下面是一些经常在笔试或者面试中碰到的重要的概念,特在此做摘抄和总结。
一。什么是TCP连接的三次握手
第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭 连接之前,TCP 连接都将被一直保持下去。断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(过程就不细写了,就是服务器和客 户端交互,最终确定断开)
二。利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1。服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2。客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3。 连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户 端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
三。HTTP链接的特点
HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。
HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
四。TCP和UDP的区别(考得最多。。快被考烂了我觉得- -\\)
1。 TCP是面向链接的,虽然说网络的不安全不稳定特性决定了多少次握手都不能保证连接的可靠性,但TCP的三次握手在最低限度上(实际上也很大程度上保证 了)保证了连接的可靠性;而UDP不是面向连接的,UDP传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数据是否会正确接 收,当然也不用重发,所以说UDP是无连接的、不可靠的一种数据传输协议。
2。也正由于1所说的特点,使得UDP的开销更小数据传输速率更高,因为不必进行收发数据的确认,所以UDP的实时性更好。
知 道了TCP和UDP的区别,就不难理解为何采用TCP传输协议的MSN比采用UDP的QQ传输文件慢了,但并不能说QQ的通信是不安全的,因为程序员可以 手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号然后由接收方进行验证啊什么的,即使是这样,UDP因为在底层协议的封装上没有采用类似 TCP的“三次握手”而实现了TCP所无法达到的传输效率。

9、TCP和UDP网络通讯的区别及实现方式

TCP:Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,在 OSI模型中,它完成第四层传输层所指定的功能。
UDP:是User Datagram Protocol的简称,用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
TCP和UDP传输就类似于我们的手机通电话和手机发短信,一种必需连通了,才能够通话,相对来说比较可靠,传输速度比较快,另一种可以在关机状态(无连接)发送信息,相对来说,可靠性比较差,传输速度较慢。具体的差别如下:
TCP协议面向连接,UDP协议面向非连接
TCP协议传输速度慢,UDP协议传输速度快
TCP协议保证数据顺序,UDP协议不保证
TCP协议保证数据正确性,UDP协议可能丢包
TCP协议对系统资源要求多,UDP协议要求少
不管是基于TCP还是基于UDP的网络通讯编程,都要区分服务器端和客户端,下面以TCP为例,实现客户端和服务器端通讯的实现步骤:
TCP服务器端的编写步骤:
1. 首先,你需要创建一个用于通讯的套接口,一般使用socket调用来实现。这等于你有了一个用于通讯的电话:)
2. 然后,你需要给你的套接口设定端口,相当于,你有了电话号码。这一步 一般通过设置网络套接口地址和调用bind函数来实现。
3. 调用listen函数使你的套接口成为一个监听套接字。 以上三个步骤是TCP服务器的常用步骤。
4. 调用accept函数来启动你的套接字,这时你的程序就可以等待客户端的连接了。
5. 处理客户端的连接请求。
6. 终止连接。
TCP编程的客户端一般步骤是:
1、创建一个socket,用函数socket();
2、设置socket属性,用函数setsockopt();* 可选
3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选
4、设置要连接的对方的IP地址和端口等属性;
5、连接服务器,用函数connect()(相当于拨号);
6、收发数据,用函数send()和recv(),或者read()和write()(相当于通话);

10、路由器与服务器之间互相通信的协议

1.“ping”命令所产生的数据包,我们归类为ICMP协议。说白了就是向目的地发送一个数据包,然后等待回应,如果回应正常则目的地的网络就是通的。当我们输入了“ping”命令之后,我们的机器(电脑A)就生成了一个包含ICMP协议域的数据包,姑且称之为“小德”吧~~~~
2.“小德”已经将ICMP协议打包到数据段里了,可是还不能发送,因为一个数据要想向外面传送,还得经过“有关部门”的批准------IP协议。IP要将你的“写信人地址”和“收信人地址”写到数据段上面,即:将数据的源IP地址和目的IP地址分别打包在“小德”的头部和尾部,这样一来,大家才知道你的数据是要送到哪里。
3.准备工作还没有完。接下来还有部门要审核------ARP。ARP属于数据链路层协议,主要负责把IP地址对应到硬件地址。直接说吧,都怪交换机太“傻”,不能根据IP地址直接找到相应的计算机,只能根据硬件地址来找。于是,交换机就经常保留一张IP地址与硬件地址的对应表以便其查找目的地。而ARP就是用来生成这张表的。比如:当“小德”被送到ARP手里之后,ARP就要在表里面查找,看看“小德”的IP地址与交换机的哪个端口对应,然后转发过去。如果没找到,则发一个广播给所有其他的交换机端口,问这是谁的IP地址,如果有人回答,就转发给它。
4.经过一番折腾,“小德”终于要走出这个倒霉的局域网了。可在此之前,它们还没忘给“小德”屁股后面盖个“戳”,说是什么CRC校验值,怕“小德”在旅行途中缺胳膊少腿,还得麻烦它们重新发送。。。。。我靠~~~~注:很多人弄不清FCS和CRC。所谓的CRC是一种校验方法,用来确保数据在传输过程中不会丢包,损坏等等,FCS是数据包(准确的说是frame)里的一个区域,用来存放CRC的计算结果的。到了目的地之后,目的计算机要检查FCS里的CRC值,如果与原来的相同,则说明数据在途中没有损坏。
5.在走出去之前,那些家伙最后折磨了一次“小德”------把小德身上众多的0和1,弄成了什么“高电压”“低电压”,在双绞线上传送了出去。晕~~出趟门就这么麻烦吗?
6.坐着双绞线旅游,爽!可当看到很多人坐着同轴电缆,还有坐光纤的时候,小德又感觉不是那么爽了。就在这时,来到了旅途的中转站------路由器。这地方可是高级场所,人家直接查看IP地址!剩下的一概不管,交给下面的人去做。够牛吧?路由器的内部也有一张表,叫做路由表,里面标识着哪一个网络的IP对应着路由器的哪一个端口。这个表也不是天生就有的,而是靠路由器之间互相“学习”之后生成的,当然也可以由管理员手工设定。这个“学习”的过程是依靠路由协议来完成的,比如RIP,EIGRP,OSPF等等。
7.当路由器查看了“小德”的IP地址以后,根据路由表知道了小德要去的网络,接着就把小德转到了相应的端口了。至此,路由器的主要工作完成,下面又是打包,封装成frame,转换成电压信号等一系列“折腾”的活,就由数据链路层和物理层的模块去干吧。
8.小德从路由器的出口出来,便来到了目的地----电脑B----所属的网络的默认网关。默认网关可以是路由器的一个端口,也可以是局域网里的各种服务器。不管怎样,下面的过程还是一样的:到交换机里的ARP表查询“小德”的IP地址,看看属于哪个局域网段或端口,然后就转发到B了。
9.进了B的网卡之后,还要层层“剥皮”,基本上和从A出来的程序是一样的------电脑B先校验一下CRC值,看看数据是否完整;然后检查一下frame的封装,看到是IP协议之后,就把“小德”交给IP“部门”了;IP协议一看目的地址,正确,再看看应用协议,是ICMP。于是知道了该怎么做了------产生一个回应数据包,(可以命名为“回应小德”),并准备以同样的顺序向远端的A发送。。至于刚刚收到的那个数据包就丢弃了。
10.“回应小德”这个数据包又开始了上述同样的循环,只不过这次发送者是B而接收者是A了。 以上是一个最简单的路由过程,任何复杂的网络都是在次基础之上实现的。

与服务器通讯协议相关的知识