服务器相关知识框架介绍
资源内容介绍
服务器相关知识框架 <link href="/image.php?url=https://csdnimg.cn/release/download_crawler_static/css/base.min.css" rel="stylesheet"/><link href="/image.php?url=https://csdnimg.cn/release/download_crawler_static/css/fancy.min.css" rel="stylesheet"/><link href="/image.php?url=https://csdnimg.cn/release/download_crawler_static/89789747/raw.css" rel="stylesheet"/><div id="sidebar" style="display: none"><div id="outline"></div></div><div class="pf w0 h0" data-page-no="1" id="pf1"><div class="pc pc1 w0 h0"><img alt="" class="bi x0 y0 w1 h1" src="/image.php?url=https://csdnimg.cn/release/download_crawler_static/89789747/bg1.jpg"/><div class="c x1 y1 w2 h2"><div class="t m0 x2 h3 y2 ff1 fs0 fc0 sc0 ls0 ws0">Linux<span class="ff2">网络编程<span class="_ _0"> </span></span><span class="fc1"> </span></div><div class="t m0 x2 h4 y3 ff1 fs1 fc0 sc0 ls0 ws0">1.<span class="ff2">网络编程协议概述<span class="_ _1"> </span></span><span class="fc1"> </span></div><div class="t m0 x2 h5 y4 ff1 fs2 fc0 sc0 ls0 ws0">1.1<span class="ff2">协议概述<span class="_ _2"> </span></span><span class="fc1"> </span></div><div class="t m0 x3 h6 y5 ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. <span class="ff4">协议</span>protocol<span class="ff4">:通信双方必须遵守的规则</span></div><div class="t m0 x3 h6 y6 ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. <span class="ff4">协议按层次划分可以分为<span class="ff1">osi7<span class="ff2">层模型</span></span>和<span class="ff1">tcp/ip<span class="ff2">四层模型</span></span></span></div><div class="t m0 x4 h6 y7 ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. osi <span class="ff4">参考模型:</span> 7 <span class="ff4">层(应</span>-<span class="ff4">表</span>-<span class="ff4">会</span>-<span class="ff4">传</span>-<span class="ff4">网</span>-<span class="ff4">数</span>-<span class="ff4">物)</span> <span class="ff4">是由</span> ISO<span class="ff4">(国际标准化组织)</span> <span class="ff4">定义</span> </div><div class="t m0 x5 h6 y8 ff4 fs3 fc0 sc0 ls0 ws0">应用层<span class="ff3"> </span>表示层<span class="ff3"> </span>会话层<span class="ff3"> </span>传输层<span class="ff3"> </span>网络层<span class="ff3"> </span>数据链路层<span class="ff3"> </span>物理层<span class="ff3"> </span></div><div class="t m0 x4 h6 y9 ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. tcp/ip <span class="ff4">模型</span> 4 <span class="ff4">层</span>: ARPA <span class="ff4">在研究</span> APRAnet <span class="ff4">时提出的</span> <span class="ff4">(</span>ARPA<span class="ff4">:</span> <span class="ff4">美国高级研究计划署)</span> </div><div class="t m0 x5 h6 ya ff4 fs3 fc0 sc0 ls0 ws0">应用层<span class="ff3"> </span>传输层<span class="ff3"> </span>网络层<span class="ff3"> </span>网络接口层</div><div class="t m0 x6 h6 yb ff4 fs3 fc0 sc0 ls0 ws0">应用层协议:<span class="ff3">http </span>超文本传输协议、<span class="ff3">ftp </span>文件传输协议、<span class="ff3">telnet </span>远程登录、<span class="ff3">ssh </span>安</div><div class="t m0 x6 h6 yc ff4 fs3 fc0 sc0 ls0 ws0">全外壳协议、<span class="ff3"> smtp</span>简单邮件发送、<span class="ff3">pop3 </span>收邮件等</div><div class="t m0 x6 h6 yd ff4 fs3 fc0 sc0 ls0 ws0">传输层协议:<span class="ff3">tcp </span>传输控制协议、<span class="ff3">udp </span>用户数据包协议等</div><div class="t m0 x7 h6 ye ff3 fs3 fc0 sc0 ls0 ws0">TCP <span class="ff4">协议:</span> <span class="ff4">传输控制协议、面向连接的协议、能保证传输安全可靠、速度慢</span></div><div class="t m0 x7 h6 yf ff3 fs3 fc0 sc0 ls0 ws0">UDP <span class="ff4">协议:</span> <span class="ff4">用户数据包协议、非面向连接、速度快、不可靠</span></div><div class="t m0 x6 h6 y10 ff4 fs3 fc0 sc0 ls0 ws0">网络层协议:<span class="ff3">ip </span>网际互联协议、<span class="ff3"> icmp </span>网络控制消息协议、<span class="ff3"> igmp </span>网络组管理协议</div><div class="t m0 x6 h6 y11 ff4 fs3 fc0 sc0 ls0 ws0">等</div><div class="t m0 x6 h6 y12 ff4 fs3 fc0 sc0 ls0 ws0">网络接口层协议:<span class="ff3">arp </span>地址转换协议、<span class="ff3">rarp </span>反向地址转换协议、<span class="ff3">mpls </span>多协议标签</div><div class="t m0 x6 h6 y13 ff4 fs3 fc0 sc0 ls0 ws0">交换等</div><div class="t m0 x3 h6 y14 ff3 fs3 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>. <span class="ff4">协议按应用划分可以分为<span class="ff2">公有协议</span>和<span class="ff2">私有协议</span>。</span></div><div class="t m0 x3 h6 y15 ff3 fs3 fc0 sc0 ls0 ws0">4<span class="_ _3"></span>. <span class="ff4">通常是</span>ip<span class="ff4">地址后面跟端口号</span>(<span class="ff4">范围</span>0-65535)<span class="ff4">:</span>ip<span class="ff4">用来定位主机,</span>port<span class="ff4">区别应用(进程</span>)<span class="ff4">;</span> <span class="ff4">用户自己定</span></div><div class="t m0 x8 h6 y16 ff4 fs3 fc0 sc0 ls0 ws0">义的通常要大于<span class="ff3">1024</span>(小于<span class="ff3">1024</span>通常分配给常用的进程和协议),小于<span class="ff3">1</span>万</div><div class="t m0 x2 h5 y17 ff1 fs2 fc0 sc0 ls0 ws0">1.2OSI<span class="ff2">参考模型及</span>TCP/IP<span class="ff2">参考模型<span class="_ _4"> </span></span><span class="fc1"> </span></div><div class="t m0 x2 h6 y18 ff3 fs3 fc0 sc0 ls0 ws0">TCP/IP<span class="ff4">协议族的每一层的作用:</span></div></div><a class="l"><div class="d m1"></div></a><a class="l"><div class="d m1"></div></a><a class="l"><div class="d m1"></div></a><a class="l"><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div><div id="pf2" class="pf w0 h0" data-page-no="2"><div class="pc pc2 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="/image.php?url=https://csdnimg.cn/release/download_crawler_static/89789747/bg2.jpg"><div class="c x1 y1 w2 h2"><div class="t m0 x3 h6 y19 ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. <span class="ff4">网络接口层:负责将二进制流转换为数据帧,并进行数据帧的发送和接收。要注意的是数据帧是独</span></div><div class="t m0 x8 h6 y1a ff4 fs3 fc0 sc0 ls0 ws0">立的网络信息传输单元。</div><div class="t m0 x3 h6 y1b ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. <span class="ff4">网络层:负责点</span>(<span class="ff4">路由节点</span>)<span class="ff4">到点的传输,将数据帧封装成</span>IP<span class="ff4">数据报,并运行必要的路由算法。</span></div><div class="t m0 x3 h6 y1c ff3 fs3 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>. <span class="ff4">传输层:负责端对端之间的通信会话连接和建立。传输协议的选择根据数据传输方式而定。</span></div><div class="t m0 x3 h6 y1d ff3 fs3 fc0 sc0 ls0 ws0">4<span class="_ _3"></span>. <span class="ff4">应用层:负责应用程序的网络访问,这里通过端口号来识别各个不同的进程。</span></div><div class="t m0 x2 h6 y1e ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(即从网线上检测到什么</span></div><div class="t m0 x2 h6 y1f ff4 fs3 fc0 sc0 ls0 ws0">信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工</div><div class="t m0 x2 h6 y20 ff4 fs3 fc0 sc0 ls0 ws0">作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之</div><div class="t m0 x2 h6 y21 ff4 fs3 fc0 sc0 ls0 ws0">间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首</div><div class="t m0 x2 h6 y22 ff4 fs3 fc0 sc0 ls0 ws0">部重新封装之后再转发。</div><div class="t m0 x2 h6 y23 ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">网络层的</span>IP<span class="ff4">协议是构成</span>Internet<span class="ff4">的基础。</span>Internet<span class="ff4">上的主机通过</span>IP<span class="ff4">地址来标识,</span>Inter-net<span class="ff4">上有大量路</span></div><div class="t m0 x2 h6 y24 ff4 fs3 fc0 sc0 ls0 ws0">由器负责根据<span class="ff3">IP</span>地址选择合适的路径转发数据包,数据包从<span class="ff3">Internet</span>上的源主机到目的主机往往要经过</div><div class="t m0 x2 h6 y25 ff4 fs3 fc0 sc0 ls0 ws0">十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口</div><div class="t m0 x2 h6 y26 ff4 fs3 fc0 sc0 ls0 ws0">之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。<span class="ff3">IP</span>协议不</div><div class="t m0 x2 h6 y27 ff4 fs3 fc0 sc0 ls0 ws0">保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。</div><div class="t m0 x2 h6 y28 ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">网络层负责点到点(</span>ptop<span class="ff4">,</span>point-to-point<span class="ff4">)的传输(这里的</span>“<span class="ff4">点</span>”<span class="ff4">指主机或路由器),而传输层负责</span></div><div class="t m0 x2 h6 y29 ff4 fs3 fc0 sc0 ls0 ws0">端到端(<span class="ff3">etoe</span>,<span class="ff3">end-to-end</span>)的传输(这里的<span class="ff3">“</span>端<span class="ff3">”</span>指源主机和目的主机)。传输层可选择<span class="ff3">TCP</span>或<span class="ff3">UDP</span>协</div><div class="t m0 x2 h6 y2a ff4 fs3 fc0 sc0 ls0 ws0">议。</div><div class="t m0 x2 h6 y2b ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">以太网驱动程序首先根据以太网首部中的</span>“<span class="ff4">上层协议</span>”<span class="ff4">字段确定该数据帧的有效载荷(</span>payload<span class="ff4">,指除</span></div><div class="t m0 x2 h6 y2c ff4 fs3 fc0 sc0 ls0 ws0">去协议首部之外实际传输的数据)是<span class="ff3">IP</span>、<span class="ff3">ARP</span>还是<span class="ff3">RARP</span>协议的数据报,然后交给相应的协议处理。假如</div><div class="t m0 x2 h6 y2d ff4 fs3 fc0 sc0 ls0 ws0">是<span class="ff3">IP</span>数据报,<span class="ff3">IP</span>协议再根据<span class="ff3">IP</span>首部中的<span class="ff3">“</span>上层协议<span class="ff3">”</span>字段确定该数据报的有效载荷是<span class="ff3">TCP</span>、<span class="ff3">UDP</span>、<span class="ff3">ICMP</span>还是</div><div class="t m0 x2 h6 y2e ff3 fs3 fc0 sc0 ls0 ws0">IGMP<span class="ff4">,然后交给相应的协议处理。假如是</span>TCP<span class="ff4">段或</span>UDP<span class="ff4">段,</span>TCP<span class="ff4">或</span>UDP<span class="ff4">协议再根据</span>TCP<span class="ff4">首部或</span>UDP<span class="ff4">首部</span></div><div class="t m0 x2 h6 y2f ff4 fs3 fc0 sc0 ls0 ws0">的<span class="ff3">“</span>端口号<span class="ff3">”</span>字段确定应该将应用层数据交给哪个用户进程。<span class="ff3">IP</span>地址是标识网络中不同主机的地址,而端口</div><div class="t m0 x2 h6 y30 ff4 fs3 fc0 sc0 ls0 ws0">号就是同一台主机上标识不同进程的地址,<span class="ff3">IP</span>地址和端口号合起来标识网络中唯一的进程。</div><div class="t m0 x2 h6 y31 ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">虽然</span>IP<span class="ff4">、</span>ARP<span class="ff4">和</span>RARP<span class="ff4">数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,</span>ARP<span class="ff4">和</span>RARP<span class="ff4">属</span></div><div class="t m0 x2 h6 y32 ff4 fs3 fc0 sc0 ls0 ws0">于链路层,<span class="ff3">IP</span>属于网络层。虽然<span class="ff3">ICMP</span>、<span class="ff3">IGMP</span>、<span class="ff3">TCP</span>、<span class="ff3">UDP</span>的数据都需要<span class="ff3">IP</span>协议来封装成数据报,但是从</div><div class="t m0 x2 h6 y33 ff4 fs3 fc0 sc0 ls0 ws0">功能上划分,<span class="ff3">ICMP</span>、<span class="ff3">IGMP</span>与<span class="ff3">IP</span>同属于网络层,<span class="ff3">TCP</span>和<span class="ff3">UDP</span>属于传输层。</div></div></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div><div id="pf3" class="pf w0 h0" data-page-no="3"><div class="pc pc3 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="/image.php?url=https://csdnimg.cn/release/download_crawler_static/89789747/bg3.jpg"><div class="c x1 y34 w2 h2"><div class="t m0 x2 h6 y35 ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span>TCP/IP<span class="ff4">协议族的每一层协议的相关注解:</span></div><div class="t m0 x3 h6 y36 ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. ARP<span class="ff4">:(地址转换协议)用于获得同一物理网络中的硬件主机地址。是设备通过自己知道的</span>IP<span class="ff4">地址</span></div><div class="t m0 x8 h6 y37 ff4 fs3 fc0 sc0 ls0 ws0">来获得自己不知道的物理地址的协议。</div><div class="t m0 x3 h6 y38 ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. RARP<span class="ff4">:反向地址转换协议(</span>RARP<span class="ff4">:</span>Reverse Address Resolution Protocol<span class="ff4">)</span> <span class="ff4">反向地址转换协议</span></div><div class="t m0 x8 h6 y39 ff4 fs3 fc0 sc0 ls0 ws0">(<span class="ff3">RARP</span>)允许局域网的物理机器从网关服务器的<span class="ff3"> ARP </span>表或者缓存上请求其<span class="ff3"> IP </span>地址。网络管理员在</div><div class="t m0 x8 h6 y3a ff4 fs3 fc0 sc0 ls0 ws0">局域网网关路由器里创建一个表以映射物理地址(<span class="ff3">MAC</span>)和与其对应的<span class="ff3"> IP </span>地址。当设置一台新的</div><div class="t m0 x8 h6 y3b ff4 fs3 fc0 sc0 ls0 ws0">机器时,其<span class="ff3"> RARP </span>客户机程序需要向路由器上的<span class="ff3"> RARP </span>服务器请求相应的<span class="ff3"> IP </span>地址。假设在路由表</div><div class="t m0 x8 h6 y3c ff4 fs3 fc0 sc0 ls0 ws0">中已经设置了一个记录,<span class="ff3">RARP </span>服务器将会返回<span class="ff3"> IP </span>地址给机器,此机器就会存储起来以便日后使</div><div class="t m0 x8 h6 y3d ff4 fs3 fc0 sc0 ls0 ws0">用。<span class="ff3"> RARP </span>可以使用于以太网、光纤分布式数据接口及令牌环<span class="ff3"> LAN</span>、</div><div class="t m0 x3 h6 y3e ff3 fs3 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>. IP<span class="ff4">:(网际互联协议)负责在主机和网络之间寻址和传递数据包。</span></div><div class="t m0 x3 h6 y3f ff3 fs3 fc0 sc0 ls0 ws0">4<span class="_ _3"></span>. ICMP<span class="ff4">:(网络控制消息协议)用于发送报告有关数据包的传送错误的协议。</span></div><div class="t m0 x3 h6 y40 ff3 fs3 fc0 sc0 ls0 ws0">5<span class="_ _3"></span>. IGMP<span class="ff4">:(网络组管理协议)被</span>IP<span class="ff4">主机用来向本地多路广播路由器报告主机组成员的协议。主机与</span></div><div class="t m0 x8 h6 y41 ff4 fs3 fc0 sc0 ls0 ws0">本地路由器之间使用<span class="ff3">Internet</span>组管理协议(<span class="ff3">IGMP</span>,<span class="ff3">Internet Group Management Protocol</span>)来进</div><div class="t m0 x8 h6 y42 ff4 fs3 fc0 sc0 ls0 ws0">行组播组成员信息的交互。</div><div class="t m0 x3 h6 y43 ff3 fs3 fc0 sc0 ls0 ws0">6<span class="_ _3"></span>. TCP<span class="ff4">:(传输控制协议)为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适</span></div><div class="t m0 x8 h6 y44 ff4 fs3 fc0 sc0 ls0 ws0">用于要求得到响应的应用程序。</div><div class="t m0 x3 h6 y45 ff3 fs3 fc0 sc0 ls0 ws0">7<span class="_ _3"></span>. UDP<span class="ff4">:(用户数据包协议)提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输少</span></div><div class="t m0 x8 h6 y46 ff4 fs3 fc0 sc0 ls0 ws0">量数据。</div></div></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div><div id="pf4" class="pf w0 h0" data-page-no="4"><div class="pc pc4 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="/image.php?url=https://csdnimg.cn/release/download_crawler_static/89789747/bg4.jpg"><div class="c x1 y47 w2 h7"><div class="t m0 x2 h5 y48 ff1 fs2 fc0 sc0 ls0 ws0">1.3<span class="ff2">以太网帧数据格式<span class="_ _6"> </span></span><span class="fc1"> </span></div><div class="t m0 x2 h6 y49 ff4 fs3 fc0 sc0 ls0 ws0">以太网的帧格式如下所示:</div><div class="t m0 x3 h6 y4a ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. <span class="ff4">其中的源地址和目的地址是指网卡的硬件地址(也叫</span>MAC<span class="ff4">地址),长度是</span>48<span class="ff4">位,是在网卡出厂时固</span></div><div class="t m0 x8 h6 y4b ff4 fs3 fc0 sc0 ls0 ws0">化的。可在<span class="ff3">shell</span>中使用<span class="ff3">ifconfig</span>命令查看,<span class="ff3">“ether 00:0c:29:b4:c6:ef”</span>部分就是硬件地址。</div><div class="t m0 x3 h6 y4c ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. <span class="ff2">协议字段<span class="ff4">有三类值,分别对应</span></span>IP<span class="ff4">、</span>ARP<span class="ff4">、</span>RARP</div><div class="t m0 x3 h6 y4d ff3 fs3 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>. <span class="ff4">帧尾是</span>CRC<span class="ff4">校验码</span></div><div class="t m0 x3 h6 y4e ff3 fs3 fc0 sc0 ls0 ws0">4<span class="_ _3"></span>. <span class="ff4">以太网帧中的数据长度规定<span class="ff2">最小<span class="ff1">46</span>字节</span>,<span class="ff2">最大<span class="ff1">1500</span>字节</span>,最大值</span>1500<span class="ff4">称为以太网的最大传输单元</span></div><div class="t m0 x8 h6 y4f ff4 fs3 fc0 sc0 ls0 ws0">(<span class="ff3">MTU</span>),不同的网络类型有不同的<span class="ff3">MTU</span>,如果一个数据包从以太网路由到拨号链路上,数据包</div><div class="t m0 x8 h6 y50 ff4 fs3 fc0 sc0 ls0 ws0">长度大于拨号链路的<span class="ff3">MTU</span>,则需要对数据包进行分片(<span class="ff3">fragmentation</span>)。<span class="ff3">ifconfig</span>命令输出中也有</div><div class="t m0 x8 h6 y51 ff3 fs3 fc0 sc0 ls0 ws0">“MTU:1500”<span class="ff4">。注意,</span>MTU<span class="ff4">这个概念指数据帧中有效载荷的最大长度,不包括帧头长度。</span></div><div class="t m0 x2 h5 y52 ff1 fs2 fc0 sc0 ls0 ws0">1.4ARP<span class="ff2">数据报格式<span class="_ _7"> </span></span><span class="fc1"> </span></div><div class="t m0 x2 h6 y53 ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">在网络通讯时,源主机的应用程序知道目的主机的</span>IP<span class="ff4">地址和端口号,却不知道目的主机的硬件地</span></div><div class="t m0 x2 h6 y54 ff4 fs3 fc0 sc0 ls0 ws0">址,而数据包首先是被网卡接收到,再去处理上层协议的,<span class="ff2">如果接收到的数据包的硬件地址与本机不</span></div><div class="t m0 x2 h6 y55 ff2 fs3 fc0 sc0 ls0 ws0">符,则直接丢弃<span class="ff4">,</span>因此在通讯前必须获得目的主机的硬件地址<span class="ff4">。<span class="ff3">ARP</span>协议就起到这个作用。源主机发出</span></div><div class="t m0 x2 h6 y56 ff3 fs3 fc0 sc0 ls0 ws0">ARP<span class="ff4">请求,询问</span>“<span class="ff1">IP<span class="ff2">地址是</span>192.168.0.1<span class="ff2">的主机的硬件地址是多少</span></span>”<span class="ff4">,并将这个请求广播到本地网段(以太</span></div></div><a class="l"><div class="d m1"></div></a><a class="l"><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div><div id="pf5" class="pf w0 h0" data-page-no="5"><div class="pc pc5 w0 h0"><img class="bi x0 y0 w1 h1" alt="" src="/image.php?url=https://csdnimg.cn/release/download_crawler_static/89789747/bg5.jpg"><div class="c x1 y47 w2 h7"><div class="t m0 x2 h6 y57 ff4 fs3 fc0 sc0 ls0 ws0">网帧首部的硬件地址填<span class="ff3">FF:FF:FF:FF:FF:FF</span>表示广播),目的主机接收到广播的<span class="ff3">ARP</span>请求,发现其中的<span class="ff3">IP</span>地</div><div class="t m0 x2 h6 y58 ff4 fs3 fc0 sc0 ls0 ws0">址与本机相符,则发送一个<span class="ff3">ARP</span>应答数据包给源主机,将自己的硬件地址填写在应答包中。</div><div class="t m0 x2 h6 y59 ff3 fs3 fc0 sc0 ls0 ws0"> <span class="_ _5"> </span> <span class="_ _5"> </span><span class="ff4">每台主机都维护一个</span>ARP<span class="ff4">缓存表,可以用<span class="ff1">arp -a</span>命令查看。缓存表中的表项有过期时间(一般为</span>20</div><div class="t m0 x2 h6 y5a ff4 fs3 fc0 sc0 ls0 ws0">分钟),如果<span class="ff3">20</span>分钟内没有再次使用某个表项,则该表项失效,下次还要发<span class="ff3">ARP</span>请求来获得目的主机的</div><div class="t m0 x2 h6 y5b ff4 fs3 fc0 sc0 ls0 ws0">硬件地址。想一想,为什么表项要有过期时间而不是一直有效?</div><div class="t m0 x2 h6 y5c ff3 fs3 fc0 sc0 ls0 ws0">ARP<span class="ff4">数据报的格式如下所示:</span></div><div class="t m0 x3 h6 y5d ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. <span class="ff2">硬件类型<span class="ff4">指链路层网络类型,</span></span>1<span class="ff4">为以太网</span></div><div class="t m0 x3 h6 y5e ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. <span class="ff2">协议类型<span class="ff4">指要转换的地址类型,</span></span>0x0800<span class="ff4">为</span>ipv4<span class="ff4">地址</span></div><div class="t m0 x3 h6 y5f ff3 fs3 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>. <span class="ff2">两个地址长度<span class="ff4">对于以太网地址和</span></span>IP<span class="ff4">地址分别为</span>6<span class="ff4">和</span>4<span class="ff4">(字节)</span></div><div class="t m0 x3 h6 y60 ff3 fs3 fc0 sc0 ls0 ws0">4<span class="_ _3"></span>. <span class="ff1">op<span class="ff2">字段<span class="ff4">为</span></span></span>1<span class="ff4">表示</span>ARP<span class="ff4">请求,</span>op<span class="ff4">字段为</span>2<span class="ff4">表示</span>ARP<span class="ff4">应答</span></div><div class="t m0 x3 h6 y61 ff3 fs3 fc0 sc0 ls0 ws0">5<span class="_ _3"></span>. <span class="ff4">由于以太网规定最小数据长度为</span>46<span class="ff4">字节,</span>ARP<span class="ff4">帧长度只有</span>28<span class="ff4">字节,因此有</span>18<span class="ff4">字节填充位,填充位的</span></div><div class="t m0 x8 h6 y62 ff4 fs3 fc0 sc0 ls0 ws0">内容没有定义,与具体实现相关。</div><div class="t m0 x2 h5 y63 ff1 fs2 fc0 sc0 ls0 ws0">1.5IP<span class="ff2">数据报格式<span class="_ _8"> </span></span><span class="fc1"> </span></div><div class="t m0 x3 h6 y64 ff3 fs3 fc0 sc0 ls0 ws0">1<span class="_ _3"></span>. <span class="ff2">版本号(<span class="ff1">Version</span>)<span class="ff4">:长度</span></span>4<span class="ff4">比特。标识目前采用的</span>IP<span class="ff4">协议的版本号。一般的值为</span>0100<span class="ff4">(</span>IPv4<span class="ff4">),</span></div><div class="t m0 x8 h6 y65 ff3 fs3 fc0 sc0 ls0 ws0">0110<span class="ff4">(</span>IPv6<span class="ff4">)</span></div><div class="t m0 x3 h6 y66 ff3 fs3 fc0 sc0 ls0 ws0">2<span class="_ _3"></span>. <span class="ff1">IP<span class="ff2">包头长度(</span>Header Length<span class="ff2">)<span class="ff4">:长度</span></span></span>4<span class="ff4">比特。这个字段的作用是为了描述</span>IP<span class="ff4">包头的长度,因为在</span></div><div class="t m0 x8 h6 y67 ff3 fs3 fc0 sc0 ls0 ws0">IP<span class="ff4">包头中有变长的可选部分。该部分占</span>4<span class="ff4">个</span>bit<span class="ff4">位,单位为</span>32bit<span class="ff4">(</span>4<span class="ff4">个字节),即本区域值</span>= IP<span class="ff4">头部</span></div><div class="t m0 x8 h6 y68 ff4 fs3 fc0 sc0 ls0 ws0">长度(单位为<span class="ff3">bit</span>)<span class="ff3">/ (8 * 4)</span>,因此,一个<span class="ff3">IP</span>包头的长度最长为<span class="ff3">“1111”</span>,即<span class="ff3">15*4</span>=<span class="ff3">60</span>个字节。<span class="ff3">IP</span>包头</div><div class="t m0 x8 h6 y69 ff4 fs3 fc0 sc0 ls0 ws0">最小长度为<span class="ff3">20</span>字节</div><div class="t m0 x3 h6 y6a ff3 fs3 fc0 sc0 ls0 ws0">3<span class="_ _3"></span>. <span class="ff2">服务类型(<span class="ff1">Type of Service</span>)<span class="ff4">:用于规定本数据报的处理方式</span></span></div></div><a class="l"><div class="d m1"></div></a></div><div class="pi" data-data='{"ctm":[1.611792,0.000000,0.000000,1.611792,0.000000,0.000000]}'></div></div>