【发布时间】:2018-09-19 17:37:22
【问题描述】:
您好,我只是网络方面的新手, 只是想问一下,服务器上欢迎socket的欢迎端口和监听端口一样吗? 比如我们都知道HTTP使用80端口,那么80端口是web服务器初始化TCP三向握手的欢迎端口吗?连接套接字的实际端口号(用于传输http消息)可以是服务器分配的任意数字吗?
【问题讨论】:
标签: sockets networking tcp port
您好,我只是网络方面的新手, 只是想问一下,服务器上欢迎socket的欢迎端口和监听端口一样吗? 比如我们都知道HTTP使用80端口,那么80端口是web服务器初始化TCP三向握手的欢迎端口吗?连接套接字的实际端口号(用于传输http消息)可以是服务器分配的任意数字吗?
【问题讨论】:
标签: sockets networking tcp port
来自accept 联机帮助页:
accept() 系统调用用于基于连接的套接字类型 (SOCK_STREAM,SOCK_SEQPACKET)。它提取第一个连接 请求侦听套接字的挂起连接队列, sockfd,创建一个新的连接套接字,并返回一个新文件 引用该套接字的描述符。 新创建的套接字不是 处于聆听状态。原始套接字 sockfd 不受 这个电话。
“欢迎”端口是监听端口。所有客户端都在端口 80 上启动与 Web 服务器“侦听”的连接(客户端在端口 80 上“欢迎”)。 ESTABLISHED 状态下的连接将具有与listen fd 不同的套接字 fd。
【讨论】:
服务器上欢迎套接字的欢迎端口是否与监听端口相同?
服务器上的端口保持不变,即所有客户端的端口都是 80,即使在三次握手之后。
我猜你真正要问的是如何区分同时的客户端连接。
通常网络套接字使用唯一的 4 元组来标识连接,即源 IP、源端口、目标 IP、目标端口:https://en.wikipedia.org/wiki/Network_socket#Socket_pairs
因此,所有客户端的目标 IP 和端口(即服务器的 IP 和端口 80)保持不变,但源 IP 和端口不同。这就是服务器区分不同连接到同一端口 80 的方式。
连接套接字的实际端口号(用于传输http消息)可以是服务器分配的任意数字吗?
目标端口保持不变,即如上所述的 80。相反,每个客户端在建立 TCP 连接之前选择其未使用的源端口。
【讨论】: