From b980f5d28d60187b80e0577094641c19ba327c20 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 28 Aug 2022 15:18:49 +0800 Subject: [PATCH] =?UTF-8?q?[docs=20add]ARP=20=E5=8D=8F=E8=AE=AE=E8=AF=A6?= =?UTF-8?q?=E8=A7=A3(=E7=BD=91=E7=BB=9C=E5=B1=82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + docs/.vuepress/sidebar.ts | 1 + docs/cs-basics/network/arp.md | 103 ++++++++++++++++++ .../network/images/arp/2008410143049281.png | Bin 0 -> 22708 bytes .../images/arp/arp_different_lan.drawio | 1 + .../network/images/arp/arp_different_lan.png | Bin 0 -> 22352 bytes .../network/images/arp/arp_same_lan.png | Bin 0 -> 12728 bytes .../network/other-network-questions.md | 33 ++++-- docs/home.md | 1 + 9 files changed, 133 insertions(+), 7 deletions(-) create mode 100644 docs/cs-basics/network/arp.md create mode 100644 docs/cs-basics/network/images/arp/2008410143049281.png create mode 100644 docs/cs-basics/network/images/arp/arp_different_lan.drawio create mode 100644 docs/cs-basics/network/images/arp/arp_different_lan.png create mode 100644 docs/cs-basics/network/images/arp/arp_same_lan.png diff --git a/README.md b/README.md index a904fa2a..8f0fe501 100755 --- a/README.md +++ b/README.md @@ -151,6 +151,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle - [HTTP 常见状态码(应用层)](./docs/cs-basics/network/http-status-codes.md) - [TCP 三次握手和四次挥手(传输层)](./docs/cs-basics/network/tcp-connection-and-disconnection.md) - [TCP 传输可靠性保障(传输层)](./docs/cs-basics/network/tcp-reliability-guarantee.md) +- [ARP 协议详解(网络层)](./docs/cs-basics/network/arp.md) ### 数据结构 diff --git a/docs/.vuepress/sidebar.ts b/docs/.vuepress/sidebar.ts index 4dedf1e0..0f713cb9 100644 --- a/docs/.vuepress/sidebar.ts +++ b/docs/.vuepress/sidebar.ts @@ -177,6 +177,7 @@ export const sidebarConfig = defineSidebarConfig({ "http-status-codes", "tcp-connection-and-disconnection", "tcp-reliability-guarantee", + "arp", ], }, ], diff --git a/docs/cs-basics/network/arp.md b/docs/cs-basics/network/arp.md new file mode 100644 index 00000000..961219ce --- /dev/null +++ b/docs/cs-basics/network/arp.md @@ -0,0 +1,103 @@ +--- +title: ARP 协议详解(网络层) +category: 计算机基础 +tag: + - 计算机网络 +--- + +每当我们学习一个新的网络协议的时候,都要把他结合到 OSI 七层模型中,或者是 TCP/IP 协议栈中来学习,一是要学习该协议在整个网络协议栈中的位置,二是要学习该协议解决了什么问题,地位如何?三是要学习该协议的工作原理,以及一些更深入的细节。 + +**ARP 协议**,可以说是在协议栈中属于一个**偏底层的、非常重要的、又非常简单的**通信协议。 + +开始阅读这篇文章之前,你可以先看看下面几个问题: + +1. **ARP 协议在协议栈中的位置?** ARP 协议在协议栈中的位置非常重要,在理解了它的工作原理之后,也很难说它到底是网络层协议,还是链路层协议,因为它恰恰串联起了网络层和链路层。国外的大部分教程通常将 ARP 协议放在网络层。 +2. **ARP 协议解决了什么问题,地位如何?** ARP 协议,全称 **地址解析协议(Address Resolution Protocol)**,它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。 +3. **ARP 工作原理?** 只希望大家记住几个关键词:**ARP 表、广播问询、单播响应**。 + +## MAC 地址 + +在介绍 ARP 协议之前,有必要介绍一下 MAC 地址。 + +MAC 地址的全称是 **媒体访问控制地址(Media Access Control Address)**。如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。 + +![路由器的背面就会注明 MAC 位址](./images/arp/2008410143049281.png) + +可以理解为,MAC 地址是一个网络设备真正的身份证号,IP 地址只是一种不重复的定位方式(比如说住在某省某市某街道的张三,这种逻辑定位是 IP 地址,他的身份证号才是他的 MAC 地址),也可以理解为 MAC 地址是身份证号,IP 地址是邮政地址。MAC 地址也有一些别称,如 LAN 地址、物理地址、以太网地址等。 + +> 还有一点要知道的是,不仅仅是网络资源才有 IP 地址,网络设备也有 IP 地址,比如路由器。但从结构上说,路由器等网络设备的作用是组成一个网络,而且通常是内网,所以它们使用的 IP 地址通常是内网 IP,内网的设备在与内网以外的设备进行通信时,需要用到 NAT 协议。 + +MAC 地址的长度为 6 字节(48 比特),地址空间大小有 280 万亿之多($2^{48}$),MAC 地址由 IEEE 统一管理与分配,理论上,一个网络设备中的网卡上的 MAC 地址是永久的。不同的网卡生产商从 IEEE 那里购买自己的 MAC 地址空间(MAC 的前 24 比特),也就是前 24 比特由 IEEE 统一管理,保证不会重复。而后 24 比特,由各家生产商自己管理,同样保证生产的两块网卡的 MAC 地址不会重复。 + +MAC 地址具有可携带性、永久性,身份证号永久地标识一个人的身份,不论他到哪里都不会改变。而 IP 地址不具有这些性质,当一台设备更换了网络,它的 IP 地址也就可能发生改变,也就是它在互联网中的定位发生了变化。 + +最后,记住,MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址。 + +## ARP 协议工作原理 + +ARP 协议工作时有一个大前提,那就是 **ARP 表**。 + +在一个局域网内,每个网络设备都自己维护了一个 ARP 表,ARP 表记录了某些其他网络设备的 IP 地址-MAC 地址映射关系,该映射关系以 `` 三元组的形式存储。其中,TTL 为该映射关系的生存周期,典型值为 20 分钟,超过该时间,该条目将被丢弃。 + +ARP 的工作原理将分两种场景讨论: + +1. **同一局域网内的 MAC 寻址**; +2. **从一个局域网到另一个局域网中的网络设备的寻址**。 + +### 同一局域网内的 MAC 寻址 + +假设当前有如下场景:IP 地址为`137.196.7.23`的主机 A,想要给同一局域网内的 IP 地址为`137.196.7.14`主机 B,发送 IP 数据报文。 + +> 再次强调,当主机发送 IP 数据报文时(网络层),仅知道目的地的 IP 地址,并不清楚目的地的 MAC 地址,而 ARP 协议就是解决这一问题的。 + +为了达成这一目标,主机 A 将不得不通过 ARP 协议来获取主机 B 的 MAC 地址,并将 IP 报文封装成链路层帧,发送到下一跳上。在该局域网内,关于此将按照时间顺序,依次发生如下事件: + +1. 主机 A 检索自己的 ARP 表,发现 ARP 表中并无主机 B 的 IP 地址对应的映射条目,也就无从知道主机 B 的 MAC 地址。 + +2. 主机 A 将构造一个 ARP 查询分组,并将其广播到所在的局域网中。 + + ARP 分组是一种特殊报文,ARP 分组有两类,一种是查询分组,另一种是响应分组,它们具有相同的格式,均包含了发送和接收的 IP 地址、发送和接收的 MAC 地址。当然了,查询分组中,发送的 IP 地址,即为主机 A 的 IP 地址,接收的 IP 地址即为主机 B 的 IP 地址,发送的 MAC 地址也是主机 A 的 MAC 地址,但接收的 MAC 地址绝不会是主机 B 的 MAC 地址(因为这正是我们要问询的!),而是一个特殊值——`FF-FF-FF-FF-FF-FF`,之前说过,该 MAC 地址是广播地址,也就是说,查询分组将广播给该局域网内的所有设备。 + +3. 主机 A 构造的查询分组将在该局域网内广播,理论上,每一个设备都会收到该分组,并检查查询分组的接收 IP 地址是否为自己的 IP 地址,如果是,说明查询分组已经到达了主机 B,否则,该查询分组对当前设备无效,丢弃之。 + +4. 主机 B 收到了查询分组之后,验证是对自己的问询,接着构造一个 ARP 响应分组,该分组的目的地只有一个——主机 A,发送给主机 A。同时,主机 B 提取查询分组中的 IP 地址和 MAC 地址信息,在自己的 ARP 表中构造一条主机 A 的 IP-MAC 映射记录。 + + ARP 响应分组具有和 ARP 查询分组相同的构造,不同的是,发送和接受的 IP 地址恰恰相反,发送的 MAC 地址为发送者本身,目标 MAC 地址为查询分组的发送者,也就是说,ARP 响应分组只有一个目的地,而非广播。 + +5. 主机 A 终将收到主机 B 的响应分组,提取出该分组中的 IP 地址和 MAC 地址后,构造映射信息,加入到自己的 ARP 表中。 + +![](./images/arp/arp_same_lan.png) + +在整个过程中,有几点需要补充说明的是: + +1. 主机 A 想要给主机 B 发送 IP 数据报,如果主机 B 的 IP-MAC 映射信息已经存在于主机 A 的 ARP 表中,那么主机 A 无需广播,只需提取 MAC 地址并构造链路层帧发送即可。 +2. ARP 表中的映射信息是有生存周期的,典型值为 20 分钟。 +3. 目标主机接收到了问询主机构造的问询报文后,将先把问询主机的 IP-MAC 映射存进自己的 ARP 表中,这样才能获取到响应的目标 MAC 地址,顺利的发送响应分组。 + +总结来说,ARP 协议是一个**广播问询,单播响应**协议。 + +### 不同局域网内的 MAC 寻址 + +更复杂的情况是,发送主机 A 和接收主机 B 不在同一个子网中,假设一个一般场景,两台主机所在的子网由一台路由器联通。这里需要注意的是,一般情况下,我们说网络设备都有一个 IP 地址和一个 MAC 地址,这里说的网络设备,更严谨的说法应该是一个接口。路由器作为互联设备,具有多个接口,每个接口同样也应该具备不重复的 IP 地址和 MAC 地址。因此,在讨论 ARP 表时,路由器的多个接口都个各自维护一个 ARP 表,而非一个路由器只维护一个 ARP 表。 + +接下来,回顾同一子网内的 MAC 寻址,如果主机 A 发送一个广播问询分组,那么 A 所在子网内的所有设备(接口)都将不会捕获该分组,因为该分组的目的 IP 地址在另一个子网中,本子网内不会有设备成功接收。那么,主机 A 应该发送怎样的查询分组呢?整个过程按照时间顺序发生的事件如下: + +1. 主机 A 查询 ARP 表,期望寻找到目标路由器的本子网接口的 MAC 地址。 + + 目标路由器指的是,根据目的主机 B 的 IP 地址,分析出 B 所在的子网,能够把报文转发到 B 所在子网的那个路由器。 + +2. 主机 A 未能找到目标路由器的本子网接口的 MAC 地址,将采用 ARP 协议,问询到该 MAC 地址,由于目标接口与主机 A 在同一个子网内,该过程与同一局域网内的 MAC 寻址相同。 + +3. 主机 A 获取到目标接口的 MAC 地址,先构造 IP 数据报,其中源 IP 是 A 的 IP 地址,目的 IP 地址是 B 的 IP 地址,再构造链路层帧,其中源 MAC 地址是 A 的 MAC 地址,目的 MAC 地址是**本子网内与路由器连接的接口的 MAC 地址**。主机 A 将把这个链路层帧,以单播的方式,发送给目标接口。 + +4. 目标接口接收到了主机 A 发过来的链路层帧,解析,根据目的 IP 地址,查询转发表,将该 IP 数据报转发到与主机 B 所在子网相连的接口上。 + + 到此,该帧已经从主机 A 所在的子网,转移到了主机 B 所在的子网了。 + +5. 路由器接口查询 ARP 表,期望寻找到主机 B 的 MAC 地址。 + +6. 路由器接口如未能找到主机 B 的 MAC 地址,将采用 ARP 协议,广播问询,单播响应,获取到主机 B 的 MAC 地址。 + +7. 路由器接口将对 IP 数据报重新封装成链路层帧,目标 MAC 地址为主机 B 的 MAC 地址,单播发送,直到目的地。 + +![](./images/arp/arp_different_lan.png) \ No newline at end of file diff --git a/docs/cs-basics/network/images/arp/2008410143049281.png b/docs/cs-basics/network/images/arp/2008410143049281.png new file mode 100644 index 0000000000000000000000000000000000000000..759fb441f6cce4a4cafe638a7868b7ccc46aab4f GIT binary patch literal 22708 zcmb5V19%=^*DpM=ZM3m%+qTizX49lmW81cEHMZHdQ3?5|NvZk%e;@Dt02(Z?2TlV4h6aG6fkB{wy$=F}000gS@wdAFeSm>OKte&o zz=E{+VE=Xew-Wf5_I(XNga8A;Q6W%4sz>P~Ueln4I^08QAOs{cLxPF;14&^1gZ_(< z&_G_V2|k1}CM38dz!F$TZjaG5U8{WXD;E58x*ZG=6Mz*a29-|=1qpyF1H$kjVVD3q zFpC(dj0y#&EDZo~02q~)`@Irl>qokU)a-Lsar6LTYSaMebp% zE;D!Qb0f`H%bc!-S^*ljo`D&CPq`ni&IW|Gx%Sy59U(r2O2PxNCo5x7B;kNM3jhz~ z5u*aI08+u0Nwvjgigcd2q;rHTu{Y~;sbCM@LM%d6W7qLQ;kFRTLe23)x8)G8w-uTmZ=jk^4#)i|wyD3XPPJEAc+Znb~_KR|1@X@-Ojl_@8=57;+ zXp|x`;Qr~xNga3e;qW8o3e55g=p^}oE&{Va@>i`7K5V5Qada%bW=f@cd__tPW=iuK z2dzEy9~(<-Nxl~5bhWk$`q7y`UYv(iE4D9jo#8Ea^L*u_Z*Mf~(OBS40AN%&oV!!L zp*P!IP_}@x2cM>y#L-l%WLXd#>?_nehjMsxb2RdpT`8C?mrAg;bD(dzmPdHgKG*R6 z)>7mbY_Q}zR)}dF&9rMR#VLS-V63ic3ir1|Vn{2g=Bjoml(x5x;Y}+#ssdA~x3x2C z3|u;`;Y8D3A)KLQMI<90#5Xj?Co5%@H>F-$?mgZ&vODN!J%f~VA^UrGxu4)qM?#mi z0RR?E7+L}nj2f1`MmR%6ST+CvFhq&{vHXF6I80Q)A3RPNo7i6%@FwpmkLfX92<518 z0sL*iA(R1Be18A{btnJ~+Gg1;dJqzD$cU5nhXfaf1P4$<#Kqus=9lFw+MDj>@2{NK zC!ep6nx};=6iAb*P@&q&#PlNX9635Bg@vnZlZ+c+0Z6Tplbg>E!kB=7ab++yH~sjFh>8pD4~`1}{-A-$ntgKn=OfY5og;&G+L+1}n^r&`yS<}yV;ztCc@#z}pZXGR zac~iW%M{O7GhRa>k@OEfXcLhuG}b3++s-jtmMb%p=e!5SmGFVeYiuDD6L^7!akMs~ ztfOhBmQDaTfO-1u&d=CViKT`x))C9dpYvlY$7lRIl8m5b8Cm(J6%4&ejd9{3@(B3> z!c-xPk?-S;zS`zPwn_K*@{VmIj%?@0NA76}#PO7*E`#x`>Ce9A-mC1hrt|95uRF zW15jPuZDG;Z)+B$IO+3i_krzU3``}$JH#`|W}3gpppkcI#kx5HFQ}ee7ps<2jotMZ z{T0QKM2f!q2mVU^-;YLiZP{cM~o>c~A6lR3(?@tGS)<$s9 z0tLweyZ6BsfV3<+)`}|vClr^46&4q!!H}2~Q4S)d?6_;sm7X!&{?N5jimau-nYU<` z1R8OGzjzRQuNbkkC@ySJq761HtFSxzm<}3Z*es+yF&JEY895xH5ivRdQ*>PG7_()+ z5K2|^S#uYQ@g~dK0#aOjiUCc946!aRVQ`!!46#W<;*e5CKGCWXcRYc-qM+Qu3^x$0 zc&J=Wg;LoJzodo!M@EC> zZALd6B*98VBV}=xU6z-W)s$R|B(Fk%mkUFuMa#+vX_cAg=(N!r{pP^-7;mU>Rr4^|Jk)UIFAiTG(=JDTre?YAtHfwG$Ah=k zB@8w*QIg6;%tFq=3OCS-bBGU;#7D}O2Z@)(qtDl)Qd;H-$D@lw+h#09on+llO=du9 zLc34PT)e(G9G!n+I~_?|CJoH@&x3?x@CTR0H-(HxC(b7aQx1nUGmg(oB0+>C@dpP7 z18o2ROh_;^w-rBL&-4?3(D%t}xjh9!nHYC00l&eTvjJTqVNJd%-pi*28=an9!Jb?? zW0ce^IR!n0r3@BbSqvA^G^rFAT`Y!Xh5+rgI8gyGNH7R+NGJ#hNN@;H2LK1aARy79 z&@fOjp|P+@h)G%4*vVKqm_^0NDTGBh#g$czK>ILQ(B=&c7ECv%Q%&Is_SM?!bwSBFwzF~7)x2^q`<@tx|;&WTM<(AayY9>8h!<1w}Hc=JzX~K!d3QfbdVBvk&3~rv%z1YSz>!25OFMo&@{~v9Q6E^V+Rkf^) z6TI-bD^A_5gzxmfyYL+RfykOP$bD1HxZv9NT*#!M!hDEm88JGj+JE*aK@Fh^oCCCL z2~9o!%mzqohA|7fEZ`MKSq2w(vIwgp8?i1{h_&gQ?l=xNFANJ!HaO%EzPK_-T~nU! zZjZ++Jt7G$efGYVvGp4s&6}P646Z?$rcS?1rMq(Lav%D0I9=`?NCI!I5cr@32N|er z^1)PkXKU~y!3$e0%9}ZO*L$p@FjAw!&Lfa>2FcC=ma+sh7trQaU1l@&xa2F&3i5MZp07D(&0~CLth!QOY&WPUJUT{4|{$lTH z2uTj3<%UCN%aHt9cJ5ZFcd?q!Y>*r(+-DigG)A&zN7ER6OpO1dCqoXx5YSJkQ zFiKlXVwq&5oi=(rt0P~F9o`yd+r9&%CCKl9R9W+fn#CMq=HsP|x{zG8Isy-pdD5M* z!-!gQJ=I`|LWv*-dR=NRA$oiRuPa#y-!5jG0mIW6yW!uXX( zQJ-j~G$pF1D!^X$A*dItk~ZRrl?*y{U9Hi%juHHTElkDL3h*83$zgu8t;sHb1h=cQ z?Ybs3V1L;RDzbVNJ%SX%`s(}H)JRAb{Q-|IV@xkR;7f}5mvro+6^)nLFTPsp?m8#0 zg=acgALPp>NTRk#60{Wslbc_dC5AmYVjk%!e$&W7s`-`Q;nFUCre0hr{-}6lAXBoy zE&Eo1y&D9f-uhv}r~Z_;NZmA!V!@rc+Qc-crj$@OYq>b%Ue#Je?Kn~M%3cEm;o4|*D=As1ho zjoR^0(udjGh7DAkf>g_|Mi}6)>uu_uk~HyGMKz^&zI*VotXNHGg?2<3dnem2rO@^m zE6Nb(NH^p1O^7Rh@~0Cp!%spY-}FKHz5M)n;Hfs!ysqqOt zC&ypp{d8#B4MQpPE#{33>2?zqdaSD{6XvZ7-*PtK|Evm|? z5kBt4oyOd&Xf?K%J?(*xW(>iZXcBNY_9pbK+-RJb*<;q~-dVlraPFxw=xvn(UWXM{ z1!e?l2KZi0(t3~}VFD5&2LCP49tb}uEJ7X{vXXz&{B)dK8X~w9lkpDR3XrBEtv-=q z`^bW2vh(DqD00=dgZmt|g~S=0UF@*E6;61ldba#iA{$qO2?; zn`W3|oRo!rk(0|Gj!!qn=Y$LEUPVF8D32${$U2oukS=G5KdMp3;ByYL|5z0^emJ#! z2b7d+AX~ip4@OD^4$C$#%fo3===yIzG<0ggEwxW7Qj@|d@@3c0u-}|v1=yIAyTxed z(4jzJij~KoF37h}f_DYj-cV?K$7YOu04=)pLQ05V%b!8h-xX=bA<$CNZ!#hy? z4#*NUjlS(t+shbySL)6@3%MAGh!U}N zL3212fjSgnmQzx(vLU>Ff>RvqIhs$Sy)WWJ67H&z$ zAK&VxQ(ur_XJS6Z7bPDM9=SFAgi*>G>ozzW37_d1yxNmnR4B+lBr8E9NzW&{M}ane zG~I78=Pi50k-bG}bwrG@ofa)ac6aM1DYF@Q7*-@yMj-hEZGbG@zK?b%*-5sILLa@1 zNfZAD;n#zfpNh1uTaCk^Nx(qA%7iG7mqt3ZE+GX$v#_>$;#`XK0gb(C23OR}S$S8R z&QK|X;6&sor!}O$DZ%L+0x)KgR9HX6f$QRwRHi^Y>N+Mm>ErS}6@xj~T?rA>Qk0=S zXVIl!MGVz>5Nx)mD)*M^6g04flu+LR(y>JU#Kv|647*)isSAEI<3MWvb(6j5dTj)Z z1nS;x7iaW!w~N7bAynqQAaMd?VhsE6y{Poy8;h?C0|bAZEeLfAqC>IwVCZwfMu=j) zwOIx)u`k z7IZv2Y<{vYZJkzjFKB%&sd-T_c+BX$hI7BMM6x=qwo=t*9N?T@a0d@G2|4Jo?guT{!-`gjbk!6~t z-z;Z8$;CvI$|!hYX4n-Sf$=yzx`8zIbG6Gv1Ptkiaj(zDUN{`dQ|7KZ`pa7XcYqb% zs~>*VbKdQ~)$votv#4`k#afdh%*;^9*h?b$5L+v8)lkLUOCtCXqn5g^tDyfj5@FoZ zP>uICd?iV-tHk_}jfp1ROTKd4%uv~OT*gbSmex>x^uEDy4N+7Tj0y2;`t#?|C+t&p z{&qFc49RL;0uEVz{uD ziQcu3q4Yql z{mrNKO_$fse4kKv+nXY#8?{&JFG_4fEps-mX?$I}LBrEmk42+8NKZMR1H7`MWaK=I zgT^vmuPkP^XExI4xT>ULm^ZUBsu_V^9P%6@=5I3x?N|Q*PERyb1G^t-jNTUqc_`Yl(^X2MTT%-aD?BE}oH%tLW zKbzVYEWfq$mp+*0GMvZJ(ie1+?G*KQAf2{lt2fWlI==C`qiSZ5mYFg+Deun$4P@tl zBIW%c8rb#ZY8;uD-ep zqI^-wrX*N|H~bRyQ%Z2moy0Q6zfa!~1sH~J?S|Gdnb2~rpG6n4;YznNcvS~gMoT@C z^V7^Yk8O=M(8i%yB$SVGurs)iVz{7(soRO0u{dK9AknTCM?cF>MjPU;;fhkm-j(o4~jNQ&fBlUFj2{F8xviAI?4pC(UX7pC7$-u6)tw9d+f$?slY@B zwGZfbNM*9>IUTrgsElWFH(U0fL}s>eEH>IUSV%pLTq#XLebL4T9KkMb;$lgV^$0j; zMjD*sd+{+jUovW34imY@~6NL#OthYq=oT+F0+L4IL(? zRx)e3+>Z{reyn6lcdbbrHPmt>dlgMgQ5jkrdld&Cd1$5UD3z_b;rR^O4iK66=8(Q# zEBvv4RJ_>Mr1UEt>2%-BtvP4e%q$UWInB;)H6cN9IYe4bl!koaqP7eiYh85+`$6D| zfo{LnWW0S)heyo3O$@Z;$ogqm4#^aXwqW&$(VQi1#7jB3o*JwfV*k;?| zh}n(oUX)C)jqk_ZwLz8ooBp`v17;CAj^_A2`BYhiL^r+ZAj11=Jy z^rJ9Pg(p?{);`AkbKI(zfn)TRfQJe{3cWMNxBj&lPdd|xfX{oElX0?-34yImdo?|{$cbZw@omFm&OaaSNA`AvqdNij@TA62 zX+3#KX%gShr4W@gRye(k-^1eDSHffI`8|_xp_vqL^*s0WKgnq&<0BtReDiURgb^qDmHI|L|v+;0JA@EA3drr~&sxx84eFJ;F zW+yF8{f?Q9(N#Zq82JW|ujP`xldo-3DdURVM2V#&ZA%67b|SH~PS2aa0g>@MZL?Lv zMAK8)h36$|0fT-rMEsDeVZ85KgGsKB8s?RrpsQWsSYLxrxuSSM8r6sXUP88CU{GmC zUjr8{SdqeV*7+|e8*Z?AZhQ49VU^BJSn~93Eg`QrH5xgWR@|bL(T{c+t%6TN7 zjE)6)dgP#cu3kuWHe!WISvn^v%4-*cQQ^=8ch60dwKZxZr4sKZTtTHLu3DlbwnfFQ z!aSv4z_y&p+<=jIlTP>N_?Te$9;UBmmso<6KRQ$5c+*dh(pwCllsXo8D^7Q2uee57 zM}kvb8F(_qoK_{i)a-0JewRceDj3xHWghAHUCx|2?E2V?#bC4b9VnVxbu=I0eA~y& zLZ&uJ_D|o!BYJGYK!a=kR zV_6L$K^^+tw}Q%Q)t4xV*cQNza4~%Y(eu;)vf*>z_J**yz80Zv40}IA&m^!d53y;2 zV62C{PKj!{=~H?5iFPyPqSd@()A8mXYkp`MWU~iQpU<$EeoV~gmt0u?%~58u=lb@| zeKlngWPj7^FhfrO3b+n!h59NbAq=UIa)BRK?7=Vd6f}FrDpnL!8!qV>=Nm50N=h|6 z+_fx0EY(`aBl$m=t$|1L3W&`zu0gH$c7E1^qzj}NK;I2_mi(J*4fhHzJ(v*!*k3b$ zGIIyy(G>=HbRobXVW6NPq5kF31wAoG1G#ibSWrb&RE^^kFi2UQ^NB^(0t)KMm=pWh zgiYqI#atS8m2Zp+=l{#M3nv67)l}KGWL{LYD4>xMTG24~ps6cZF(I|2V^zsOq+woA zm86jn(V(I!%Rdg{y!_+!b4MC6sjBt!XPUeQvLkZk+U4$8CdG>y5xKhcYUi4?Uu}kz zsDzOBcjV*QS8mqN+maFK`HL=|*A$XU9vu%2(n~gvUwrXvHjFQr0l>k&OCAT9l`Q?DdChlS9kdoi_ROB znV}3zt-o9`^lSLebm{FTo%j3bV<|7IOwHyHj%KXp$lybx|hJ2?qGWd4i=Evem%&^C~nC(Q&urBuv$E}38WnT|s+ zS)n`Yv%6W<;cCY=D)$-uc{c8}h>ATW`z{1}A>sa~ zJ4rP3GevM&BUjdtE?OqrX7ndToOA5<4aQRN`M1T_C0;EB(e=KzJBb>rGE17Lf}<^8 zJ6y?W>y@kpE|jjCg-X?UV+hKNTg@-VZNE0tZx^~YiD0eQu&<(rI@}y<;5#L5Sm5)% zp7|RWhD7fczV?|)OkwF+SKdwOG`4jGf`s_WZ~WDOjX2u^pBXXI zvS*NYE#$_dWpw2X>i=a27aa3LgLU>Dfa6`F;;0$Tw)r--OBOcYf7CcAS!*U2BTR|? zAz0^3Dgjlppsanz7EIOCx)Zm;p`GQ6Kn4~u$Rz+(YWyhkKQ$aA2dezcEjR<_%(wxG0cyaag?r%z6Q);{U2`Uo+z7kMEPR%wmXGo0Vl}E>}x<0-UEG zdnN|_P{1|XmrG#8GKb*2tqsfml$wk#cl^xwW#E!K~rq?JlBYnE!9!__KrKzdm%5^9ypy#!&hMB=id@@45N!uQIy<#=2YwlgyMSAE)OwUPY`xY8byo1utzll}Tzx+OS@nQiZi)h=Buz zhCiNH&D&Y2)#fF^)ZBGQhUZUbb<*qbY{c)MC2c}X_zf4Jq*vlKEgtCDz9a)boZQA6 zTg%nZ1r~cZNU5a0X4YtWJkT0%mMn>M@8X?URSq6iRqdP(db4}$nn@*mXLR5DRcd(k zi=<=m@lWxsJFz(GS(a>OtMCxVuzU+DqrJYb&AobB@RyfQ-hu8OyeULMJ~GWhxMJj! zWCk%M#1WP-j9ZBl#kHmf!~NxpR)`%d^|L#*osI8+%2V>IC$C(LT=&=R`MHGL0W-YW zwbXL6BU^O`m6CZ#3yrH;%}eOXg-fomH(WP%tS^7K#<(SHDS@fc0j}bveY)xuxT1FU?`glhg*^}P&}8b=k?4i+(j9MB@TqegogqT z5YAJk{tsX+e5*kHQTn4yG5f6of1(ok!r1>en9uN{OoF%mcUG;Lg-(<~pl5b}U#bv+ z6iO|*;I2?SD(}oFy0S@Z2f?bCKyuH(`pzmkf{y;b0a-_X!^gU+&?-8TbNJCO|0!JM zRXLo2;sP7^%0SosJE-qW)8x8?AHFiy-khW(Xb(2^W3Gxh!eC5EBR<)}=YpvdAw&a^ zDhHmZ1}S(+G_2`ZE{(GNb4O`976jBVzN&#pLz^Ve%!77YMxz_P`b5J~wBi{{Z?p+0$2fwr zWL%JtsZcQpFzVrua3Pl`jf6#7!+$0BKK)YDgRq){#c@M7z+aF!z4;(B#^AD^3i>ePY{$Cjn zWov@17l>Iw6^P(Ru*!*_{=2%ijqC7bvQj*zR6 zY6%?UXkc(j6s)@Y%;k~AumSJ{ZsN((T(-pslg?@KNcisnoeeq9w>His84eh~faS;+ zY__I7QEOWd3|>J3-!&Wkl72mTgUkcpvG0-UAspWqD?Fkr8M@Js6^-n7KJe_h`N7RF zc&$km8#Gxr+1ib1ym-vxikT?dENtOEI+6Y9RO_T#^hfs8DAN_|qA0-f=rIH<^hER^ z!=lZ)>)=Rw>6`2tA^cqteNlnVILt#^l9@(@WV3iRPt^kkrS@vW&C{h(*vg>~=76es zs`pK4ke4eYx-Y-is{nTQ^=;`R@s)J=Pt)TJ;!SG@?$IA=_|r)Ee=F`R+W&Da0<3|mHAn%J+*2ir%fu8O*$v*|7s9G z;UdD{@KOizWvDvtMC$rh&??=Ro65j7OS~d6M4EfR>082dq0^m$b3hsbxW`WL)^#@& z3{UJ)9}mKCCqkIiZvKFSpJS;y zszg|fYUR+z&Kjm|)G*v-b5Yomt)U+c6fNuBOsi;EKA7JV*1&hKC@|Qgl%Z{E@A-Js zr-AG+MqB(C>po3R8`X)1S^?`Agf36ECh%t#eE1|<2=(t6g$^J$3ksUWfV70m>$kc( z>_b#+TBVjZ&y!X_RrU`mfyE<;xY=Mx%l#81XR^+)<DlM3Z~4eBqnNdj21A0w(!Bs4<{D#hY7tX$x$kww(=M`@e9 zXp{c)*G@Hms#H8*QRfAvPur)7fZcu&O)wz2GrPAwf~&-6Wq+aOy<%n(lxoYUaFcec zx*iLzCNYb3-t(}ruyKv7I7t~fg^^W)e6yYbxd{O$-?`bvqMqN346R0X9AUpu4;L*v z@leUMT=iYI;g8M#0T-*jt2X=rT|mdQSTzgtK+E2tfp0(?&6q5iDqAR5tXe#uEo_Lf zqm)0JE0(XG|7=r?vY=u0mQgL0uUYtP)6KM?8S$y48uJ}c(4~3HXj=HgVQqO@sphAk zoB3?BD5RhpdRqBu7OVCIe%Vi+PUi%E@yfrN=@foWElx9a24dYPbCw^fh@^3=F-Kn& z@64*ebZ1g2jx$}Lw?DOa_LbEyp;NmqjAI9Uf>`vRY?sgZ-}K1G15KP* zYmRaGpomCYyuH6&7O=i;Z$g_POLP6U_s|_viTV@Ri9CZst`}sp7Zxwi$4G((TqvT> zyHf?wXC=P!82=IX9ecZTcUHDNn}+m>@*Qwj-l9)`qAk%w8?6ZK z_ubW?)Qc@ByR<&+=Xkw;6)XH~wSmuZQ2G%cC6xUlUg|^GUJUh~%dD943N-X)FW)toIggGUnX#x zg4UaL$$?)8?%&O?@qQu1{$RSJsPh}G4HDdSL}}Rayy(H-eFwNmezsnPK3l#~6X9Il zqjY5`#l59eIQC_7(>nf?tbtPX3p(4wqDpg^p^*7KT`Y5hADY3692@55h(wS9Ex|L3 zxGBn_&>Jm{6VgI@K{qrac!nR9{KagPhwcb0PSQ}OZ3{n6R3H((V&PQ7`o5y+Swr_L zZM9&sX0B|dQn5zq{6C7@e{@f@f7L$8nj$;F`z(P)at+97aNS3eT_|HJT{KZgWSFyz zGh1#BC@m2p_glu(%S)o!>qYG&>NZ;9oMtUxj>zx?B2A7HnK10jkLER9jK2bKE8HM# zdd|)8qHg5#p@N4`cx2m%aAhw-t@cLzH^P+imIbSOStHH5Ik?t4hOxU^t8}#`zGwuI z{DVy+@!Umc^*(Eb3RJ*?M;4TI0fEH)F=4Up3A8~QlS!`p8f@R%OhOHmZs|aEv1aM& ztXn!dv*vO`@I}@tMBrx>C+3UBDc#OG7)zp#rWD?Mu1s_|NilJg77i4ITFB%2OSDZE zG86AE&t$1LlEmJEi=PHrR1VSmzvga`LB@xxr0`x51a1`pm5#&~dToNXC8i>=xGd9E znM&K}33Vs1l~w}?Ko%A(HUOGQZjw+LGzVU{+qpwfoOt$wi1DTL;; zh0@h9(4tbpu8%j|(7pC655*HIk_d-+vcKb(X0cOKw4U0x@@?C#lc6Hwlb$DI2gE)8 zdroQj2b!K@w#Aa?q;1voGq-<@*ms~$&BIc)_9FG+@X%v-3 zHU%H18>Wf`+LI#~8c}i=yN}SeNR)<*cipt{r*AdCF7k2^z^WBxjUl}CiZSJ((igh0 zhe81Qt~o)M>`I3wB|=y2;m?DG$6He}FoL(9xtNwn<$pFK1sbcJm$Ntd)ft4r&HYZL zJTQ7>wlJE}kk>Ov@rkJ{PL+trC1Lj#CAnuF72*2OQU+Zlh!U*PnsMP`2xXbExFi?d z)EM3NhdA-@K49LB-vrAWtUwVib44-O#3KqmX5SRGH zM_JTftAh55f2Af9vD-kGRcuP$_CD(lBPB!mqO#z zQpYerTUf(1wSl)eXEmI9wf%dA!2l@qQmq8%DfzPz$bGiEAepDazVcxXlTyT&2||~o zOFfk#Q@37x^7?cj2x`|VO~*io-#l;ULm;WhFuU=V5@pJAY{yVW3eXAlJLp?r+39af z#kc60ZQ(36CxtKtN;U=F1@~UK5Lvr`bot3)>vYQq2P6fB3EeFOo}f)V4U%Iz0sYy8 zos7)Q5v20)G_R6xynVvFYI-r+rQ(4yigD&5u%9JiIer{vra%EAE6rd;kD(buD}@vg zLFPkXX!Urgriim)JE6f}Q}E6{nTPPP3Qv#flqAZ$a4^WU2HZfx@{zzXOcFbxd7wrs zAoQ1hq=RVv0kO6{_ZB}QW{D*?St7|DEXz^BW1B43A%0YDRz8eD!NxBIrO0tqKD5hI z0xJr?g-<{=hUgP_uh7pHw0aBIW*@W~buIkVZzmEZY7Bg##CV}hgn{hOFxA3b?V{j9 zHyvZcK@2p8Hiigv5VS5YG8ma+6*rAAyHE&LQs43K{nsC%ogXqd7ee)c7=;0_f)JnF zt98+8w_3$3k0Ui#_{r`LYtYxAB5BI-ku0(a4u(0?H?~rDQTH+fJ+GytB0T5!;)6)!WY3NCXnx>L87Wk}JW~i`M?2yfL9@I$0*0Hd-*QOzjjt zSkS*r^#p!KE{{%t(ZA}x1H2I=PJu)YkhlmE=l^%@|A>Fn{Y|d+H;5}+IEDY4XJfId zr7Wljg>2ePp1%dQf(rhpbjlc+!UU^>z>g~+7a=Vw$R!B+hyV)e?}s*^cRoSi455** zh^QFfpgIT4T@%OW*Z1u*3oHNoMNc8r)biht6H4I!=ds`PdG=4fcL3z)c?Z59kl>DVU%BQ=39#Sa`RaV9Ur({05U{bG z;yB81Rq!gU$mu+(@grDyNPh=18;A%WCw_{jv_xt;z5}U#62G_qKxay~Y_z#@g#IFd zB3zR)MA(1sqC2lGU3ru10ltiPBQ40WBwqQQIk#OQ3p%}0e9^TU37p}F4vlJMab8w_ z2vO2sH0VhP2!OocPh%CQrYm{CPD*2qDNU*%S1Wl^!M4yqgmH&HkrEI z{hi|rF~q84A3zbskeQ)JVo^9LF%l{mnH1HqLVo5uD$-Jxk1N>q5nutNWSrgs7RU#9 zc*Kv8CWB~)Adv%7RrEB8fvF+YTFM|IrV>g9IaUI8KnM^fQTGl=%`H?!mkCD*(MO|IE&`s0lM+(d+qw*652Rq$YPfhM28a1jt!#f;MG#zmv4((84NnZ&MQN)1g7 zV-FnEAPT`<3cr66^=M~p@+pxy08w_$3FYJgPanmig7RtYllY^ud_H3OsgN^MDMCR%8r%FgtZ4%h`kGSPF zKk`;`ejwv1mUW}W(@I$?Wi^1B4d#izLiX=;i7^4gh%{3ePd=QY2#?mS@(VkP!Pn^W z4LuLv9nRod*#C(`c#>AraPB_T>>D{X{_`1spwrS%;^RjiosEWMNxbHY4a6c2Jwupg zSIg_^t7x_#GD9XiBlf@J)D-hOIJ1c}voKoI?~7bfIosnQ)B|;N!Ob|zrE5G;H7k18 z_M52d}B;ot**K#tdG#r(?lYKP^f z-`M;K+ujU=s=2^gOp_PLYqp529Lva{`5Srw$|5VRqGDF3sv+(Vta*DG84HAmSSLO2 zeu=J$g3H~HBA$qcr?i+>X;_4l{_PIfX6>vbxtY_2u8MC`=8Y;d*s$D{*U7Yf2+9`qRT zf?~qrzkVzA^1r8Q7g4m?yvN|B%sNI3m7NqVs{>I5u5roATTc3Mgx9hZ`%0AYb4!?Y zNnQYl-K9o2&1ew6ItqHyhx$p8LT+sQp6?0=&?!HXR;YjTfGgLa5;E?I266O;Do~JH zeEzJq1BZpiU=$B~)hCr$h1E;k;We zV`A}>TQ=21(W#&TmD24guV1Rn!fS_ODo82Bn3(_M7E1<-B}$c<2gT-sV*MBsOF>D9 zCW=np3`ibU;D>Ize`hes+;#OtoLvWobVVZ|0`!T94TmfCh{Yl>_-mU_A{xlOuaeE+ zFSw;zT()TtW*se>{`^p~o(8hLai3joNM`#6y<|fXtY;+J!;nBTfVK1)CD>ojY!i%-z(EQup=35ZWYI}6ZtGW z5HD8O*%~b^MqV#2SJxX`Ege9}Z+dz&yOZedu9eC`aWg#0lm@w|6C!b_7Uf6m`02ft zez;_V@*)&7?dD1nJYQH>T@{MXq8et9HAPQIyn=AK;CbZH1izL|q_kDBhtycToLSu@ z{S+CVgn7kUUow8V++7wzw79bp=L6<+P#I<>MMW-;b|~QLvuDxgRT$UAF6d1AyTbUC z8H<2hRF}X@_Z=9pO!~9E@w$D*DHFGB(K8@`YoQ1e4^P9=w)LuJv}UxM<2smT3kT~uo58DP_b<8JodOU|;N!`^*K*;;_5X~%GUiITO9#O*R;yLnXgzGd zG7ax#(Y*syjx;atK>O48jS7;E)J&}s3o&qrs05UN96kF?l36TG7PuS29Hd?$@LZNZ zTpzDJiFd_4j2hEg9G^^ahRV#iS_MdUiaZ!1cWzp+4k0@V&dkbqid_wZ(d=rjQzLmf z`!6!(?c^5G>Iu^7?n?w&-9HuUwn?d|4zjP|PFS343iRww<)F{3x5 znjSAdfVnUyG%GgWrbH?5*P`g%>xeUOLKy5L$47byQ&0&H z&8;do?!y!HFTA4xkXk0+e-C2W7 zu6m+2Ualxo9Xp0+CP^tsDN89ytX}l!a||j=`8tvHk6i1lDD|YiQbrBJhEJ01NU{iy zWO2i=NYtQbzb5-Z6*(@IQ)MmX&X~pgY&_sqIuj~i|Fo{L#kF>AOa2z?PWZ_*Zjw~2 z$Z(yC>+#?UjV(xA-*3$lLSuX>{h-~PYDI7dp)4h?wAIR^p9MEJs5cp`FIp2y-)|FPRg(3hlIQ9u#x=L9%n zYtyjArVJmVbWUb<=fbR_EfHGz&D4G##$+4JIyJ_uVuLmH5gex?FuDX%uxdKz=AIOD zScA?If(>|p`K#vZP$HE5Rt*UlalLjL08ebiF&Tm?a^nh`mY+S{ex7d6_b`(fo=06Z zZXb6}?3^=i3i2^EkiB*%?huXLq8$8&x%DZ0BDyhLXzebw^;TSZ%>H)Chq5MgC{XI) zEw@$q1~W@>)HA3#`BeaofJ`-;gLY~l!7YhiN5}Uy?exdBp~qWc@J!FFY(L2c6(A_Z zU7qe^po)EirjbPuF5XoDk$n>&2dn$#iyYphreIb<>ei#Cf-trNe?dN=#$B1t70Rc- zzszcLnVPfsH28mz{8Q8u;%^YufHzmE9y^Dg{wij~kpwy$-hrde-jr$0~m$_c6 zH}3$-Pd?8rqT@fuHZRkOhs!=&_rFJejX1y%KWUwDlg?qLLgyE2i=C8*C*Z2!q>(ia zWdy2-9^^|sL?H4uah-xecNA}QG%7%?!fO{P_lrHnfa@j((_So6evu4}31FC_sk)Eu z6#1q>Sl6&76Hn`u=i*sO`rZIJ%?PfS#(fkhKz`*%>+gCE(_<=HGfYM z2*B``2)0H_^6O42w%V?j*hzKRiRyU;4s0`gfX^$mgjYt|Ac4BPYsxB}2^q6(yR-P- zaJ^3rX9KUslWSmtu4cob?=IwTa0w3#dD%p6W!5NbKOhG0u;( zYyJ4fP_wf;Ul|Dorn=UpbMs{?$7vfV|Iz9CtxBU~hsKM(F?a|D-O0aDy_WUf4pk#q zX^?98_Om^@3poO*+&N3E=GzW+o^67nRZ8$b-f;4V4u+o@K_j!{3h1oFLE@xq1pmfq(DeEzp=Tgve&1a

-&f5wBCoaDyLArda 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 \ No newline at end of file diff --git a/docs/cs-basics/network/images/arp/arp_different_lan.png b/docs/cs-basics/network/images/arp/arp_different_lan.png new file mode 100644 index 0000000000000000000000000000000000000000..8cfe44450766ac8be79480527d55217a3d01835e GIT binary patch literal 22352 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≤M{&IvDM+9~)}W;{05mBZ?1XJoMtrV0cJ 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 DNa7{i literal 0 HcmV?d00001 diff --git a/docs/cs-basics/network/other-network-questions.md b/docs/cs-basics/network/other-network-questions.md index f6069788..f170280a 100644 --- a/docs/cs-basics/network/other-network-questions.md +++ b/docs/cs-basics/network/other-network-questions.md @@ -165,13 +165,32 @@ HTTP 是一种不保存状态,即无状态(stateless)协议。也就是说 URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。URL 是一种具体的 URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。 +## ARP + +### 什么是 Mac 地址? + +MAC 地址的全称是 **媒体访问控制地址(Media Access Control Address)**。如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。 + +![路由器的背面就会注明 MAC 位址](./images/arp/2008410143049281.png) + +可以理解为,MAC 地址是一个网络设备真正的身份证号,IP 地址只是一种不重复的定位方式(比如说住在某省某市某街道的张三,这种逻辑定位是 IP 地址,他的身份证号才是他的 MAC 地址),也可以理解为 MAC 地址是身份证号,IP 地址是邮政地址。MAC 地址也有一些别称,如 LAN 地址、物理地址、以太网地址等。 + +> 还有一点要知道的是,不仅仅是网络资源才有 IP 地址,网络设备也有 IP 地址,比如路由器。但从结构上说,路由器等网络设备的作用是组成一个网络,而且通常是内网,所以它们使用的 IP 地址通常是内网 IP,内网的设备在与内网以外的设备进行通信时,需要用到 NAT 协议。 + +MAC 地址的长度为 6 字节(48 比特),地址空间大小有 280 万亿之多($2^{48}$),MAC 地址由 IEEE 统一管理与分配,理论上,一个网络设备中的网卡上的 MAC 地址是永久的。不同的网卡生产商从 IEEE 那里购买自己的 MAC 地址空间(MAC 的前 24 比特),也就是前 24 比特由 IEEE 统一管理,保证不会重复。而后 24 比特,由各家生产商自己管理,同样保证生产的两块网卡的 MAC 地址不会重复。 + +MAC 地址具有可携带性、永久性,身份证号永久地标识一个人的身份,不论他到哪里都不会改变。而 IP 地址不具有这些性质,当一台设备更换了网络,它的 IP 地址也就可能发生改变,也就是它在互联网中的定位发生了变化。 + +最后,记住,MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址。 + +### ARP 协议解决了什么问题地位如何? + +ARP 协议,全称 **地址解析协议(Address Resolution Protocol)**,它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。 + +### ARP 协议的工作原理? + +[ARP 协议详解(网络层)](./arp.md) + ## 复习建议 非常推荐大家看一下 《图解 HTTP》 这本书,这本书页数不多,但是内容很是充实,不管是用来系统的掌握网络方面的一些知识还是说纯粹为了应付面试都有很大帮助。下面的一些文章只是参考。大二学习这门课程的时候,我们使用的教材是 《计算机网络第七版》(谢希仁编著),不推荐大家看这本教材,书非常厚而且知识偏理论,不确定大家能不能心平气和的读完。 - -## 参考 - -* [https://blog.csdn.net/qq_16209077/article/details/52718250](https://blog.csdn.net/qq_16209077/article/details/52718250) -* [https://blog.csdn.net/zixiaomuwu/article/details/60965466](https://blog.csdn.net/zixiaomuwu/article/details/60965466) -* [https://blog.csdn.net/turn\_\_back/article/details/73743641](https://blog.csdn.net/turn__back/article/details/73743641) -* diff --git a/docs/home.md b/docs/home.md index 0ec77a9a..5ba065c3 100644 --- a/docs/home.md +++ b/docs/home.md @@ -155,6 +155,7 @@ JVM 这部分内容主要参考 [JVM 虚拟机规范-Java8 ](https://docs.oracle - [HTTP 常见状态码(应用层)](./cs-basics/network/http-status-codes.md) - [TCP 三次握手和四次挥手(传输层)](./cs-basics/network/tcp-connection-and-disconnection.md) - [TCP 传输可靠性保障(传输层)](./cs-basics/network/tcp-reliability-guarantee.md) +- [ARP 协议详解(网络层)](./cs-basics/network/arp.md) ### 数据结构