TCP套接字类似于电路中插座的概念,然而电路插座是一个物理组件,而这里指的是一个逻辑概念上的连接,由服务器主机创建,来与客户端程序的请求建立起连接。

TCP 套接字(或“虚拟端口”)在 TCP 和 UDP 中来表征唯一的端到端的连接,之所以被称为是“虚拟端口”,是因为一个物理连接器可以服务于多个连接。套接字的每一端使用自己的端口号,并且这个端口号在连接生命周期中不会改变。端口号和 IP 地址一起表征了一个端节点,两个端节点组成了一个 套接字(socket)。

客户端-服务端 配对

所有的 TCP 或 UDP 都有一个源和目的地,因此对于每个 socket 连接总是存在一个源端口和目的端口。

在 TCP 或 UDP头部信息中的一对字段(2个)用来记录在socket 连接过程中每一个端节点的源端口和目的地端口,头部信息中的该对字段中每个字段是16位宽,可表示0~65534的范围。每个计算机使用一个唯一的 IP 地址和唯一的(源端口,目的地端口)对来表征2台计算机之间特定的连接。典型的,当你的计算机连接到一个网站,那么计算机连接到目标网站服务器的80端口(对于 HTTP 协议的默认端口);同时,在本机计算机中的端口是大于1024的,且不再被使用的端口,这意味着若1025、1026端口在被使用,而接着1025端口被释放,那么下一次1025将会被新的业务重新使用。

如今,为了应对黑客的攻击,本地计算机将随机的选择端口以让黑客不会预先知道。

服务器运行网络服务,而这些服务绑定在一个端口上,并监听这个端口。当多个客户端连接到相同的服务,多个客户端所使用的远程端口是一样的,因为在连接中源 IP 地址、端口号表征了唯一的一个客户端,因此对于同一个客户端而言,服务器也能追踪0~65534个不同连接。

注意,在 TCP 连接的范畴中,我们说一个端口何时是源端口还是目的端口,这取决于通信中哪一方正在传输信息,发出端就是客户端,接收端就是服务端。