Windows TCP多路复用、解多路复用

Windows TCP多路复用、解多路复用,windows,networking,windows-7,tcp,Windows,Networking,Windows 7,Tcp,据我所知,TCP需要四个值来在客户端进行TCP多路复用,在服务器端进行多路解复用: 源IP编号,源端口编号 远程IP号码,远程端口号码 端口号是TCP头的一部分,但IP地址不是TCP头的一部分,它们属于IP头 问题: 每个主机端的TCP实现如何获知必要的IP地址 创建TCP套接字时,需要指定远程IP地址。但这发生在应用层。那么套接字如何将远程IP地址传输到传输层呢?此外,TCP如何得知源IP地址 套接字如何将远程IP地址传输到传输层 它进入传输层的方式与任何系统调用参数进入内核的方式相同。这

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

  • 源IP编号,源端口编号
  • 远程IP号码,远程端口号码
端口号是TCP头的一部分,但IP地址不是TCP头的一部分,它们属于IP头

问题:

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

创建TCP套接字时,需要指定远程IP地址。但这发生在应用层。那么套接字如何将远程IP地址传输到传输层呢?此外,TCP如何得知源IP地址

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

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

如果你问TCP是如何看到IP头的,你就错误地认为它看不到。它可以

此外,TCP如何得知源IP地址

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


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

简短回答:这就是操作系统应该为您做的。为了得到更好的答案,请告诉我们您使用的是什么语言和操作系统。它真的依赖于语言吗?操作系统是Windows 7。如果您在问题中包含代码,则明智的做法是共享语言详细信息。你可能会惊讶于这能在多大程度上改善你得到的答案。不,我不是因为我有一个特定的代码问题才这么问的。我想大致了解这个过程。但也许我正在深入挖掘。我可以想象,如果我的操作系统的TCP实现不想知道源IP,它就知道去哪里寻找。远程IP也是如此。当创建如上所述的套接字时,远程IP将存储在某个地方,TCP实现知道在哪里。。。但这只是一个(或多或少)受过教育的猜测;)看一眼