“协议”只是* nix端口的人类别名吗?

时间:2014-04-18 02:38:19

标签: sockets unix tcp port protocols

我正在阅读Beej guide to network programming,我遇到了这个

int getaddrinfo(const char *node,     // e.g. "www.example.com" or IP
                const char *service,  // e.g. "http" or port number
                const struct addrinfo *hints,
                struct addrinfo **res);
  

你给这个函数三个输入参数,它给你一个   指向结果的链表,res的指针。

     

node参数是要连接的主机名或IP地址。

     

接下来是参数服务,它可以是一个端口号,如“80”,   或特定服务的名称(可在IANA端口列表或   Unix机器上的/ etc / services文件),如“http”或“ftp”或   “telnet”或“smtp”或其他什么。

unix端口和协议是一样的吗?例如,https与端口443相同,http是端口80

3 个答案:

答案 0 :(得分:1)

<强>快速

端口和协议是不同的东西,但通常协议有默认端口,因此http协议Web服务器的默认端口是80.

<强>解释

端口是tcp / ip级实体,这是发送二进制网络请求的端点。

协议是应用程序级实体,它用作客户端和服务器之间通信的语言。

基本上,您可以通过任何端口说出任何协议(只需确保服务器和客户端使用相同的协议)。所以你可以说12345端口的http,反之亦然使用80端口说ftp。

例如,当您在浏览器中输入stackoverflow.com时 - 您的浏览器首先在主机名之前添加http://,然后在之后添加:80 - 作为http的默认端口,以便访问的实际URL - http://stackoverflow.com:80/,如果您输入https://stackoverflow.com - 浏览器会自动添加:443,依此类推。

但是如果你试图打开https://stackoverflow.com:80/,你会收到错误 - 因为这个端口的协议是错误的。

更多 - 您可以将自己的服务器配置为使用某些不同的端口,然后您必须为每个请求指明协议和端口,例如:http://example.com:12345/https://example.com:54321/

答案 1 :(得分:0)

“ftp”和“http”等服务具有默认端口。在这种情况下,443和80.所以它们确实对应于端口。但是,我不会称它们为“同一件事”。例如,您可以根据需要在不同的端口上执行http协议。例如,当您在浏览器中键入http://something:8080时,您正在通过端口8080执行http。对于getaddrinfo,它允许您使用服务的名称,它将在内部使用默认值端口号由配置文件确定(在某些Unix系统上例如/etc/services

答案 2 :(得分:0)

没有。端口是数字,协议是规范。为方便起见,它们是相关的,但不相同。

端口是TCP / IP的一部分,而不是Unix。整个问题基本上只是一个类别错误。