TCP多路复用,多路分解

时间:2014-01-08 13:43:58

标签: windows networking windows-7 tcp

据我所知,TCP需要四个值来在客户端进行TCP多路复用并在服务器端进行多路分解:

  • Source-IP-nr,source-Port-nr
  • remote-IP-nr,remote-Port-nr

端口号是TCP标头的一部分,但IP地址不是TCP标头的一部分,它们属于IP标头。

问题:

每个主机端的TCP实现如何获知必要的IP地址?

创建TCP套接字Socket mySocket = new Socket(remoteIPNr,remotePortNr)时,指定远程IP地址。但这发生在应用程序层上。那么套接字如何将远程IP地址传输到传输层?此外,TCP如何获知有关源IP地址的信息?

1 个答案:

答案 0 :(得分:1)

  

套接字如何将远程IP地址传输到传输层?

它以与任何系统调用参数进入内核相同的方式到达传输层。这就是系统调用参数的用途。这里没有什么神秘之处,因为它是一个IP地址。例如,这同样适用于目标端口号。

如果您正在询问TCP如何查看IP标头,那么您错误地认为它不能。它可以。

  

此外,TCP如何获知有关源IP地址的信息?

源IP地址由应用程序在bind()调用中定义,或者在您发出connect():时默认由TCP提供。查询IP路由表以确定哪个本地IP地址是到目标地址最便宜的路由,该地址成为套接字的源地址。

对于您没有询问的下一个问题,关于源端口,应用程序在bind()调用中指定了源端口,否则系统会找到一个空闲端口号并将其用作源端口。