2011-12-06 31 views
4

传输层如何从数据报包中检索源IP地址? 从我所了解的IP地址是在网络层头和传输层头只包含源端口和目标端口。请让我知道如果我缺少的东西传输层如何从数据报包中检索源IP地址?

+0

我猜更多的细节,你不知道如何调用像'recvfrom'源地址填写?我建议阅读Linux,BSD或任何其他具有开放网络堆栈的操作系统的源代码,因为这取决于操作系统。 –

回答

0

简单的答案是传输层不检索来自数据报包的IP地址。

当数据报被从源发送到目的地,下面是IP是如何工作的,当数据报行进用简单的步骤:

  • 上层应用发送一个数据包到网络层。
  • 数据计算与校验和一起。
  • 构造IP头和数据报。
  • 通过网关路由。
  • 每个网关的IP层执行校验和。如果校验和不匹配, 的数据报将被丢弃,并且会出现错误信息发送回 发送机。一路上,如果TTL递减到0,将会发生相同的 结果。并且,当数据报沿着网络传递时,目的地址路由路径将在每个站点确定为 。
  • 数据报到达目的网络层。
  • 执行校验和计算。
  • 取出IP标头。
  • 消息传递给上层应用程序。

EDIT

的应用将套接字绑定到其数据传输的端点,该端点是IP地址和服务端口的组合。然后使用此绑定来确定应用程序层上的哪个应用程序需要进行此操作。

例如应用程序A所提供的有关某个端口X的UDP服务应用。然后A开始时,它会尝试绑定到端口X.如果无法绑定到它,因为端口正在使用,操作系统会引发应用程序必须处理的错误。同样在OSI体系结构中,每层都依赖于其下面的层来实际传输数据,为其自己的预期目的添加或提供特定的功能。

按照RFC

的伪报头概念性前缀到UDP报头包含 源地址,目的地址,协议,以及UDP 长度。这些信息可以防止错误的数据报。 该校验和过程与TCP中使用的相同。

有关细节请查看RFC User Datagram Protocol

+0

这没有回答这个问题。他问的是传输层(甚至应用层)等高层如何确定IP地址,因为他们显然无法访问IP标头。 –

+0

他的问题是,由于上层显然知道IP地址,所以很明显他们从某处获得IP地址。他们怎么得到它? –

+0

@JonathanM我添加了一些更多的澄清和链接到RFC。 –