tracert不经过网关默认网关不可用


希望用图片的形式能帮你建立起OSI分层的概念,更多细节需要你阅读教材。图1至图4展示了一个完整的ICMP报文。图1可见,该报文的结构为:Frame,,IP,ICMP。选中Frame可以看到整个报文都被选中。

选择后,如图2显示。下面被选中的数据就是报文的头部,位于数据链路层。那的数据部在哪?头部后面都是数据部。

选择IP后,如图3显示。下面被选中的数据就是IP报文的头部,IP位于网络层。头部后面都是数据部。

总结一下:
1.OSI将网络划分为7层,最低为物理层,最高为应用层。高层报文封装在低层报文中,比如TCP之于IP。前面的图表明,封装的含义就是高层报文的全部被放置在低一层报文的数据部。但是要注意,封装的关系不等于分层的高低关系。比如,ICMP封装在IP中,但是他们都在网络层。ARP封装在中,但是它们都在数据链路层。
2.从封装结构可见,不存在ICMP要经过TCP,因为它们俩都封装在IP中。你可以说它们都要经过IP,然后IP要经过。不管你上层走什么协议,以太网最终都要封装成数据包进行传输。
3.一般把tcp和udp叫传输层,运输层听起来怪怪的,不过也无伤大雅。

比如http请求,应用层dns就解析出了目的ip地址,但是没记录在传输层的tcp首部中?下一层却知道了?

想必读者已经知道,浏览器发送HTTP请求,最终会以HTTP报文到达服务器,服务器理解HTTP报文,会做出响应的动作。从这个意义上来说,浏览器是以HTTP报文与服务器间接打交道,这是最终目标。

此外,浏览器在本地还有一个直接打交道的角色,浏览器通过Socket与本地TCP直接打交道,这是实现最终目标的手段,注意手段与目标的区别,目标是我们最终的目的,无非通过HTTP拉下来一个网页,而手段是我们采取的具体步骤。

首先浏览器通过DNS解析得到服务器的IP,调用SocketConnect()来告诉TCP,自己想和服务器IP连接,否则TCP又不是浏览器肚子里的蛔虫,TCP无法知道,所以这是最最起码的入口参数。此外,浏览器还应该告诉TCP,服务器的端口,如果用户不输入,采用缺省80端口;如果用户输入则使用用户输入端口。

封装成TCP报文发送给IP来封装IP头、并路由处理,同时会把DestinationIP/SourceIP传递给IP层,这个很简单,不再展开。

总结一下:浏览器的一生需要和两个角色打交道,一个是远端的服务器,使用业界标准HTTP协议;另一个是本地的TCP,需要把目的IP/Port传递给TCP,TCP再传递给IP。

_吾王saber:分组是所有协议层通用的词,传输层的报文段可以是分组,网络层的数据包也可以是分组