繁体   English   中英

TCP / IP数据包如何到达特定的服务器套接字?

[英]How does a TCP/IP packet reach to a specific server socket?

据我所知,当TCP客户端连接到服务器时,它会自动使用未使用的本地端口,除非明确指定。 在服务器端,我们有一个侦听套接字,只要接受新连接,就会创建一个新套接字。

但是所有服务器套接字都使用相同的本地端口(我用netstat检查过)。 我的问题是当所有服务器端套接字通过相同的IP地址和本地端口进行通信时,从客户端发送的数据包如何到达服务器上的特定套接字?

下面是一个telnet快照,显示我的tcp / ip echo服务器使用相同的地址和端口进行2个不同的连接。

替代文字

当您从客户端连接到服务器时,服务器上的TCP知道客户端的地址和端口 每个单独的连接由4元组(client_ip,client_port,server_ip,server_port)标识和区分。

在netstat显示中,本地地址远程(外部)地址的组合唯一标识连接。 两个突出显示的连接的外部地址是不同的。

这基本上是入站和出站连接之间的区别。

在入站连接上,服务器套接字将绑定并侦听给定的ip:端口。 传入连接在具有相同ip:port的新套接字上被接受,因为它们是从侦听服务器套接字接受的。

使用netstat时,您应该看到服务器套接字的ip:端口处于Listening状态(对于TCP连接),而多个ip:端口处于Established状态,用于新套接字上接受的传入连接。

出站连接仅允许使用未绑定的端口。 您可以手动指定它们,或者通过tcp / ip堆栈随机选择一个。 (这是一个例外,当使用SO_REUSEADDR时 ,它允许您绑定到仍处于TIME_WAIT状态的绑定端口)

在服务器上,只有一个开放端口意味着您正在运行单个站点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM