为什么我通常会选择套接字协议来实现其他协议?

时间:2016-06-11 05:53:34

标签: sockets http protocols

假设我想为FTP实现客户端,也可能为SFTP实现。编程语言无关紧要。所以我继续为编程语言X选择一个套接字库并实现一个FTP客户端。就是这样。

我的问题是,为什么我必须选择套接字库或套接字协议?为什么既没有HTTP库,也没有ICMP,SSH,也没有IP,还有什么?

2 个答案:

答案 0 :(得分:3)

  

...为什么我必须选择套接字库或套接字协议?为什么既没有HTTP库,也没有ICMP,也没有SSH,也没有IP,还有什么呢?

您无需选择套接字库。各种编程语言中有各种更高级别的库,只需让您使用应用程序协议,而无需使用套接字层。 HTTP的示例是针对各种语言的libcurl绑定,针对Perl的LWP,针对Python的请求....

  

......用于实施其他协议?

当然,如果您想要实现而不是仅仅使用应用程序协议,那么您明确决定不使用任何现有的库来执行此特定协议。然后,您应该使用低于要实现的协议的层。为了实现像HTTP这样的协议,这将是传输层(即使用套接字API),但是为了实现更高级别的协议,如SOAP或REST over HTTP,这可能是HTTP层(即使用一些HTTP库)。

在FTP的情况下,下一个较低层是传输层,因此您需要使用套接字API。在SFTP的情况下,您可以使用实现SSH协议的库,因为SFTP是使用SSH协议的协议。

答案 1 :(得分:0)

您看到FTP,SFTP,HTTP,SSH是应用层协议。

所有应用层协议都使用传输层提供的服务。

套接字在传输层工作。

ICMP和IP是网络层协议。

应用程序层的所有协议在内部使用套接字TCP或UDP