Sockets 客户端如何知道子TCP进程正在使用的临时端口?

Sockets 客户端如何知道子TCP进程正在使用的临时端口?,sockets,tcp,network-programming,tcpclient,tcp-ip,Sockets,Tcp,Network Programming,Tcpclient,Tcp Ip,在阅读TCP的工作原理时,我读了很多书,其中提到在listen()之后,当客户端连接到服务器时,套接字程序员应该调用accept(),以接受来自客户端的连接。父TCP服务器进程(侦听端口,比如80)然后调用fork(),并将创建一个子进程,该子进程随后将继续与客户端通信。子进程显然必须绑定到另一个临时端口才能与客户端通信。我的问题是,一旦子进程分叉,客户端如何知道将数据发送到哪个端口以便进行通信?侦听端口80的父TCP进程是否将其传送到客户端 Hiw客户端是否知道子TCP进程正在使用的临时端口

在阅读TCP的工作原理时,我读了很多书,其中提到在
listen()
之后,当客户端连接到服务器时,套接字程序员应该调用
accept()
,以接受来自客户端的连接。父TCP服务器进程(侦听端口,比如80)然后调用
fork()
,并将创建一个子进程,该子进程随后将继续与客户端通信。子进程显然必须绑定到另一个临时端口才能与客户端通信。我的问题是,一旦子进程分叉,客户端如何知道将数据发送到哪个端口以便进行通信?侦听端口80的父TCP进程是否将其传送到客户端

Hiw客户端是否知道子TCP进程正在使用的临时端口

没有短暂的港口可以知道。客户端只是继续使用它连接到的同一个目标端口

子进程显然必须绑定到另一个临时端口才能与客户端通信

否。客户端进程继承接受的套接字,该套接字绑定到与侦听套接字相同的本地端口

我的问题是,一旦子进程分叉,客户端如何知道将数据发送到哪个端口以便进行通信

它通过与之连接的同一端口进行通信

侦听端口80的父TCP进程是否将其传送到客户端


客户端通过FD继承机制继承套接字。

否,
accept
调用为服务器端设置绑定。TCP连接包含有关客户端(地址和端口)的信息。客户端将知道服务器端端口,因为服务器必须回复连接请求,并且TCP数据包包含服务器的端口号。尤其是@JoachimPileborg No。客户端已经知道服务器端端口,因为它就是它所连接的端口。与服务器回复无关。服务器应答逻辑上由两位组成,即SYN和ACK。没有其他的新消息了,嗨,约阿希姆。谢谢你的回复。我理解你提到的部分。我希望知道的是,一旦发生“accept()”(以及随后创建子进程的“fork()”),客户端如何知道子进程将侦听哪个(临时)端口?在3路握手中,SYN-ACK消息是否包含有关临时端口的信息?请在下面的链接中使用图4作为参考,以便更好地理解我想要表达的内容:@EJP啊,是的,你说得对。看来我做低级网络工作已经太久了。@JoachimPileborg为了准确起见,除了服务器的序列号之外,没有新的信息。