我曾经看到很多类似于这篇关于java中serversocket的回答:“假设你有一个在5000端口上监听的服务器,客户端A和B将连接到我们的服务器。
客户端A向服务器发送请求,客户端A的端口由操作系统选择。通常情况下,操作系统会选择下一个可用的端口。搜索的起点是先前使用的端口号+1(例如,如果操作系统最近使用了端口45546,则操作系统将尝试使用45547)。
假设没有连接问题,服务器接收到客户端A在5000端口上连接的请求。服务器随后打开它自己的下一个可用端口,并将其发送给客户端。在这里,客户端A连接到新的端口,而服务器现在再次可以使用5000端口。”
我在stackoverflow的多个问题中看到过此类答案,关于在accept()返回的socket中使用不同的端口而不是ServerSocket监听的端口。我一直以为TCP由四个信息组成:
客户端IP:客户端端口和服务器IP:服务器端口 - > 协议(以区分TCP和UDP)
那么为什么accept()需要返回绑定到不同端口的套接字呢?每个头部发送的四元组信息难道不能足以区分从不同机器到达的同一服务器端口的多个连接,而不需要在服务器机器上使用不同的端口进行通信吗?
客户端A向服务器发送请求,客户端A的端口由操作系统选择。通常情况下,操作系统会选择下一个可用的端口。搜索的起点是先前使用的端口号+1(例如,如果操作系统最近使用了端口45546,则操作系统将尝试使用45547)。
假设没有连接问题,服务器接收到客户端A在5000端口上连接的请求。服务器随后打开它自己的下一个可用端口,并将其发送给客户端。在这里,客户端A连接到新的端口,而服务器现在再次可以使用5000端口。”
我在stackoverflow的多个问题中看到过此类答案,关于在accept()返回的socket中使用不同的端口而不是ServerSocket监听的端口。我一直以为TCP由四个信息组成:
客户端IP:客户端端口和服务器IP:服务器端口 - > 协议(以区分TCP和UDP)
那么为什么accept()需要返回绑定到不同端口的套接字呢?每个头部发送的四元组信息难道不能足以区分从不同机器到达的同一服务器端口的多个连接,而不需要在服务器机器上使用不同的端口进行通信吗?
netstat
输出? - user207421