我查了BSD代码,但在某处迷路了:(
我想检查的原因是:
TCP RFC(http://www.ietf.org/rfc/rfc793.txt)sec 2.7声明:
“为了在每个TCP中提供唯一的地址,我们将标识TCP的互联网地址与端口标识符连接起来,以创建一个套接字,该套接字在连接在一起的所有网络中都是唯一的。连接完全由一对套接字指定。结束。“
这是否意味着:socket = local(ip + port)?
如果是,那么Unix的accept函数返回一个新的套接字描述符。是否意味着创建了一个新套接字(反过来又创建了一个新端口)来响应客户端请求?
PS:我是网络编程的新手。
[更新]我理解我读到的How does the socket API accept() function work?。 我唯一的疑问是:如果socket =(本地端口+本地IP),那么新的套接字将意味着同一IP的新端口。通过这个逻辑,accept返回一个新的套接字(因此创建了一个新的端口)。所以所有发送都应该通过这个新端口发生。 我在这里理解的是正确的吗?
答案 0 :(得分:8)
你大多是正确的。当您accept()
时,会创建一个新套接字,并且侦听套接字保持打开状态以允许更多传入连接,但新套接字使用与侦听套接字相同的本地端口号。
连接由5元组定义:protocol,local-addr,local-port,remote-addr,remote-port。
因此,每个接受的连接都是唯一的,即使它们都共享相同的本地端口号,因为远程ip /端口总是不同的。侦听套接字没有远程ip / port,因此也是唯一的。