今天在复习网络时突然想到一个问题,一个http服务器所能创建的套接字是不是只能有6万来个呢?(因为端口号只有6万来个),答案当然是否定的。
后来我总结了为什么我会这样想,因为我认为每个端口只能创建一个套接字,却忽略了一点,套接字的区分其实是一个四元组:源ip、源端口、目的ip、目的端口。
我们先回顾下服务器端所做的工作,首先,它创建了一个特殊的套接字,这个套接字(称之为监听套接字)没有固定的目的ip和目的端口,而源ip是它本身的ip,源端口是80,当有客户敲门时(即和这个监听套接字进行三次握手),它会创建一个新的套接字,这个新套接字的源ip和源端口仍然是它自己的ip和80,而目的ip和目的端口是客户敲门时的ip和端口,这样客户和服务器就创建了一个TCP连接。尽管这些套接字的源ip和源端口是一样的,但是只要目的端口和目的ip有一个不一样,那么套接字就不一样。
所以说服务器所能创建的最大TCP数目是与它的端口数是无关的