2

我在 BSD 代码中查找过,但在某处迷路了 :(

我要检查的原因是:

TCP RFC ( http://www.ietf.org/rfc/rfc793.txt ) sec 2.7 状态:

“为了在每个 TCP 中提供唯一地址,我们将标识 TCP 的 Internet 地址与端口标识符连接起来,以创建一个套接字,该套接字在连接在一起的所有网络中都是唯一的。连接完全由两端的套接字对指定。 "

这是否意味着:socket = local (ip + port) ?

如果是,则 Unix 的接受函数返回一个新的套接字描述符。这是否意味着创建了一个新的套接字(进而创建了一个新的端口)来响应客户端请求?

PS:我是网络编程的新手。

[更新] 我明白了我读到的@socket API accept() 函数是如何工作的?. 我唯一的疑问是:如果 socket = (local port +local ip),那么一个新的 socket 将意味着相同 IP 的一个新端口。按照这个逻辑,accept 返回一个新的套接字(因此创建了一个新的端口)。所以所有发送都应该通过这个新端口进行。我在这里的理解正确吗?

4

1 回答 1

8

你大多是正确的。当您accept()创建一个新套接字时,侦听套接字保持打开状态以允许更多传入连接,但新套接字使用与侦听套接字相同的本地端口号。

连接由 5 元组定义:协议、本地地址、本地端口、远程地址、远程端口。

因此,每个接受的连接都是唯一的,即使它们都共享相同的本地端口号,因为远程 ip/端口总是不同的。监听套接字没有远程 IP/端口,因此也是唯一的。

于 2012-11-06T03:44:17.990 回答