2010-01-07 62 views
2

www.stackoverflow.com的HTTP应用程序请求。 此消息传递到传输层。传输层添加其头并将数据包发送到Internet层。 Internet层无法访问www.stackoverflow.com,因为它只能访问由传输层附加的标头。那么互联网层如何决定这个请求数据包的路由。网络层如何找到数据包的路由

IP标头中的目标地址字段是如何填充的,因为只有应用程序层和传输层知道该字段。 (应用层与头部的互联网层和传输层提及端口号没有交互。)

回答

2

应用层已经通过DNS从URL中检索到主机的IP地址。来自应用层的IP地址以及其他数据被发送到传输层,该层将数据分组化,然后将其发送到因特网层,然后发送。

+0

但Internet层无法看到数据包的数据部分。它只能看到传输层附加的头部。而在传输层报头中,没有提到目标IP地址的字段。 – Mohit 2010-01-07 06:15:02

+0

这是因为IP地址在TCP下面的IP头中...查看我的答案。 – 2010-01-07 06:21:54

+1

IP数据包在里面包含tcp数据包的信息。把OSI模型想象成那些俄罗斯娃娃,其中所有低于上一级的数据都在这个较低级别。因此,最低级别使用来自所有上述级别和自身的数据,而最高级别仅适用于自身。 – Recursion 2010-01-07 06:31:32

1

应用程序(在本例中为浏览器)做了一些最终调用getaddrinfo库函数或类似的东西,这使得系统的解析器在DNS中查找名称并返回一组IP地址。

应用程序以某种方式选择了其中一种(有标准方法来做到这一点,但可爱的是有多少种标准方式),并使用系统调用进行连接,从而启动内核中的传输层获得该IP地址的连接。

最终创建IP数据包的目标地址和本地地址为源,下一个协议设置为TCP并且TCP标头中的SYN位开启。路径中的每个路由器都会查询其表并转发数据包。

TCP魔术发生,SYN + ACK回来,然后有一个连接,HTTP魔术发生,并加载页面。

+0

我想你没有得到这个问题。请参阅修订后的问题。 – Mohit 2010-01-07 06:34:06

+0

Internet不能在OSI模型上运行。有很多跨层连接,完全打乱好整洁的OSI模型。应用程序处理IP地址,并将它们一路传送到堆栈中。所以你断言图层之间有干净的隔离是不正确的。 – 2010-01-07 12:15:47

+0

为了进一步说明:当数据包沿着堆栈向下时,旁边有一个旁路通道,这样每个层都可以访问传递给系统调用的所有内容,从而导致创建套接字和传输特定数据包包括所有的IP地址。这些数据部分存储在套接字上,部分存储在附属于数据包本身的辅助结构上。 – 2010-01-07 12:19:04

0

rfc791 IP - 寻址

甲区分的姓名,地址和路由之间进行[4]。一个名字表示我们所寻求的。地址表明它在哪里。路线指示如何到达那里。互联网协议主要处理地址。高级别(即主机到主机或应用程序)协议的任务是完成从名称到地址的映射。互联网模块将互联网地址映射到本地网络地址。下级(即本地网或网关)程序的任务是使本地网地址映射到路由。地址是四个八位字节(32位)的固定长度。

了解更多:http://www.faqs.org/rfcs/rfc791.html#ixzz0buBJkVEI

它是较高级别的任务(即,主机到主机或应用程序)的协议,使从名称到地址的映射???

+0

我想你没有得到这个问题。请参阅修订后的问题。 – Mohit 2010-01-07 06:34:38

0

如果您想知道实际IP标头如何获取地址。它在创建套接字时发生在内核中。在这种情况下,TCP套接字,检查出

人7 IP

的数据不会从TCP数据包继承,尽管数据包含在TCP报头的校验和。