• TCP、IP、ARP协议之间的工作关系


    TCP协议与ARP协议位于不同的层,不能用“并列”的思维来考虑。TCP位于传输层,而ARP工作在网络层(也有说法是数据链路层,主要看怎么理解),但实际上掌管网络层的大boss是IP协议,ARP协议用于实现IP地址向MAC地址的转换,不过是个跑龙套的。

    除此之外,网络层想要把数据发出去还要依靠数据链路层,在局域网中,数据链路层和之下的物理层最常见的莫过于802.3协议栈了,也就是大名鼎鼎的以太网

    802.3/以太网并不是一个协议,也不是一个分层。它是对局域网内部通信的一个实现标准,囊括了从物理层到链路层的一坨协议。以下简单使用“802.3”来代表802.3中链路层及以下负责数据传送的协议集

    在网络分层模型中,下层要为上层提供服务,而上层的一切行动都要靠下层们为它跑腿。打个简单的比方,TCP就好比是老板,而IP是项目主管,ARP和802.3则是为以上二位跑腿的小员工。现在老板TCP想要向外发送一个SYN请柬。以下是大致剧情……

    -----------------------------------------------------------------------------------------------------------------------------------------

    TCP:IP你过来,我现在要给“destinationIP”发送一个SYN请柬,请柬我已经写好了,剩下的就交给你了,限你n秒之内给我回话!(老板任性地走了……)。

    IP拿到请柬后用信封封好,写上自己的IP地址接收方的IP地址。然后将自己的网络号与destinationIP对比:
    1. 刚好在同一个网段,心想目标就在我们小区内(局域网),这就好办了(跳至 --- #1 --- 处)。
    2. IP一看不在同一个网段,心想不妙,只能求助收发室了(网关/路由器)(跳至 --- #2 --- 处)。

    --- #1 ---
    IP:ARP你过来,给我查查这个“destinationIP”的详细地址在哪(MAC地址)。

    ARP:(翻了翻自己的笔记本(ARP缓存)没找到,他摇了摇头,接着打开了小区广播) “destinationIP”听到请回答,我需要你的详细地址。

    过了一会ARP收到了一个回电,不出所料,destinationIP汇报了自己的MAC地址。ARP把MAC地址交给了IP。
    跳至 --- #3 --- 处

    --- #2 ---
    IP:(把默认网关的IP地址指给ARP)这是收发室的IP,你给我查查它的详细地址(MAC地址)。

    ARP翻开了自己的笔记本,很快找到了收发室的详细地址,并把MAC地址交给了IP,他庆幸这次不需要再打开小区广播扰民了~
    跳至 --- #3 --- 处

    --- #3 ---

    IP:802.3你过来,我这里有一封写好的信你帮我送出去,MAC地址我已经帮你查好了。

    最终,802.3按照得到的MAC屁颠屁颠地将信件送到收发室,并登记了自己的MAC地址。

    此处省略n万字…… 结束~

    -----------------------------------------------------------------------------------------------------------------------------------------

    注意:
    ARP协议是和以太网配套使用的,如果你的局域网的底层实现并不是以太网(比如令牌环网、HDDI等),那么你可能压根就不需要ARP请求!
    从始至终,IP协议只处理与IP地址有关的部分;
    ARP协议只处理查询MAC地址;
    802.3链路层协议只负责MAC-MAC之间的实际传送;
    这就是网络分层,各司其职。

    ===================================

    最后,你问我TCP发出SYN请求和ARP广播谁先,当然是SYN请求在先了!但是如果没有ARP广播SYN请求还不是纸上谈兵?所以问谁先谁后是没有意义的,分清楚谁是boss、谁是小弟就好了。

  • 相关阅读:
    正则表达式元字符查询
    重置SQLSERVER表的自增列,让自增列重新计数
    C#byte类型
    C#编程,TreeView控件的学习
    20个常用正则表达式
    .jquery中$.get()提交和$.post()提交有区别吗?
    JQuery有几种选择器?
    undefined,null 和 undeclared 有什么区别
    根据你以往的经验简单叙述一下MYSQL的优化
    什么是 JavaConfig?
  • 原文地址:https://www.cnblogs.com/itsad/p/8250503.html
Copyright © 2020-2023  润新知