zoukankan      html  css  js  c++  java
  • 为什么ICMP的ping和tracert不经过tcp或udp?

    答:

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

    图1

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

    图2

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

    图3

    选择ICMP后,如图4显示。下面被选中的数据就是ICMP报文的全部。

    图4

    图5至图9展示了一个完整的TCP报文。图5可见,该报文全长3104bit。

    图5

    图6展示了以太网报文的头部。

    图6

    图7展示了IP报文的头部。

    图7

    图8展示了TCP报文的头部,它位于传输层。

    图8

    图9展示了SSL报文的全部内容,它位于应用层。

    图9

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

    作者:龙辰原
    链接:https://www.zhihu.com/question/22693759/answer/129255622
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    再补充个问题:

    tcp首部只有端口号没有ip地址,那么网络层怎么知道目的ip地址的呢?

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

    答1:

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

    浏览器 --------HTTP --------服务器

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

    如下方示意图:

    浏览器
    |
    Socket
    |
    TCP

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

    至此,TCP拥有了封装TCP头一切必要信息

    Destination Port
    Source Port

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

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

    总结:

    1、DNS解析

    2、调用Socket Connect()传递给TCP

    3、tcp将tcp报文以及目标ip传递给ip层

    4、ip层封装tcp报文 并且 将目标ip填到ip分组首部中

    目标ip是经过链路层传递给网络层的,并不是直接跳过链路层。

    作者:车小胖
    链接:https://www.zhihu.com/question/54795054/answer/141130654
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    答2:

    链接: https://www.zhihu.com/question/54795054/answer/141117982

  • 相关阅读:
    CEPH篇 目录
    kubernetes篇 容器用户权限控制
    深度学习篇-如何理解置信区间
    Mac软件安装篇 for Mac
    JAVA进阶篇 内存模型
    负载均衡篇 不同层次的负载均衡(2/3/4/7)
    NETTY篇 一篇文章看懂NETTY
    base64加密后无法解密
    Spring-Cloud-Gateway 从升级到放弃
    spring gateway 截取response 长度缺失
  • 原文地址:https://www.cnblogs.com/a3192048/p/12241317.html
Copyright © 2011-2022 走看看