tcp端口
tcp中的端口,一直以为tcp的端口是个类似的实体的东西,类似于存储数据的数据包的队列那种,所以一个server的端口只能处理一个链接,当server开启listen端口后,服务器接受到链接请求,server会分配一个随机的没有用到的端口给tcp链接。但是这是错的!
tcp使用本地地址和远端地址组成的4元组(目的ip,目的端口,本地ip,本地端口)来处理多个链接请求。这个端口在tcp内核中紧紧是协议中的一部分,内核中仅仅通过目的端口无法确定是哪个进程接受到请求,所以需要server端的端口才能确定和客户端的链接。另外只有处于listen状态中的进程才能接受新的链接请求。当有新的请求到达并且被接受,内核会创建一个处于estableished状态的链接,而且端口号不变与listen的端口号一致。
看个🌰
我们起一个服务,我这里起了个hexo服务,使用4000端口号
使用命令,查看链接
netstat -a -n -f inet
可以看到一个处于listen的4000端口,显示本地地址*.4000, 远端地址是*.*,这表明可以接受任意主机的请求
tcp4 0 0 *.4000 *.* LISTEN
这时候我们telnet 4000这个端口,可以看到有两个新的请求,一个本地端口4000 远端端口60352,这是server上的链接,另一个本地60352,远端4000,这是telnet客户端的链接
tcp4 0 0 *.4000 *.* LISTEN
tcp4 0 0 127.0.0.1.4000 127.0.0.1.60352 ESTABLISHED
tcp4 0 0 127.0.0.1.60352 127.0.0.1.4000 ESTABLISHED
关于tcp的更多知识,tcp详解 18章,unix网络编程,都有对tcp进行详细的描述。