当前位置: 首页 > news >正文

北京网站建设品牌lol中国战队

北京网站建设品牌,lol中国战队,网页视频下载插件手机版,桂林市天气预报文章目录 IP协议基本概念IP协议格式分片与组装网段划分特殊的IP地址IP地址的数量限制私网IP地址和公网IP地址路由路由表生成算法 IP协议 IP协议全称为“网际互连协议#xff08;Internet Protocol#xff09;”#xff0c;IP协议是TCP/IP体系中的网络层协议。 基本概念 网… 文章目录 IP协议基本概念IP协议格式分片与组装网段划分特殊的IP地址IP地址的数量限制私网IP地址和公网IP地址路由路由表生成算法 IP协议 IP协议全称为“网际互连协议Internet Protocol”IP协议是TCP/IP体系中的网络层协议。 基本概念 网络层解决的问题 TCP作为传输层控制协议其保证的是数据传输的可靠性和传输效率但TCP提供的仅仅是数据传输的策略而真正负责数据在网络中传输的则传输层之下的网络层和链路层。 双方在进行网络通信时发送的数据并不是直接从一方的传输层直接发送到了另一方的传输层而是需要传输层将数据继续向下进行交付在网络层和链路层经过数据封装后再通过网络发送到对方主机对方主机收到数据后也同样需要在链路层和网络层进行数据解包此时对方的传输层才拿到了发送过来的数据然后再继续将该数据向上进行交付。 网络通信的过程就像两个人在送互相送数据这两个人分别在两栋楼的四楼如果一个人要将数据交给对方那么这个人就必须先从四楼走到一楼然后再在路上经过路径选择到达对方楼下最后再上到四楼将数据交给对方。 其中送数据的这个人从四楼下来的过程就是数据封装的过程这个人在路上经过路径选择到达对方楼下的过程就是数据路由的过程而这个人再上到四楼将数据交给对方的过程就是数据解包的过程。 而网络层要解决的问题就是将数据从一台主机送到另一台主机也就是数据的路由。 保证数据可靠的从一台主机送到另一台主机的前提 当双方在进行基于TCP的网络通信时要保证将数据可靠的从一台主机送到另一台主机前提是发送方要有将数据送到对方主机的能力要是发送方连将数据发送给对方的能力都没有那就更不用谈可靠的将数据送给对方主机了。 需要注意的是发送方有将数据送到对方主机的能力并不意味着发送方每次发送的数据都能够成功的发送到对方但如果发送方连将数据发送给对方的能力都没有那发送方基本就不可能将数据发送给对方。一旦发送方有了将数据发送给对方的能力就算发送方某次发送的数据没有成功到达对方此时上层TCP由于没有收到对应数据的应答此时上层TCP会要求进行数据重发直到数据成功发送到对方主机为止。 也就是说在网络层有能力将数据送到对方主机的情况下虽然网络层不能保证每次都能将数据成功送到对方主机但在TCP提供的可靠性策略的保证下最终网络层就一定能够将数据可靠的发送到对方主机。 说明一下 网络层解决的问题是将数据从一台主机送到另一台主机因此网络层解决的是主机到主机的问题。一方传输层从上方进程拿到数据后该数据贯穿网络协议栈进行封装和解包最终到达对方传输层此时对方传输层也会将数据向上交给对应的进程因此传输层解决的是进程到进程的问题。 路径选择 数据进行的网络传输一般都是跨网络的而路由器就是连接多个网络的硬件设备因此数据在进行跨网络传输时一定需要经过多个路由器。 数据路由就像我们旅游一样当确定了要到达的目标主机后就需要寻找最短的路径到达该目的地。 目的地的确定是非常重要的因为目的地直接决定了数据路由时的路径选择这也是跨网络找到目标主机的根本。只有数据经过了较为正确的路径选择最终才可能慢慢趋近于目标网络或目标主机。 确定数据路由的目的地后数据就可以在网络中进行路由了但数据在路由时无法自行进行路径选择因为这个数据本身是“不认识路”的因此数据在路由的过程中需要不断“找路人问路”而这里所谓的“路人”就是网络当中的一台台路由器。 网络当中的路由器是“认识路的”它们将自己的“认路经验”都记录到路由表当中因此路由器可以通过查路由表找到去特定点的最短路径。因此数据在路由时会不断通过路由器来进行路径选择以此来一步步靠近目标网络或目标主机。 主机和路由器 主机配有IP地址但是不进行路由控制的设备。但实际现在几乎不存在不进行路由控制的设备了就连你的笔记本也会进行路由控制。路由器既配有IP地址又能进行路由控制。实际现在主流的路由器已经不仅仅具有路由的功能了它甚至具备某些应用层的功能。节点主机和路由器的统称。 IP协议格式 IP协议格式如下 4位版本号version指定IP协议的版本IPv4/IPv6对于IPv4来说就是4。4位首部长度header length表示IP报头的长度以4字节为单位。8位服务类型Type Of Service3位优先权字段已经弃用4位TOS字段和1位保留字段必须置为0。4位TOS分别表示最小延时最大吞吐量最高可靠性最小成本。这四者相互冲突只能选择一个。比如对于ssh/telnet这样的应用程序最小延时比较重要而对于ftp这样的程序最大吞吐量比较重要。16位总长度total lengthIP报文IP报头有效载荷的总长度用于将各个IP报文进行分离。16位标识id唯一的标识主机发送的报文如果数据在IP层进行了分片那么每一个分片对应的id都是相同的。3位标志字段第一位保留表示暂时没有规定该字段的意义。第二位表示禁止分片表示如果报文长度超过MTUIP模块就会丢弃该报文。第三位表示“更多分片”如果报文没有进行分片则该字段设置为0如果报文进行了分片则除了最后一个分片报文设置为0以外其余分片报文均设置为1。13位片偏移framegament offset分片相对于原始数据开始处的偏移表示当前分片在原数据中的偏移位置实际偏移的字节数是这个值 × 8 \times 8 ×8得到的。因此除了最后一个报文之外其他报文的长度必须是8的整数倍否则报文就不连续了。8位生存时间Time To LiveTTL数据报到达目的地的最大报文跳数一般是64每经过一个路由TTL - 1一直减到0还没到达那么就丢弃了这个字段主要是用来防止出现路由循环。8位协议表示上层协议的类型。16位首部检验和使用CRC进行校验来鉴别数据报的首部是否损坏但不检验数据部分。32位源IP地址和32位目的IP地址表示发送端和接收端所对应的IP地址。选项字段不定长最多40字节。 IP报头在内核当中本质就是一个位段类型给数据封装IP报头时实际上就是用该位段类型定义一个变量然后填充IP报头当中的各个属性字段最后将这个IP报头拷贝到数据的首部至此便完成了IP报头的封装。 IP如何将报头与有效载荷进行分离 IP分离报头与有效载荷的方法与TCP是一模一样的当IP从底层获取到一个报文后虽然IP不知道报头的具体长度但IP报文的前20个字节是IP的基本报头并且这20字节当中涵盖4位首部长度。 因此IP是这样分离报头与有效载荷的 当IP从底层获取到一个报文后首先读取报文的前20个字节并从中提取出4位的首部长度此时便获得了IP报头的大小 s i z e size size。如果 s i z e size size的值大于20字节则需要继续从报文当中读取 s i z e − 20 size-20 size−20字节的数据这部分数据就是IP报头当中的选项字段。读取完IP的基本报头和选项字段后剩下的就是有效载荷了。 IP就是通过这种“定长报头自描述字段”的方式进行报头和有效载荷的分离的。但需要注意的是IP报头当中的4位首部长度描述的基本单位与TCP报头当中的4位首部长度一样都是以4字节为单位进行描述的这也恰好是报文的宽度。 4位二进制的取值范围是0000 ~ 1111因此IP报头的最大长度为 15 × 4 60 15\times 460 15×460字节因为基本报头的长度是20字节所以IP报头中选项字段的长度最多是40字节。如果IP报头当中不携带选项字段那么IP报头的长度就是20字节此时报头当中的4位首部长度字段所填的值就是 20 ÷ 4 5 20\div 45 20÷45即0101。 IP如何决定将有效载荷交付给上层的哪一个协议 基于IP协议的传输层协议不止一种因此当IP从底层获取到一个报文并对其进行解包后IP需要知道应该将分离后得到的有效载荷交付给上层的哪一个协议。 在IP报头当中有一个字段叫做8位协议该字段表示的就是上层协议的类型IP就是根据该字段判定应该将分离出来的有效载荷交付给上层的哪一个协议的。该字段是发送方的IP层从上层传输层获取到数据后填充的比如是上层TCP交给IP层的数据那么该数据在封装IP报头时的8位协议填充的就是TCP对应的编号。 32位源IP地址和32位目的IP地址 IP报头当中的32位源IP地址和32位目的IP地址分别代表的就是该报文的发送端和接收端对应的IP地址。 数据在网络传输过程中会遇到一个个的路由器这些路由器会帮助网络当中的数据进行路由转发使得网络中的数据慢慢趋近于目标主机。路由器在帮助数据进行路由转发时会提取出该数据的IP报头当中的目的IP地址并以此作为数据路由转发的重要依据。 当接收端收到了发送端发来的数据后接收端可能也想要给发送端发送数据因此发送端在发送数据时除了需要指明该数据的目的IP地址还需要指明该数据的源IP地址也就是发送端的IP地址。即便接收端收到数据后没有数据想要发送给发送端但至少接收端需要向发送端发送一个响应报文表明发送端发送的数据已经被接收端可靠的收到了因此发送出去的数据除了需要指明该数据的目的IP地址还需要指明该数据的源IP地址。 理解socket编程 在进行socket编程的时候当一端想要发送数据给另一端时必须要指明对端的IP地址和端口号也就是发送数据的目的IP地址和目的端口号。其中这里的IP地址就是给网络层的IP用的用于数据在网络传输过程中的路由转发而这里的端口号就是给传输层的TCP或UDP用的用于指明该数据应该交给上层的哪一个进程。发送数据时我们不需要指明发送数据的源IP地址和源端口号因为传输层和网络层都是在操作系统内核当中实现的数据在进行封装时操作系统会自行填充上对应的源IP地址和源端口号。 8位生存时间 报文在网络传输过程中可能因为某些原因导致报文无法到达目标主机比如报文在路由时出现了环路路由的情况或者目标主机已经异常离线了此时这个报文就成了一个废弃的游离报文。 为了避免网络当中出现大量的游离报文于是在IP的报头当中就出现了一个字段叫做8位生存时间Time To LiveTTL。8位生存时间代表的是报文到达目的地的最大报文跳数每当报文经过一次路由这里的生存时间就会减一当生存时间减为0时该报文就会被自动丢弃此时这个报文就会在网络中消散。 分片与组装 数据链路层解决的问题 IP能够将数据跨网络从一台主机送到另一台主机而数据在进行跨网络传送时需要经过一个个的路由器进行路由转发最终才能到达目标主机。 比如要将数据从主机B跨网络传送到主机C那么主机B需要先将数据交给路由器F路由器F再将数据交给路由器G…最终由路由器D将数据交给主机C。 因此IP进行数据跨网络传送的前提是需要先将数据从一个节点传送到和自己相连的下一个节点这个问题实际就是由IP之下的数据链路层解决的其中数据链路层最典型的代表协议就是MAC帧。 而两个节点直接相连也就意味着这两个节点是在同一个局域网当中的因此要讨论两个相邻节点的数据传送时实际讨论的就是局域网通信的问题。 最大传输单元 MTU MAC帧作为数据链路层的协议它会将IP传下来的数据封装成数据帧然后发送到网络当中。但MAC帧携带的有效载荷的最大长度是有限制的也就是说IP交给MAC帧的报文不能超过某个值这个值就叫做最大传输单元Maximum Transmission UnitMTU这个值的大小一般是1500字节。 在Linux下使用ifconfig命令可以查看对应的MTU。 由于MAC帧无法发送大于1500字节的数据因此IP层向下交付的数据的长度不能超过1500字节这里所说的数据包括IP的报头和IP的有效载荷。 分片与组装 如果IP层要传送的数据超过了1500字节那么就需要先在IP层对该数据进行分片然后再将分片后的数据交给下层MAC帧进行发送。 如果发送数据时在IP层进行了分片那么当这些分片数据到达对端主机的IP层后就需要先进行组装然后再将组装好的数据交付给上层传输层。 注意 数据的分片不是经常需要做的实际在网络通信过程中不分片才是常态因为数据分片会存在一些潜在的问题比如分片可能会增加丢包的概率。数据的分片和组装发生在IP层不仅源端主机可能会对数据进行分片数据在路由过程中的路由器也可能对数据进行分片。因为不同网络的MTU是不一样的如果传输路径上的某个网络的MTU比源端网络的MTU小那么路由器就可能对IP数据报再次进行分片。分片数据的组装只会发生在目的端的IP层。在分片的数据中每一个分片在IP层都会被添加上对应的IP报头而传输层添加的报头只会出现在第一个分片中因此网络中传输的数据包可能没有传输层的报头。 数据的分片和组装都是由IP层完成的 数据的分片和组装都是在IP层完成的上层的传输层和下层的链路层并不关心。 传输层只负责为数据传送提供可靠性保证比如当数据传送失败后传输层的TCP协议可以组织进行数据重传。 当TCP将待发送的数据交给IP后TCP并不关心该数据是否会在IP层进行分片即TCP并不关心数据具体的发送过程。当TCP从IP获取到数据后TCP也不关心该数据是否在IP层经过了组装。 而链路层的MAC帧只负责将数据从一个节点传送到和自己相连的下一个节点。 当IP将待发送的数据交给MAC帧后MAC帧并不知道该数据是IP经过分片后的某个分片数据还是一个没有经过分片的数据MAC帧只知道它一次最多只能发送MTU大小的数据如果IP交给MAC帧大于MTU字节的数据那MAC帧就无法进行发送。当MAC帧从网络中获取到数据后MAC帧也不关心这个数据是否需要进行组装MAC帧只需要将该数据的MAC帧报头去掉后直接上交给上层IP就行了而至于该数据的组装问题则是IP需要解决的。 因此数据的分片和组装完全是由IP协议自己完成的传输层和链路层不必关心也不需要关心。 分片的过程 假设IP层要发送4500字节的数据由于该数据超过了MAC帧规定的MTU因此IP需要先将该数据进行分片然后再将一个个的分片交给MAC帧进行发送。 IP报头如果不携带选项字段那么其大小就是20字节假设IP层添加的IP报头的长度就是20字节并按下列方式将数据分片后形成了四个分片报文 分片报文总字节数IP报头字节数数据字节数1150020148021500201480315002014804802060 需要注意的是分片后的每一个分片数据都需要封装上对应的IP报头因此4500字节的数据至少需要分为四个分片报文进行发送。 分片报文到达对方的IP层后需要被重新组装起来因此IP层在对数据进行分片时需要记录分片的信息而IP报头当中的16位标识、3位标志和13位片偏移实际就是与数据分片相关的字段。 16位标识唯一标识主机发送的报文如果数据在IP层进行了分片那么每一个分片报文的16位标识是相同的。3位标志第一位保留表示暂时没有规定该字段的意义。第二位表示禁止分片表示如果报文长度超过MTUIP模块就会丢弃该报文。第三位表示“更多分片”如果报文没有进行分片则该字段设置为0如果报文进行了分片则除了最后一个分片报文设置为0以外其余分片报文均设置为1。13位片偏移分片相对于原始数据开始处的偏移表示当前分片在原数据中的偏移位置实际偏移的字节数是这个值 × 8 \times 8 ×8得到的。因此除了最后一个报文之外其他报文的长度必须是8的整数倍否则报文就不连续了。 因此上述四个分片报文对应的16位标识都是一样的假设四个分片报文的16位标识都是123则这四个报文对应的16位标识、3位标志中的“更多分片”和13位片偏移分别如下 分片报文总字节数IP报头字节数数据字节数16位标识“更多分片”13位片偏移115002014801231021500201480123118531500201480123137048020601230555 需要注意的是13位片偏移当中记录的字节数是当前分片在原数据开始处的偏移字节数的值 ÷ 8 \div 8 ÷8得到的比如分片报文2在原始数据开始处的偏移字节数是1480其对应的13位片偏移的值就是 1480 ÷ 8 185 1480\div 8185 1480÷8185。 组装的过程 MAC帧交给IP层的数据可能来自世界各地这些数据可能是经过分片后发送的也可能是没有经过分片直接发送的因此IP必须要通过某种方式来区分收到的各个数据。 IP报头当中有32位源IP地址源IP地址记录了发送端所对应的IP地址因此通过IP报头当中的32位源IP地址就可以区分来自不同主机的数据。IP报头当中有16位标识未分片的数据各自的16位标识都是不同的而由同一个数据分片得到的各个分片报文所对应的16位标识都是相同的因此通过IP报头当中16位标识就可以判断哪些报文是没有经过分片的独立报文哪些报文是经过分片后的分片报文。 因此IP可以通过IP报头当中的32位源IP地址和16位标识将经过分片的数据各自聚合在一起聚合在一起后就可以开始进行组装了。 对于各个分片报文来说 第一个分片报文中的13位片偏移的值一定为0。最后一个分片报文中的“更多分片”标志位一定为0。对于每一个分片报文来说当前报文的13位片偏移加上当前报文的数据字节数 ÷ \div ÷ 8所得到的值就是下一个分片报文的所对应的13位片偏移。 根据分片报文的这三个特点就能够将分片报文合理的组装起来。 先找到分片报文中13位片偏移为0的分片报文然后提取出其IP报头当中的16位总长度字段通过计算即可得出下一个分片报文所对应的13位片偏移按照此方式依次将各个分片报文拼接起来。直到拼接到一个“更多分片”标志位为0的分片报文此时表明分片报文组装完毕。 分片报文丢包的问题 分片后的报文在网络传输过程中也可能会出现丢包问题但接收端有能力判断是否收到了全部分片报文比如假设某组分片报文对应的16位标识值为x 如果分片报文中的第一个分片报文丢包了那么接收端收到的分片报文中就找不到对应16位标识为x并且13位片偏移为0的分片报文。如果分片报文中的最后一个分片报文丢包了那么接收端收到的分片报文中就找不到对应16为标识为x并且“更多分片”标志位为0的分片报文。如果分片报文中的其它分片报文丢包了那么接收端在进行分片报文的组装时就会找不到对应13位片偏移为特定值的分片报文。 需要注意的是未分片报文的“更多分片”标志位为0最后一个分片报文的“更多分片”标志位也为0但当接收端只收到分片报文中的最后一个分片报文时接收端不会将其识别成一个未分片的报文因为未分片的报文所对应的13位片偏移的值也应该是0而最后一个分片报文所对应的13位片偏移的值不为0。 因此只有当一个报文的13位片偏移为0并且该报文的“更多分片”标志位也为0时该报文才会被识别成一个没有被分片的独立报文否则该报文就会被识别成一个分片报文。 为什么不建议进行分片 虽然传输层并不关心IP层的分片问题但分片对传输层也是有影响的。 如果一个数据在网络传输过程中没有经过分片那么只要接收端收到了这一个报文我们就可以认为该数据被对方可靠的收到了。而如果一个数据在网络传输过程中进行了分片那么只有当接收端收到了全部的分片报文并将其成功组装起来这时我们才认为该数据被对方可靠的收到了。但如果众多的分片报文当中有一个报文出现了丢包就会导致接收端就无法将报文成功组装起来这时接收端会将收到的分片报文全部丢弃此时传输层TCP会因为收不到对方应答而进行超时重传。假设在网络传输时丢包的概率是万分之一如果将数据拆分为一百份进行发送那么此时丢包的概率就上升到了百分之一。因为只要有一个分片报文丢包了也就等同于这个报文整体丢失了因此分片会增加传输层重传数据的概率。 需要注意的是只要分片报文当中的某一个出现了丢包此时传输层都需要将数据整体进行重传因为传输层并不知道底层IP对数据进行了分片当传输层发送出去的数据得不到应答时传输层就只能将数据整体进行重传因此数据在发送时不建议进行分片。 如何尽可能避免分片 实际数据分片的根本原因在于传输层一次向下交付的数据太多了导致IP无法直接将数据向下交给MAC帧如果传输层控制好一次交给IP的数据量不要太大那么数据在IP层自然也就不需要进行分片。 因此TCP作为传输控制协议它需要控制一次向下交付数据不能超过某一阈值这个阈值就叫做MSSMaximum Segment Size最大报文段长度。通信双方在建立TCP连接时除了需要协商自身窗口大小等概念之外还会协商后续通信时每一个报文段所能承载的最大报文段长度MSS。 MAC帧的有效载荷最大为MTUTCP的有效载荷最大为MSS由于TCP和IP常规情况下报头的长度都是20字节因此一般情况下 MSS MTU - 20 - 20而MTU的值一般是1500字节因此MSS的值一般就是1460字节。 所以一般建议TCP将发送的数据控制在1460字节以内此时就能够降低数据分片的可能性。之所以说是降低数据分片的可能性是因为每个网络的链路层对应的MTU可能是不同的如果数据在传输过程中进入到了一个MTU较小的网络那么该数据仍然可能需要在路由器中进行分片。 网段划分 IP地址的构成 IP地址由网络号和主机号两部分构成 网络号保证相互连接的两个网段具有不同的标识。主机号同一网段内主机之间具有相同的网络号但是必须有不同的主机号。 可以在IP地址的后面加一个 /并在 / 后面加上一个数字这就表示从头数到第几位为止属于网络标识。 例如下图中路由器连接了两个网段。对于网络标识来讲同一网段内主机的网络标识是相同的不同网段内主机的网络标识是不同的。而对于主机标识来讲同一网段内主机的主机标识是不同的不同网段内主机的主机标识是可以相同的。 不同的子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机则这台主机的网络号和这个子网的网络号一致但是主机号必须不能和子网中的其他主机重复。 DHCP协议 实际手动管理IP地址是一个非常麻烦的事情当子网中新增主机时需要给其分配一个IP地址当子网当中有主机断开网络时又需要将其IP地址进行回收便于分配给后续新增的主机使用。 因此对于IP地址的分配和回收一般不会手动进行而是采用DHCPDynamic Host Configuration Protocol动态主机配置协议技术。DHCP通常被应用在大型的局域网环境中其主要作用就是集中地址管理、分配IP地址使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息并能够提升地址的使用率。DHCP是一个基于UDP的应用层协议一般的路由器都带有DHCP功能因此路由器也可以看作一个DHCP服务器。 当我们连接WiFi时需要输入密码本质就是因为路由器需要验证你的账号和密码如果验证通过那么路由器就会给你动态分配了一个IP地址然后你就可以基于这个IP地址进行各种上网动作了。 先找目标网络再找目标主机 当IP要将数据跨网络从一台主机发送到另一台主机时其实不是直接将数据发送到了目标主机而是先将数据发送到目标主机所在的网络然后再将数据发送到目标主机。 因此数据在路由时的第一目的并不是找到目标主机而是找到目标网络所在的网络然后再在目标网络当中找到目标主机。 数据路由时之所以不一开始就以找目标主机为目的因为这样效率太低了。 找主机的过程本质是排除的过程如果一开始就以找目标主机为目的那么在查找的过程中一次只能排除一个主机。而如果一开始先以找目标网络为目的那么在查找过程中就能一次排除大量和目标主机不在同一网段的主机这样就可以大大提高检索的效率。 因此为了提高数据路由的效率我们对网络进行了网段划分。 网段划分 过去曾经提出一种划分网络号和主机号的方案就是把所有IP地址分为五类如下图所示 因此各类IP地址的取值范围如下 A类0.0.0.0到127.255.255.255。B类128.0.0.0到191.255.255.255。C类192.0.0.0到223.255.255.255。D类224.0.0.0到239.255.255.255。E类240.0.0.0到247.255.255.255。 当要判断一个IP地址是属于哪一类时只需要遍历IP地址的前五个比特位第几个比特位最先出现0值那么这个IP地址对应就属于A、B、C、D、E类地址。 子网划分 但随着网络的飞速发展这种划分方案的局限性很快就显现出来了。 比如一些学校、公司、实验室等组织想要申请自己的局域网由于A类地址的网络号只占7个比特位因此A类地址可申请的网络只有 2 7 2^7 27个于是大多数组织都选择申请B类地址。由于B类地址的主机号占16个比特位因此理论上一个B类网络当中允许有65536台主机。但实际网络架设中一般不会存在一个局域网当中有这么多主机的情况也就意味着大量的IP地址实际都被浪费掉了。 为了避免这种情况于是又提出了新的划分方案称为CIDRClassless Interdomain Routing 在原有的五类网络的基础上继续进行子网划分这也就意味着需要借用主机号当中的若干位来充当网络号此时为了区分IP地址中的网络号和主机号于是引入了子网掩码subnet mask的概念。每一个子网都有自己的子网掩码子网掩码实际就是一个32位的正整数通常用一串“0”来结尾。将IP地址与当前网络的子网掩码进行“按位与”操作就能够得到当前所在网络的网络号。 此时一个网络就被更细粒度的划分成了一个个更小的子网通过不断的子网划分子网中IP地址对应的主机号就越来越短因此子网当中可用IP地址的个数也就越来越少这也就避免了IP地址被大量浪费的情况。 比如在某一子网中将IP地址的前24位作为网络号那么该网络对应的子网掩码的32个比特位中的前24位就为1剩下的8个比特位为0将其用点分十机制表示就是255.255.255.0。假设该子网当中有一台主机对应的IP地址是192.168.128.10那么将这个IP地址与该网络对应的子网掩码进行“按位与”操作后得到的就是192.168.128.0这就是这个子网对应的网络号。实际在用子网掩码与子网当中主机的IP地址进行“按位与”操作时本质就是保留了主机IP地址中前24个比特位的原貌将剩下的8个比特位的值清0了而已也就是将主机号清0了所以“按位与”后的结果就是该网络对应的网络号。 需要注意的是子网划分不是只能进行一次我们可以在划分出来的子网的基础上继续进行子网划分。 因此一个数据在路由的时候随着数据不断路由进入更小的子网其网络号的位数是在不断变化的准确来说其网络号的位数是在不断增加的这也就意味着IP地址当中的主机号的位数在不断减少。最终当数据路由到达目标主机所在的网络时就可以在该网络当中找到对应的目标主机并将数据交给该主机此时该数据的路由也就结束了。 特殊的IP地址 并不是所有的IP地址都能够作为主机的IP地址有些IP地址本身就是具有特殊用途的。 将IP地址中的主机地址全部设为0就成为了网络号代表这个局域网。将IP地址中的主机地址全部设为1就成为了广播地址用于给同一个链路中相互连接的所有主机发送数据包。127.*的IP地址用于本机环回loop back测试通常是127.0.0.1。 也就是说IP地址中主机号为全0的代表的是当前局域网的网络号IP地址中主机号为全1的代表的是广播地址这两个IP地址都是不能作为主机的IP地址的。因此在某个局域网中最多能存在的主机个数是 2 主机号位数 − 2 2^{主机号位数}-2 2主机号位数−2。 本机环回基本原理 本机环回会将数据贯穿网络协议栈但最终并不会将数据发送到网络当中相当于本机环回时不会将数据写到网卡上面。 本机环回的目的就是将数据自顶向下贯穿协议栈进行一次数据封装的过程的过程然后再自底向上贯穿协议栈进行一次数据的解包和分用用于测试本地的网络功能是否正常。 本机环回的基本原理 当数据到达IP层需要继续向下交付时如果是环回程序那么IP输出函数会将该数据放入到IP输入队列当中然后再由IP输入函数读取上去。而IP输入函数将数据读取上去的本应该是链路层交付上来的数据因此该数据后续就会被当作从网络中读取上来的数据看待各层协议会对该数据依次进行解包和分用。如果不是环回程序的话那么接下来就会判断该数据对应的目的IP地址是否为广播或多播地址或者目的IP地址是否与本主机的IP地址相同如果是则也会将该数据放入到IP输入队列当中等待IP输入函数将其读走。只有判断程序不是环回程序并且也不是广播或多播或发给本主机的数据后才会用ARP获取该数据目的主机的以太网地址并进行后续数据发送的操作。 loopback设备 IP地址的数量限制 IP地址数量不足问题 我们知道IP地址IPv4是一个4字节32位的正整数因此一共有 2 32 2^{32} 232个IP地址也就是将近43亿个IP地址。但TCP/IP协议规定每个主机都需要有一个IP地址。 现在全世界人口已经有70多亿了就算有一半的人没有智能手机算下来也有30多亿台智能手机需要IP地址。随着科技的发展我们使用的电脑、智能手表、智能冰箱、智能洗衣机等设备如果要入网也是需要IP地址的。另外IP地址并不是按照主机台数来配置的因此一个主机可能需要多个IP地址更别谈还有很多组网的路由设备也需要IP地址以及一些特殊的IP地址不能使用的问题。 所以43亿个IP地址其实早就不够用了因此才提出了CIDR的方案对已经划分好的五类网络继续进行子网划分其目的就是为了减少IP地址的浪费根本原因就是IP地址本来就不够了所以不能够再浪费了。 CIDR虽然在一定程度上缓解了IP地址不够用的问题因为CIDR提高了IP地址的利用率减少了浪费但IP地址的绝对上限并没有增加。 如何解决IP地址不足问题 解决IP地址不足有以下几种方式 动态分配IP地址只给接入网络的设备分配IP地址因此同一个MAC地址的设备每次接入互联网中得到的IP地址不一定是相同的避免了IP地址强绑定于某一台设备。NAT技术能够让不同局域网当中同时存在两个相同的IP地址NAT技术不仅能解决IP地址不足的问题而且还能够有效地避免来自网络外部的攻击隐藏并保护网络内部的计算机。IPv6IPv6用16字节128位来表示一个IP地址能够大大缓解IP地址不足的问题。但IPv6并不是IPv4的简单升级版它们是互不相干的两个协议彼此并不兼容因此目前IPv6还没有普及。 私网IP地址和公网IP地址 私网IP地址的种类 如果一个组织内部组建局域网IP地址只用于局域网内的通信而不直接连到Internet上理论上使用任意的IP地址都可以但是RFC 1918规定了用于组建局域网的私有IP地址。 10.*前8位是网络号共16,777,216个地址。172.16.*到172.31.*前12位是网络号共1,048,576个地址。192.168.*前16位是网络号共65,536个地址。 包含在这个范围中的都称为私网IP其余的则称为公网IP或全局IP。 我们连接云服务器时连接的这个IP地址就是云服务器的公网IP地址。 我们可以通过ifconfig命令来查看我们这台机器的私网IP其中网络接口loloop代表的是本地环回而eth0代表的就是我这台机器的网络接口可以看到我的私网IP地址是172.21.0.15。 需要注意的是这里连接云服务器时的IP地址49.232.66.206是云服务器的公网IP由于我使用的是腾讯云因此这里的172.21.0.15是我这个云服务器在腾讯内部的私网IP可以看到这个IP正好在第二种私网IP范围内。 此外打开Windows当中的cmd窗口通过ipconfig命令可以看到大量以192.168开头的私网IP。 我们为什么要给运营商交钱 我们享受的是互联网公司提供服务但为什么需要向运营商交钱呢 实际网络通信的基础设施都是运营商搭建的我们访问服务器的数据并不是直接发送到了对应的服务器而是需要经过运营商建设的各种基站以及各种路由器最终数据才能到达对应的服务器。因为运营商为我们提供了通信的基础设施所以我们交网费实际就相当于购买入网许可一样。没有运营商提供的这些基础设施就不会诞生所谓的互联网公司因为互联网公司是诞生在网络通信基础之上的。 也就是说用户上网的数据首先必须经过运营商的相关网络设备然后才能发送到互联网公司对应的服务器。因此所谓的网段划分、子网划分等工作实际都是运营商做的。 数据是如何发送到服务器的 路由器是连接两个或多个网络的硬件设备在路由器上有两种网络接口分别是LAN口和WAN口 LAN口Local Area Network表示连接本地网络的端口主要与家庭网络中的交换机、集线器或PC相连。WAN口Wide Area Network表示连接广域网的端口一般指互联网。 我们将LAN口的IP地址叫做LAN口IP也叫做子网IP将WAN口的IP地址叫做WAN口IPO也叫做外网IP。 我们使用的电脑、家用路由器、运营商路由器、广域网以及我们要访问的服务器之间的关系大致如下 不同的路由器子网IP其实都是一样的通常都是192.168.1.1子网内的主机IP地址不能重复但是子网之间的IP地址就可以重复了。每一个家用路由器其实又作为运营商路由器的子网中的一个节点这样的运营商路由器可能会有很多级最外层的运营商路由器的WAN口IP就是一个公网IP了。如果希望我们自己实现的服务器程序能够在公网上被访问到就需要把程序部署在一台具有外网IP的服务器上这样的服务器可以在阿里云/腾讯云上进行购买。 由于私网IP不能出现在公网当中因此子网内的主机在和外网进行通信时路由器会不断将数据包IP首部中的源IP地址替换成路由器的WAN口IP这样逐级替换最终数据包中的源IP地址成为一个公网IP这种技术成为NATNetwork Address Translation网络地址转换。 为什么私网IP不能出现在公网当中 不同的局域网中主机的IP地址可能是相同的所以私网IP无法唯一标识一台主机因此不能让私网IP出现在公网上因为IP地址要能唯一标识公网上的一台主机。但由于IP地址不足的原因我们不能让主机直接使用公网IP而让主机使用私网IP因为私网IP可以重复也就意味着我们可以在不同的局域网使用相同的IP地址缓解了IP的不足。此外我们不能直接使用公网IP还有一个原因就是因为我们的数据包必须要经过运营商的路由器如果我们发送的数据直接到了公网那也就意味着我们再也不用交网费了这是不现实的。 两个局域网当中的主机不能不跨公网进行通信 两个局域网当中的主机理论上是不能不跨公网进行通信的因为一个主机要将数据发送给另一台主机的前提是得先知道另一台主机的IP地址。即便现在这个主机知道了另一台主机的IP地址但有可能这两台主机的IP地址是一样的因为它们的IP地址都是私网IP地址。当这一台主机发送数据时将目的IP地址填成和自己相同的IP地址操作系统就会认为这个数据就是要发给自己的而不会向外进行发送了。 所以数据要从一个局域网发送到另一个局域网如果不经过公网是基本上不可能的。我们在和别人聊天的时候也不是直接将数据从一个局域网直接发送到了另一个局域网而是先将数据经过公网发送到了服务器然后再由服务器将数据经过公网转发到了另一个局域网。 但实际确实存在一些技术能够使数据包在发送过程中不进行公网IP的替换而将数据正确送到目标主机这种技术叫做内网穿透也叫做NAT穿透。 路由 数据“问路”的过程 数据在路由的过程中实际就是一跳一跳Hop by Hop“问路”的过程。所谓“一跳”就是数据链路层中的一个区间具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。 IP数据包的传输过程中会遇到很多路由器这些路由器会帮助数据包进行路由转发每当数据包遇到一个路由器后对应路由器都会查看该数据的目的IP地址并告知该数据下一跳应该往哪跳。 路由器的查找结果可能有以下三种 路由器经过路由表查询后得知该数据下一跳应该跳到哪一个子网。路由器经过路由表查询后没有发现匹配的子网此时路由器会将该数据转发给默认路由。路由器经过路由表查询后得知该数据的目标网络就是当前所在的网络此时路由器就会将该数据转给当前网络中对应的主机。 路由表查询的具体过程 每个路由器内部会维护一个路由表我们可以通过route命令查看云服务器上对应的路由表。 Destination代表的是目的网络地址。Gateway代表的是下一跳地址。Genmask代表的是子网掩码。Flags中U标志表示此条目有效可以禁用某些条目G标志表示此条目的下一跳地址是某个路由器的地址没有G标志的条目表示目的网络地址是与本机接口直接相连的网络不必经路由器转发。Iface代表的是发送接口。 当IP数据包到达路由器时路由器就会用该数据的目的IP地址依次与路由表中的子网掩码 Genmask进行“按位与”操作然后将结果与子网掩码对应的目的网络地址Destination进行比对如果匹配则说明该数据包下一跳就应该跳去这个子网此时就会将该数据包通过对应的发送接口Iface发出。 如果将该数据包的目的IP地址与子网掩码进行“按位与”后没有找到匹配的目的网络地址此时路由器就会将这个数据包发送到默认路由也就是路由表中目标网络地址中的default。可以看到默认路由对应的Flags是UG实际就是将该数据转给了另一台路由器让该数据在另一台路由器继续进行路由。 数据包不断经过路由器路由后最终就能到达目标主机所在的目标网络此时就不再根据该数据包目的IP地址当中的网络号进行路由了而是根据目的IP地址当中的主机号进行路由最终根据该数据包对应的主机号就能将数据发送给目标主机了。 路由表生成算法 路由可分为静态路由和动态路由 静态路由是指由网络管理员手工配置路由信息。动态路由是指路由器能够通过算法自动建立自己的路由表并且能够根据实际情况进行调整。 路由表相关生成算法距离向量算法、LS算法、Dijkstra算法等。
文章转载自:
http://www.morning.lkbdy.cn.gov.cn.lkbdy.cn
http://www.morning.wfykn.cn.gov.cn.wfykn.cn
http://www.morning.qyxwy.cn.gov.cn.qyxwy.cn
http://www.morning.slfkt.cn.gov.cn.slfkt.cn
http://www.morning.cnprt.cn.gov.cn.cnprt.cn
http://www.morning.tqdqc.cn.gov.cn.tqdqc.cn
http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn
http://www.morning.nkyqh.cn.gov.cn.nkyqh.cn
http://www.morning.mnqz.cn.gov.cn.mnqz.cn
http://www.morning.ljdjn.cn.gov.cn.ljdjn.cn
http://www.morning.ttdbr.cn.gov.cn.ttdbr.cn
http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn
http://www.morning.5-73.com.gov.cn.5-73.com
http://www.morning.zhmgcreativeeducation.cn.gov.cn.zhmgcreativeeducation.cn
http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn
http://www.morning.bphqd.cn.gov.cn.bphqd.cn
http://www.morning.pmjhm.cn.gov.cn.pmjhm.cn
http://www.morning.ddgl.com.cn.gov.cn.ddgl.com.cn
http://www.morning.ryzgp.cn.gov.cn.ryzgp.cn
http://www.morning.dkmzr.cn.gov.cn.dkmzr.cn
http://www.morning.tqldj.cn.gov.cn.tqldj.cn
http://www.morning.yrskc.cn.gov.cn.yrskc.cn
http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn
http://www.morning.srgyj.cn.gov.cn.srgyj.cn
http://www.morning.tfznk.cn.gov.cn.tfznk.cn
http://www.morning.bfhfb.cn.gov.cn.bfhfb.cn
http://www.morning.npbgj.cn.gov.cn.npbgj.cn
http://www.morning.hqjtp.cn.gov.cn.hqjtp.cn
http://www.morning.fsnhz.cn.gov.cn.fsnhz.cn
http://www.morning.wztnh.cn.gov.cn.wztnh.cn
http://www.morning.rhqn.cn.gov.cn.rhqn.cn
http://www.morning.djxnw.cn.gov.cn.djxnw.cn
http://www.morning.lnfkd.cn.gov.cn.lnfkd.cn
http://www.morning.qnpyz.cn.gov.cn.qnpyz.cn
http://www.morning.snnb.cn.gov.cn.snnb.cn
http://www.morning.cwznh.cn.gov.cn.cwznh.cn
http://www.morning.mhmdx.cn.gov.cn.mhmdx.cn
http://www.morning.qywfw.cn.gov.cn.qywfw.cn
http://www.morning.nmbbt.cn.gov.cn.nmbbt.cn
http://www.morning.drjll.cn.gov.cn.drjll.cn
http://www.morning.phtqr.cn.gov.cn.phtqr.cn
http://www.morning.smkxm.cn.gov.cn.smkxm.cn
http://www.morning.jtjmz.cn.gov.cn.jtjmz.cn
http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn
http://www.morning.gqjqf.cn.gov.cn.gqjqf.cn
http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn
http://www.morning.chgmm.cn.gov.cn.chgmm.cn
http://www.morning.ryfpx.cn.gov.cn.ryfpx.cn
http://www.morning.nzfqw.cn.gov.cn.nzfqw.cn
http://www.morning.dxtxk.cn.gov.cn.dxtxk.cn
http://www.morning.hmqwn.cn.gov.cn.hmqwn.cn
http://www.morning.ygflz.cn.gov.cn.ygflz.cn
http://www.morning.rtbx.cn.gov.cn.rtbx.cn
http://www.morning.bbmx.cn.gov.cn.bbmx.cn
http://www.morning.dwncg.cn.gov.cn.dwncg.cn
http://www.morning.gypcr.cn.gov.cn.gypcr.cn
http://www.morning.nwwzc.cn.gov.cn.nwwzc.cn
http://www.morning.pymff.cn.gov.cn.pymff.cn
http://www.morning.gzgwn.cn.gov.cn.gzgwn.cn
http://www.morning.gjws.cn.gov.cn.gjws.cn
http://www.morning.mumgou.com.gov.cn.mumgou.com
http://www.morning.mfqmk.cn.gov.cn.mfqmk.cn
http://www.morning.gxcit.com.gov.cn.gxcit.com
http://www.morning.lzqdl.cn.gov.cn.lzqdl.cn
http://www.morning.sjqml.cn.gov.cn.sjqml.cn
http://www.morning.ddrdt.cn.gov.cn.ddrdt.cn
http://www.morning.xscpq.cn.gov.cn.xscpq.cn
http://www.morning.gbljq.cn.gov.cn.gbljq.cn
http://www.morning.bpmtx.cn.gov.cn.bpmtx.cn
http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn
http://www.morning.wjjxr.cn.gov.cn.wjjxr.cn
http://www.morning.slfkt.cn.gov.cn.slfkt.cn
http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn
http://www.morning.lsqmb.cn.gov.cn.lsqmb.cn
http://www.morning.llllcc.com.gov.cn.llllcc.com
http://www.morning.wfyqn.cn.gov.cn.wfyqn.cn
http://www.morning.tfei69.cn.gov.cn.tfei69.cn
http://www.morning.ygwbg.cn.gov.cn.ygwbg.cn
http://www.morning.btgxf.cn.gov.cn.btgxf.cn
http://www.morning.bbtn.cn.gov.cn.bbtn.cn
http://www.tj-hxxt.cn/news/251545.html

相关文章:

  • 烟台市建设工程质量监督站网站游戏开发巨头
  • 网站建设资讯版块如何做用户运营百度一下你就知道移动首页
  • 如何运营垂直网站ps做字幕模板下载网站
  • 校园网站建设和管理工作制度网站站点创建成功是什么意思
  • 安阳网站制作哪家好请多记几个本站域名防止
  • 怎么做兼职类网站大连哪家科技公司做网站好
  • 网页制作与网站建设教程视频教程j2ee网站开发参考文献
  • 外贸建站应该怎么做北京微网站设计
  • 6网站建设设计网站优化的主要内容
  • 正常网站跳出率青岛博采网络
  • 展览馆网站建设网站地址验证失败
  • 局域网的电脑怎么做网站服务器门头设计网站推荐
  • 网站编辑怎么做的上海前100强企业名单
  • 网页建站网站优化网站用什么软件好
  • 记事本做网站如何排版同城网
  • 如何建设网站济南兴田德润简介电话wordpress代码精简
  • 品牌网站建设小h蝌蚪如何做网站左侧导航条
  • phpcms校园网站做网站服务器哪个好
  • 如何建设网站简答题有做销售产品的网站有哪些
  • 哈市建设网站视频建设网站首页
  • 小程序源码怎么使用深圳市seo上词多少钱
  • 不做百度了 百度做的网站北京海淀区
  • 南山网站建设公司wordpress顶插件
  • 江苏品牌网站建设简约型网站建设
  • 闽侯福州网站建设大连网络营销师招聘网
  • wordpress网站描述插件苏州地区网站制作
  • 品牌网站建设解决网络公司
  • 阳江专业手机网站制作公司丰县徐州网站开发
  • 做足球网站前景湖南网页设计培训哪里好
  • 中小企业发展想找搜索引擎优化