0
点赞
收藏
分享

微信扫一扫

计算机网络(十) —— IP协议详解,理解运营商和全球网络

奋斗De奶爸 2024-10-07 阅读 7

目录

一,关于IP

1.1 什么是IP协议

 1.2 前置认识

二,IP报头字段详解

三,网段划分

3.1 IP地址的构成

3.2 网段划分

3.3 子网划分

3.4 IP地址不足问题

四,公网IP和私有IP

五,理解运营商和全球网络

六,路由

七,IP报文的分片与组装


一,关于IP

1.1 什么是IP协议

IP协议的本质工作:提供一种能力,将数据从A主机跨网络送到B主机。

用户需要的是:提供一种能力,将数据“可靠地将数据从A主机跨网络送到B主机;按照现在的网络,将数据成功送过去的概率很高,但不是100%,所以传输层提供策略,下层提供能力,两者结合就能保证“我”每次都能考满分。

 1.2 前置认识

数据发送的过程中会经过很多路由器,就好比我们网络基础1的旅游的例子

  1. 要对所有的主机进行标识,用源ip和目的ip来标识源主机和目的主机;IP分为私有IP和共有IP
  2. 旅游的例子,我们要先去故宫,得先去北京:“去目标城市,去目标地点”;唐僧要去西天的大雷音寺,拜见佛祖求取真经:“西天就是目标城市,大雷音寺就是目标地点,但是到了目标地点还不够,还得通过端口找到佛祖这个进程,然后交数据”

我们处在一个精心设计的世界中,你有身份证号,上学时有学号,上班时有工号,但是我们学号不是单纯的数据,是有格式的:学号 = 年纪编号 + 学院编号 + 专业编号 + 班级编号 + 学号03

我们把我自己的学院编号叫做源IP地址,把要归还的校园卡的学校叫做目的IP,我的群叫做局域网主机,把主席叫做局域网出口路由器,把主席群叫做公网,像这样一个一个群,就能提高效率,因为一次可以排除很多东西

IP协议意义:构建网络的时候,为我们将来定位一台主机,提供基础保证。

二,IP报头字段详解

  • 真实报头长度 = 4位首部长度(假设是x) * 4,范围为[0000, 1111],换成十进制就是[0, 15]
  • 标准报头长度为20字节,那么x就是5,首部长度就是[5, 15],就是[20, 60]字节之间,这和Tcp是一模一样的
  • 代表报文总长度,所以报文长度 = 固定长度报头 + 自描述字段,
  • 有效载荷长度 = 总长度 - 固定长度报头,就能将有效载荷和报头分离
  • 这个是固定死的,对于IPv4来说就是4
  • 但是现在有个问题,ip地址是32位,也就是42亿个,现在入网设备太多了,面临着“IP地址不足”的问题
  • 解决方法有很多,NAT,还有IPv6,其中IPv6相当于新的协议了,它用128位来标识,IPv6和IPv4不兼容,IPv6我国最强大,主要用在国内内网,IPv4主要用在公网,这个我们后面讲运营商在讲,现在默认认为是4
  • 丢包问题是无法解决的,这4个选项是为了在进行数据包转发时,给路由器提供转发依据的,提高可靠性,了解一下即可
  • 3位优先权字段(已经弃用),4位TOS字段, 和1位保留字段(必须置为0)。4位 TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于 ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要
  • 数据每经过一个路由器就是一次转发,但是网络太大了可能出bug,而且接收方可能会挂掉无法接收数据,那么IP报文会被无限转发,这种报文称为流离报文
  • 所以我们给每个报文设置一个生存时间,表示该报文在转发的时候能经过的路由器的跳数,每经过一个路由器,生存时间就 -=1,如果为0时,路由器直接丢弃报文
  • 指的就是我们要把IP的有效载荷交付给上层的哪一个协议
  • 下层分离报头和有效载荷后,根据8位协议将有效载荷交付给上层的指定协议
  • 我们以前在进行socket套接字编码的时候,要求填充 ip + port,现在可以认为:我们在应用层要把点分十进制的ip字符串转化成4字节的ip是为了填充报头的这两个内容的,而32位源IP和32位目的IP是提供给路由器让它进行路径选择的
  • Tcp只存在操作系统上,在各路由器中是没有Tcp层的
  • 只有通信双方主机具有Tcp层,因为所有路由器只工作在网络层。(路由器可能有Tcp,但是不用)

三,网段划分

3.1 IP地址的构成

  • 路由器本质也是一个特定子网的主机,所以路由器它自己也要配置IP地址和主机号
  • 路由器实现转发,那么路由器要连接至少两个局域网/子网,所以路由器也一定要配置多个IP地址和主机号 --> 原因:路由器有多张网卡
  • 路由器一般是一个子网中的第一台设备,它的IP地址一般都是“网络号.1”
  • 路由器的核心功能是IP报文的转发,但是路由器的功能不仅仅如此,比如构建局域网/子网,子网中的主机的IP就是路由器分配的,这个后面公网IP和私有IP再将讲
  • 内网IP:如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复;并且路由器里面也有操作系统的,所以路由器会对子网IP做管理(DHCP协议)

3.2 网段划分

IP分为网路地址和主机地址,曾经提出的划分这两个地址的方式,是把IP地址分为5类,称之为分类划分法:

各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

但是随着网络发展,这种划分方式问题很快出现:

  • 大多数组织都申请的B类网络地址,导致B类网络地址很快就被分完了
  • 所以A类浪费了大量的地址,而且每一个子网中的主机号也很难全部用完,例如,申请一个B类地址,理论上一个B类子网能构建6万5千多个主机IP,A类的更多,但是实际上一个子网不会有这么多主机,因此大量的IP被浪费掉了
  • 所以网络的研究员针对性地提出了一种划分方案:CIDR

3.3 子网划分

注意:该方法是针对上面五种IP的类类型提出的,因为可以看到有些IP地主机号太多了,实际情况下不需要这么多主机,所以需要将主机号减少,减少IP的主机数,就能划分出更多子网,减少IP地址浪费

有了CIDR之后,一个网络就被更细粒度地划分成了一个个更小地子网,这样IP地主机号就越来越小,就可以减少IP地址被大量浪费,下面是具体步骤:

  • 比如在某个子网中,将IP地2前24位作为网络号,那么该网络地子网掩码地32个比特位中前24位就是1,后面8位就是0,每8位以点隔开,最后就是255.255.255.0
  • 假设子网中有一台主机192.128.128.0,那么将这个IP与掩码进行“按位与(&)”计算后,就是192.168.128.0,就是这个子网对应地网络号
  • 子网掩码,可以对32位IP进行任意划分,为了书写方便,我们一般把子网掩码这样表示:192.168.128.0 /24,“/24“ 表示整个IP地址当中前24个比特位位1,后面8个为0

3.4 IP地址不足问题

CIDR虽然一定程度上缓解了IP地址浪费的问题,但是没有增加IP地址的绝对上限,仍然不是很够用,所以有下面三种解决方法:

  • 动态地址分配:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的,简单来说就是路由器发放和回收IP,在校园网中,我们在宿舍,教室和图书馆接入的校园网,每次的IP都是不相同(共享IP,你要用就给你,不用或用完了还给我)
  • NAT技术,后面介绍
  • IPv6:不是IPv4的升级版,是真正变革性的技术,与IPv4毫不相干,是两种不同的协议,用128字节表示一个地址,但是IPv6还没有普及
     

四,公网IP和私有IP

如果一个组织内部组件局域网,在这个局域网内,IP地址只用于局域网内地通信,而不直接连接到公网上,理论上使用任何IP都可以,但是为了规范,RFC 1918 规定了用于组件局域网地私有IP地址:

  • 10.* ,前8位是序列号,共16777216个地址
  • 172.16.*到172.31.*,前12位是网络号,共1048576个地址
  • 192.168.*,前16位是网络号,共65536个地址

包含在上面三个范围中地,都成为私有IP,其余地都是公网IP,我们连接云服务器时,连接的这个IP就是云服务器地公网IP:

同时,我们也可以通过ifconfig这个命令来查看我们这台机器私有IP:

在我们Windows的cmd控制台上输入ipconfig命令,也可以看到大量以192.168开头的私有IP:

 在我们的使用生涯中,我们从一开始使用的IP其实都是私有IP,在云服务器中才接触到公网IP

五,理解运营商和全球网络

六,路由

主机A要把数据发给主机B,是要先根据目标IP,经过路由完成转发,实际是一跳一跳转发的

我们可以查看当前主机的路由表:

IP数据包的传输过程中会遇到很多路由器,每当数据包到一个路由器后,路由器会查看该数据的目的IP地址,并告知数据下一跳该往哪跳

我们查路由器表,会有下面四种结果:

  • 路由器不知道下一跳要去哪(这种情况基本不会发生,如果发生就是该路由器没配置好,算法设计有问题。)
  • 给你转到下一跳
  • 路由器不清楚,但是会给我们转入默认路由
  • 已经到达目标局域网的入口路由器

对于转入默认路由,一般是“同网段的另一台路由器”,但是一个子网一般只有一个路由器,所以我们连接的路由器一般都是子网IP对应的1号路由器,如果我判断一个报文的目的IP不是我这个子网的,所以直接交给下一跳

七,IP报文的分片与组装

实际上在一台主机上,报文并没有通过网络层直接发出去,而是继续交给了自己的下一层协议(数据链路层,属于网卡的驱动层,还有物理层),数据链路再去转发给路由器或者同一个网段的主机。

但是数据链路层,无法一次发送过大的报文,所以就要求上层不能给我交付过大的报文

ifconfig命令可以查看当前协议栈的一些信息,其中上面红框框的 mtu 表示当前的数据链路层的MAC帧一次最多发送1500字节的数据,这个数据包括IP的报头和IP的有效载荷

但是,如果一个报文超过1500字节,但是又数据链路层又不得不发,这时候就会对报文进行分片, 而且既然有分片,那么必定有组装,所以就要求IP报头里包含分片组装的相关信息:

  • 其中16位标识就是IP报文的编号,分片之后的IP报文编号是相同的
  • 对于3位标志位字段,第二位为0,标识允许切片,第三位用来结束标记,表示当前是否是最后一个小片,是的话为0,不是为1
  • 对于13位偏移,假设一个报文都分成了很多片,这个偏移量表示这个小片在原来的大报文里的偏移量,用于组装报文
  • 对于分片后的每个IP报文,都会重新添加IP报头的
举报

相关推荐

0 条评论