socket编程中应用层的协议用的是什么啊?socket和severSocket通信时应该用到了某一种应用层协议吧?我只知道传输层可以指定使用TCP协议。
tcp协议用于传输控制协议,具体通信层面需要根据自己的业务来解析字节流,比如tomcat就是实现了HTTP协议,根据hTTP规矩来解析数据
socket编程就是用的tcp和udp协议呀,应用层协议常见的http,ftp这些是基于tcp或者udp的
用什么协议要看client和server之间的约定,没有约定就是透传。
常见的情况,http、websocket、mqtt等使用的较多。
如果没太大需求,透传也没啥问题。
android中,socket封装了Tcp/Ip与Udp通信协议,.Net的话Udp通信有UdpClient类,Socket用与Tcp协议
最简单的网络模型如下:
//四层协议是TCP,三层协议是IP
int fd = socket(AF_INET, SOCK_STREAM, 0)
//四层协议是UDP,三层协议是IP
int fd = socket(AF_INET, SOCK_DGRAM, 0)
//四层协议是TCP,三层协议是IPV6
int fd = socket(AF_INET6, SOCK_STREAM, 0)
通过不同的打开方式能够得到按不同协议传输的套接字,那么到应用层,如下是一个HTTP协议的例子:
//应用层协议http, 4层tcp, 3层ip
char *http_content = "GET / HTTP 1.1\r\nHOST: www.csdn.com\r\n\r\n";
int fd = socket(AF_INET, SOCK_STREAM, 0);
send(fd, http_content, strlen(http_content));
那么换成FTP协议怎么样?
//应用层协议ftp, 4层tcp, 3层ip
char *ftp_content = “LIST /\r\n”
int fd = socket(AF_INET, SOCK_STREAM, 0);
send(fd, http_content, strlen(ftp_content));
如果你这样写:
//应用层协议不知道, 4层tcp, 3层ip
char *unkonwn_content = “1234567”
int fd = socket(AF_INET, SOCK_STREAM, 0);
send(fd, http_content, strlen(unkonwn_content));
因此单从内容的角度的话我们层符合相应协议规范的内容我们将其数据称为相应的协议,而在应用中,应用层协议到底应该是什么样的则由服务器说了算,如果你向一个FTP服务器发送按HTTP协议封装的数据,那FTP服务器肯定不会认识,它会认为你发的是错误的消息,直接丢弃。而如果你只是简单的写了一个Socket通信的例子,应用层没有按任何协议定义进行封装,那你的消息就没有任何协议,如果你按特定的协议规范封装了,你也可以说你的应用层协议是相应协议。
假如我们要做一个C/S型的程序设计,服务端和客户端使用TCP通信,这时就需要在TCP协议之上,选择一个合适的应用层协议,如果不喜欢已有的协议,那就需要自己去实现一个协议规程,现在我们就要去完成一个图1所示的协议
1.定义传输的消息格式
2.实现服务器
3.实现通信协议
3.实现客户端
应用层协议基于TCP或者UDP
原则上,你的端口号对应的就是应用层协议,比如80就是http,21就是ftp,22就是ssh,23就是telnet等等。
但是由于端口号是可以随便修改的,所以上面的说法是错的,具体的协议要看你想用什么了,你就是自己定义一套都可以。
如果你自己定义一套,那你就得定义边界,你还得自己写解析,封装等等。所以一般的开发,为什么不用现成的协议呢?
一般的应用,其实都可以自己开发一套自己的应用协议的,不过你要清楚,自己定义一套协议,工作量是比较大的。就算用到目前市面上开源的
一些框架使用起来
也是比较麻烦的。如果你的系统是一个普通的应用,安全性要求不高,你就可以简单处理然后tcp/ip通讯就可以了的。另外说明一下:port指向的是应用,
可以理解为,一个进程。ip指向一台计算机。
用UDP协会野可以啊
看约定呢,server和client自己约定,自己选
运输层有面向连接的TCP协议和无连接的UDP协议。TCP协议提供可靠传输,用的较多,UDP虽然不保证可靠传输,但因其实现简单对于一些对可靠性要求不高的通信用UDP实现效率更高。例如浏览器的http协议就是建立在TCP协议之上的一种应用,而QQ聊天则可以用udp协议来实现。
所谓应用层协议,自己设计、封装就好了,好比HTTP就是应用层协议的一种
传输控制层可以是tcp也可以是udp。应用层协议用什么,取决于你自己、或者你的上司、或者你的公司。可以采用常用标准的,也可以是完全自定义的。
如果有必要的话,还可以处理较低层的数据,比如网络层的IP包头。不过绝大部分情况下,是用不着的。