【网络】网络层IP协议

[复制链接]
发表于 2025-10-25 02:19:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×

在应用层和传输层,我们已经办理了应用步伐之间的通讯标题,以及端到端的可靠通讯标题。
(“端”可以是应用步伐的实例、历程,大概是用户装备中的某个服务,端到端的通讯依赖于主机到主机的传输本领)
那在广阔的网络环境中,主机与主机又是怎么通讯的呢?
   网络层就是来办理该标题的
通讯两边的主机并没有直连,它们是先交给路由器,由路由器再做“局域网”的通讯标题。
  重谈TCP/IP
   

  • IP协议的核心作用:把数据包从一主机,跨网络转发到目标主机(不关心丢包,它也不知道是否丢了)
  • TCP + IP两协议的核心作用:将数据可靠的从A主机发送到B主机。 此时就办理了两通讯主机间隔变长的核心标题了,
  1. IP协议


   

  • 主机:配有 IP 地点,但是不举行路由控制的装备;
  • 路由器:既配有 IP 地点,又能举行路由控制;
  • 节点:主机和路由器的统称
  

   

  • 4位版本:IPV4/IPV6
  • 4位首部长度,4位范围是[0,15],根本单位是4字节,那也就是[0,60],由于报头占20字节,以是也就是[20,60],支持40个字节的选项。(如果没有选项,4位首部长度默以为5)
  • 8位服务范例:即数据报转发的战略。

    • 3 位优先权字段(已经弃用),4 位 TOS 字段,和1 位生存字段(必须置为 0)。
    • 4 位 TOS 分别表现:最小延时、最大吞吐量、最高可靠性、最小本钱。这四者相互辩论,只能选择一个。对于 ssh/telnet 如许的应用步伐,最小延时比力告急;对于 ftp 如许的步伐,最大吞吐量比力告急

  • 16位总长度:即该数据报的总长度,最小值为20字节(仅包罗最小的20字节IP报头)
  • 32位源IP/32位目标IP:表现发送端和吸收端
  • 8 位生存时间(Time To Live,TTL): 数据报到达目标地的最大报文跳数; 一样寻常是64. 每次颠末一个路由, TTL -= 1,不绝减到 0 还没到达, 那么就扬弃了. 这个字段告急是用来防止出现路由循环
  • 8 位协议:表现上层协议的范例(TCP/UDP)
  • 16 位头部校验和:利用 CRC 举行校验, 来辨别头部是否破坏
  背面先容
  

  • 16 位标识
  • 3 位标记字段
  • 13 位分片偏移
  2. 网段分别(重点)

2.1 根本共识

为什么要举行网段分别呢?
   由于只有源IP地点、目标IP地点是不敷的。网络通讯的门路应该被计划!(被运营商计划)
  IP地点 = 网络号 + 主机号
   

  • 网络号: 包管相互毗连的两个网段具有差别的标识;
  • 主机号: 同一网段内,主机之间具有雷同的网络号,但是必须有差别的主机号
  网络分别的意义在于:先根据目标网络号镌汰非目标网络,到达目标网络后,再根据目标主机号举行内网转发,进步团体的查找转发服从了

   

  • 差别的子网着实就是把网络号雷同的主机放到一起.
  • 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号划一,但是主机号必须不能和子网中的其他主机重复
  • 由于路由器属于两个子网,以是它肯定要有两个IP地点。
  通过公道设置主机号和网络号, 就可以包管在相互毗连的网络中, 每台主机的 IP 地点都不雷同.
那么标题来了,手动管理子网内的 IP,是一个相称贫困的事变
   

  • 有一种技能叫做 DHCP,可以大概主动的给子网内新增主机节点分配 IP 地点,制止了手动管理 IP 的未便
  • 一样寻常的路由器都带有 DHCP 功能,因此路由器也可以看做一个 DHCP 服务器。子网中主机的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
  2.2 子网掩码

随着 Internet 的飞速发展,上方分别方案的范围性很快显现出来,大多数构造都申请 B 类网络地点,导致 B 类地点很快就分配完了,而 A 类却浪费了大量地点;
   

  • 比方, 申请了一个 B 类地点,理论上一个子网内能允许 65535 千多个主机,A 类地点的子网内的主机数更多。然而现实网络架设中,不会存在一个子网内有这么多的环境,因此大量的 IP 地点都被浪费掉了
  针对这种环境提出了新的分别方案, 称为 CIDR(Classless Interdomain Routing):
   引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  

  • 子网掩码也是一个 32 位的正整数,通常用一串 “0” 来末端;
  • 将 IP 地点和子网掩码举行 “按位与” 利用,得到的效果就是网络号;
  • 网络号和主机号的分别与这个 IP 地点是 A 类、 B 类还是 C 类无关;
  

可见,IP 地点与子网掩码做与运算可以得到网络号,主机号从全 0 到全 1 就是子网的地点范围;
IP 地点和子网掩码另有一种更简便的表现方法,比方 140.252.20.68/24,表现 IP 地点为140.252.20.68,子网掩码的高 24 位是 1,也就是 255.255.255.0
特殊的 IP 地点
   

  • 将 IP 地点中的主机地点全部设为 0, 就成为了网络号, 代表这个局域网;
  • 将 IP 地点中的主机地点全部设为 1, 就成为了广播地点, 用于给同一个链路中相互毗连的全部主机发送数据包;
  • 127.*的 IP 地点用于本机环回(loop back)测试,通常是 127.0.0.1
  我们知道,IP 地点(IPv4)是一个 4 字节 32 位的正整数,那么一共只有 2 32 个 IP地点,大概是 43 亿左右。而 TCP/IP 协议规定,每个主机都必要有一个 IP 地点,这意味着, 一共只有 43 亿台主性能接入网络么?
现实上,由于一些特殊的 IP 地点的存在,数量远不敷43 亿;别的 IP 地点并非是按照主机台数来设置的,而是每一个网卡都必要设置一个或多个 IP 地点。
CIDR 在肯定水平上缓解了 IP 地点不敷用的标题(进步了利用率,淘汰了浪费,但是 IP地点的绝对上限并没有增长),仍然不是很够用. 这时间有三种方式来办理:
   

  • 动态分配 IP 地点: 只给接入网络的装备分配 IP 地点. 因此同一个 MAC 地点的装备, 每次接入互联网中, 得到的 IP地点不肯定是雷同的;
  • NAT 技能(重点):通过地点转换机制,使得利用私有IP地点的内部网络可以大概安全地访问外部网络,并办理IP地点不敷的标题(即允许差别的子网中有雷同的私有IP地点)
  • IPv6: IPv6 并不是 IPv4 的简朴升级版.这是互不干系的两个协议, 相互并不兼容; IPv6 用 16 字节 128 位来表现一个 IP 地点; 但是现在 IPv6 还没有遍及;
  2.3 私有 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不能重复!
2.4 路由器


一个路由器可以设置两个 IP 地点, 一个是 WAN口 IP, 一个是 LAN口 IP(子网IP).


  • 路由器LAN 口毗连的主机,都附属于当前这个路由器的子网中.
  • 差别的路由器,子网 IP 着实都是一样的(通常都是 192.168.1.1)。子网内的主机IP 地点不能重复,但是子网之间的 IP 地点就可以重复了.
  • 每一个家用路由器,着实又作为运营商路由器的子网中的一个节点。如许的运营商路由器大概会有很多级,最外层的运营商路由器, WAN 口 IP 就是一个公网 IP 了。
那IP数据包具体是怎么转发的呢?

子网内的主机必要和外网举行通讯时,路由器将 IP 首部中的 IP 地点举行更换(更换成 WAN 口 IP),如许逐级更换,终极数据包中的 IP 地点成为一个公网 IP,这种技能称为 NAT(Network Address Translation)网络地点转换)。

从公网又是怎么转发到内网上的呢? - - 背面先容
3. 路由

路由的本质:就是在复杂的网络布局中,找出一条通往尽头的门路
   由于目标IP = 目标网络 + 目标主机,那路由的时间,就只关心目标网络(即路由的根本单位是目标网络)
  

路由的过程,就是如许一跳一跳 “问路” 的过程,所谓的一跳就是从一个子网跳转到另一个子网。
   IP 数据包的传输过程也和问路一样。
  

  • 当 IP 数据包,到达路由器时,路由器会先检察目标 IP;
  • 路由器决定这个数据包是能直接发送给目标主机,还是必要发送给下一个路由器
    (路由器肯定会尽大概的帮我举行路由,由于报文千里迢迢到这里不轻易,以是一样寻常会设置默认路由,谁有外部网络的通讯本领,一样寻常会被设置为缺省路由);
  • 依次反复,不绝到达目标 IP 地点;
  那么怎样判定当前这个数据包该发送到那里呢? 这个就依赖每个节点内部维护一个路由表;
   路由表可以利用 route 下令检察
  

  • 如果目标 IP 掷中了路由表,就直接转发即可;
  • 当目标地点与路由表中别的行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地点。
  假设某主机上的网络接口设置和路由表如下:

这台主机有两个网络接口,一个网络接口连到 192.168.10.0/24 网络,另一个网络接口连到 192.168.56.0/24 网络;
   在路由表中,各项的寄义如下:
  

  • Destination:表现数据包必要到达的目标网络的地点
  • Genmask:子网掩码
  • Gateway:是下一跳地点
  • Iface:发送接口,表现数据包从哪个接口发出
  • Flags 中的 U 标记表现此条目有效(可以禁用某些 条目),G标记表现此条目标下一跳地点是某个路由器的地点,没有 G 标记的条目表现目标网络地点是与本机接口直接相连的网络,不必经路由器转发;
  转发过程例 1: 如果要发送的数据包的目标地点是 192.168.56.3
   

  • 跟第一行的子网掩码做与运算得 到 192.168.56.0,与第一行的目标网络地点不符
  • 再跟第二行的子网掩码做与运算得 到 192.168.56.0,正是第二行的目标网络地点,因此从 eth1 接口发送出去;
  • 由于 192.168.56.0/24 正 是与 eth1 接口直接相连的网络(Flags不带G),因此可以直接发到目标主机,不必要经路由器转发;
  转发过程例 2: 如果要发送的数据包的目标地点是 202.10.1.2
   

  • 依次和路由表前几项举行对比,发现都不匹配;
  • 按缺省路由条目,从 eth0 接口发出去,发往 192.168.10.1 路由器;
  • 由 192.168.10.1 路由器根据它的路由表决定下一跳地点;
  4. IP报文分片标题

为了讨论IP报文的分片标题,我们先思考一下为什么TCP协议中滑动窗口中的数据,不打包成一个报文发送呢?为什么要一段一段的发?
   起首,传输层要依次将报文向下层发送(数据段–>数据报–>数据帧),由于数据链路层规定,单次发送数据帧的有效载荷不能凌驾MTU(最大传输单位),当一个 IP 数据报的巨细凌驾了网络的 MTU 限定时,就必要举行分片!
  以是,当IP报文太长时,要举行分片;但是谁来分片呢?网络层自己分,因此网络层报头中多了3个字段。

初次我们要明确一下,分片是好还是不好呢?
   不好,丢包概率增长了。
  

  • 传输层向下发送一个X巨细的报文段,对端传输层就只关心收到的报文段巨细是不是X,它不关心是否分片了
  • 分片以后,发送的包更多了,丢包的概率增长了;对端网络层无法对包举行组装,因此就会被传输层判定为丢包。
  • 以是,丢包不但仅是在“路上”丢,也有大概是分片后导致拼不起来了,造成丢包
  以是,分片不能作为网络发送的主流,那怎样不分片呢?- - 网络层不要发太长的报文,但是网络层决定不了,真正决定发多少的是传输层,以是标题的根源就是传输层不要发太长的报文段,以是滑动窗谈锋会一段一段的发(它思量了分片的标题)


那如果要举行分片,怎样分呢?
要讨论怎样分,我们要先分析它怎么能将分片完备的组装


  • 吸收方怎样知道自己收到的报文分片了?
  • 吸收方怎样知道自己收到的报文收全了?
  • 怎样拼成完备的报文?
这些标题,由IP报头中的3个字段办理



  • 16位标识:每一个报文,都有一个ID;如果报文分片了,分片后的报文ID雷同
  • 3位标记:

    • 第一位生存(生存的意思是现在不消,但是还没想好说不定以后要用到)
    • 第二位为 1 表现克制分片,这时间如果报文长度凌驾 MTU,IP 模块就会扬弃报文
    • 第三位表现"更多分片",如果分片了的话,末了一个分片置为 0,其他是 1

  • 3 位分片偏移:是分片相对于原始 IP 报文中有效载荷开始处的偏移,着实就是在表现当前分片在原报文中处在哪个位置。(片偏移必须是8的整数倍)
收到分片后怎样组装呢?
   

  • 当目标主机的 IP 层吸收到这些分片后, 会根据标识字段将属于同一个数据报的全部分片挑选出来。
  • 排序与组装:

    • 利用片偏移字段, IP 层会对属于同一个数据报的分片举行排序。
    • 对排序后的效果分析,根据片偏移,以及前一片的巨细决定是否一连
    • 当全部的分片都到达并正确排序后, IP 层会将这些分片重新组装成一个完备的 IP 数据报。

  具体怎样分呢?
   

  • 分的是IP报文的有效载荷
  • 片偏移,是指在原始报文中有效载荷的偏移量
  • 片偏移的具体数字,必须是8的整数倍。除了末了一个报文之外,其他报文的长度必须是 8 的整数倍,否则报文就不一连了

    • IP报文的总长度是16位,但是片偏移只有13位,无法全部表现;8 = 2 3,对一个报文分片和组装时,都对报文除以8,就可以办理。

  分片后,每一片都是一个IP报文!



回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表