2010-01-21 81 views
3

我想知道服务器应用程序是否总是在同一端口上回答?我曾经在某处看过,为了不断监听“监听”端口,服务器将使用不同的端口。任何人都可以提供更多细节吗? 谢谢!关于TCP/IP端口绑定的问题

回答

2

作为TCP握手过程的一部分,在另一个端口上建立通信通道。源和目标的'端口'号码对应于TCP数据包报头中的16位字段。通道建立后,通信将在该端口上进行,并在标题中的字段中具有适当的源端口值和目标端口值。

初始连接到服务器上的侦听端口;在此之后,进程在分配的新端口上建立TCP连接,并在这些端口上进一步进行通信。

+0

另外,当我连接到某些服务器(可以说在口1200)我不会收到该端口上的通信? – Thomas 2010-01-21 17:21:37

+0

对不起,但这是完全错误的。 – caf 2010-01-21 22:46:09

2

如果您在特定端口上与服务器建立TCP连接,则该TCP连接将继续在服务器端使用相同的端口。

在一侧的(address1, port1)对和另一侧的(address2, port2)对之间建立TCP连接 - 并且所有这四个值在TCP连接的生命周期中都是固定的。

这不会阻止服务器在接受连接后侦听端口 - 因为它可以根据客户端使用的(address, port)对来区分已建立连接的任何数据包和新连接。

例如,从Oracle服务器这个netstat输出显示它监听1521端口,和几个已建立的连接也使用该端口:

Active Internet connections (servers and established) 
Proto Recv-Q Send-Q Local Address    Foreign Address    State 
tcp  0  0 0.0.0.0:1521    0.0.0.0:*     LISTEN 
tcp  0  0 127.0.0.1:1521    127.0.0.1:32776    ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32798   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32823   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32822   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32821   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32820   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32819   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:32818   ESTABLISHED 
tcp  0  0 127.0.0.1:1521    127.0.0.1:30536    ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:36969   ESTABLISHED 
tcp  0  0 127.0.0.1:32776    127.0.0.1:1521    ESTABLISHED 
tcp  0  0 127.0.0.1:30536    127.0.0.1:1521    ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:37786   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:37035   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:37034   ESTABLISHED 
tcp  0  0 192.168.9.126:1521   192.168.9.124:33018   ESTABLISHED