【网络原理 5 】网络层中的 ” 主宰 “ IP 协议

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇

                                  IP 协议相关特性       

🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇🎇

今日推荐歌曲:    That's Us   -- Anson Seabra      🎵🎵


系列文章目录

【 网络原理 1】 网络编程原理基础知识-CSDN博客

【网络原理 2】UDP 协议的报文结构和注意事项-CSDN博客

【网络原理 3】TCP协议的相关特性(三次握手,四次挥手)(万字详解)看完必懂 !-CSDN博客


目录

一、IP 协议

1. 基本概念

2. 协议头格式

二、地址管理

⽹段划分

三、特殊的IP地址

IP地址的数量限制

私有IP地址和公⽹IP地址

四、路由选择

总结


前言

IP(Internet Protocol,互联网协议)是互联网中最基本、最重要的协议之一,它承载了互联网上几乎所有数据的传输。作为网络层协议,IP负责将数据从一个网络节点传输到另一个网络节点,而不管这两个节点之间的具体物理连接是什么样的。IP协议的设计理念是为了提供一种灵活、可靠、且能够适应不断变化的网络环境的数据传输机制。

IP协议的发展经历了几个版本,其中IPv4是最早和最广泛使用的版本,但随着互联网的快速发展和网络设备的普及,IPv4的地址空间已经不再满足需求,IPv6作为其后继版本被设计用来解决IPv4地址枯竭的问题。

IP协议的特点包括无连接性、不可靠性、分组交换等,这些特性使得IP协议能够灵活地适应不同的网络环境和应用需求。同时,IP地址作为唯一标识网络中设备的地址,也是IP协议的重要组成部分之一,它为互联网上的每个设备提供了一个独一无二的标识符。

总的来说,IP协议是互联网通信的基础,它的设计和发展为全球范围内的信息交流和互联网应用提供了可靠的基础支撑。


一、IP 协议

1. 基本概念

IP(Internet Protocol,互联网协议)是因特网中的基本网络层协议,负责在网络中实现数据包的路由和转发。以下是IP协议的基本概念:

  1. IP地址:IP地址是用于在网络中唯一标识设备和主机的数字标识符。IPv4地址由32位二进制数表示,通常以点分十进制表示(例如,192.0.2.1),而IPv6地址由128位二进制数表示,通常以冒号分隔的十六进制表示(例如,2001:0db8:85a3:0000:0000:8a2e:0370:7334)。IP地址分为网络地址和主机地址两部分,用于在网络中进行路由和识别。

  2. 数据包:在IP协议中,数据被划分为称为数据包(packet)的小块。每个数据包包含了发送方和接收方的IP地址以及数据本身。数据包在网络中通过路由器和其他网络设备进行转发和传输。

  3. 数据报:IP数据包也称为数据报(datagram)。数据报是在网络中以无连接方式传输的信息单元,它们独立于彼此,每个数据报都包含了足够的信息来完成其传输,而无需先建立连接。

  4. 路由:路由是指确定数据包从发送方到目标地址之间的路径的过程。在IP网络中,路由器根据目标地址和路由表将数据包转发到下一个节点,直到到达目标主机。

  5. 转发:转发是指路由器将接收到的数据包从一个接口转发到另一个接口的过程。路由器根据目标地址的网络部分进行转发决策,将数据包发送到适当的接口以继续传输。

  6. 子网:子网是将大型网络划分为较小、更易管理的网络的方法。每个子网都有一个唯一的IP地址范围,并且可以有自己的子网掩码和路由规则。

  7. IPv4和IPv6:IPv4是目前最常用的IP协议版本,但由于IPv4地址空间有限,正在逐渐被IPv6取代。IPv6提供了更大的地址空间和其他改进,以应对日益增长的互联网连接设备。

  8. IP协议簇:IP协议簇是一组协议,包括IP、ICMP(Internet Control Message Protocol)和IGMP(Internet Group Management Protocol)等。这些协议共同构成了互联网的基础通信协议。

总的来说,IP协议是互联网中的基本网络层协议,负责在网络中实现数据包的路由和转发,以及设备之间的通信。


2. 协议头格式

  • 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4.
  • 4位头部长度(header length):IP头部的长度是多少个32bit,也就是length*4的字节数.4bit表示最大的数字是15,因此IP头部最大长度是60字节.
  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0).4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本.这四者相互冲突,只能选择一个.对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要..16位总长度(total length): IP数据报整体占多少个字节.
  • 16位标识(id):唯一的标识主机发送的报文.如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的.
  • 3位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到).第二位置为1表示禁止分片,这时候如果报文长度超过MTU, IP模块就会丢弃报文.第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0.类似于一个结束标记.
  • 13位分片偏移(framegament offset):是分片相对于原始IP报文开始处的偏移.其实就是在表示当前分片在原报文中处在哪个位置.实际偏移的字节数是这个值*8得到的.因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了).
  • 8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数.一般是64.每次经过一个路由, TTL -=1,一直减到O还没到达,那么就丢弃了.这个字段主要是用来防止出现路由循环
  • 8位协议:表示上层协议的类型
  • 16位头部校验和:使用CRC进行校验,来鉴别头部是否损坏..32位源地址和32位目标地址:表示发送端和接收端.
  • 选项字段(不定长,最多40字节):略


二、地址管理

⽹段划分

IP地址分为两个部分,⽹络号和主机号:

⽹络号:保证相互连接的两个⽹段具有不同的标识;

主机号:同⼀⽹段内,主机之间具有相同的⽹络号,但是必须有不同的主机号;

• 不同的⼦⽹其实就是把⽹络号相同的主机放到⼀起.

• 如果在⼦⽹中新增⼀台主机,则这台主机的⽹络号和这个⼦⽹的⽹络号⼀致,但是主机号必须   不能和 ⼦⽹中的其他主机重复. 通过合理设置主机号和⽹络号,就可以保证在相互连接的⽹络中,每台主机的IP地址都不相同. 那么问题来了,⼿动管理⼦⽹内的IP,是⼀个相当⿇烦的事情.

• 有⼀种技术叫做DHCP,能够⾃动的给⼦⽹内新增主机节点分配IP地址,避免了⼿动管理IP的不便.

• ⼀般的路由器都带有DHCP功能.因此路由器也可以看做⼀个DHCP服务器.

如下图:

​过去曾经提出⼀种划分⽹络号和主机号的⽅案,把所有IP地址分为五类,如下图所⽰。

随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类⽹络地址,导致B 类地址很快就分配完了,⽽A类却浪费了⼤量地址

• 例如,申请了⼀个B类地址,理论上⼀个⼦⽹内能允许6万5千多个主机.A类地址的⼦⽹内的主机数更 多.

• 然⽽实际⽹络架设中,不会存在⼀个⼦⽹内有这么多的情况.因此⼤量的IP地址都被浪费掉了.

针对这种情况提出了新的划分⽅案,称为CIDR(ClasslessInterdomainRouting):

• 引⼊⼀个额外的⼦⽹掩码(subnetmask)来区分⽹络号和主机号;

• ⼦⽹掩码也是⼀个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地址⽤于本机环回(loopback)测试,通常是127.0.0.1

IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数.那么一共只有2的32次方个IP地址,大概是43亿左右.而TCP/IP协议规定,每个主机都需要有一个IP地址.
这意味着,一共只有43亿台主机能接入网络么?
实际上,由于一些特殊的IP地址的存在,数量远不足43亿;另外IP地址并非是按照主机台数来配置的,i是每一个网卡都需要配置一个或多个IP地址.
CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率,减少了浪费,但是IP地址的绝对上限并有增加),仍然不是很够用.这时候有三种方式来解决:

• 动态分配IP地址:只给接⼊⽹络的设备分配IP地址.因此同⼀个MAC地址的设备,每次接⼊互联⽹中, 得到的IP地址不⼀定是相同的; 

• NAT技术(会在下一篇文章重点介绍);

• IPv6:IPv6并不是IPv4的简单升级版.这是互不相⼲的两个协议,彼此并不兼容;IPv6⽤16字节128位 来表⽰⼀个IP地址;但是⽬前IPv6还没有普及;

截⽌到2023年8⽉28⽇,我国IPv6活跃⽤⼾数达7.67亿(⽹⺠总数为10.79亿,占⽐71%),世界领 先. ⼤⼒发展IPv6的原因,参考以下视频.

电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅_哔哩哔哩_bilibili

私有IP地址和公⽹IP地址

如果⼀个组织内部组建局域⽹,IP地址只⽤于局域⽹内的通信,⽽不直接连到Internet上,理论上使⽤任意 的IP地址都可以,但是RFC1918规定了⽤于组建局域⽹的私有IP地址

• 10.*,前8位是⽹络号,共16,777,216个地址

• 172.16.到172.31.,前12位是⽹络号,共1,048,576个地址

• 192.168.*,前16位是⽹络号,共65,536个地址 包含在这个范围中的,都成为私有IP,其余的则称为全局IP(或公⽹IP); 

  • ·一个路由器可以配置两个IP地址,一个是WAN口IP,一个是LAN口IP(子网IP).·路由器LAN口连接的主机,都从属于当前这个路由器的子网中.
  • ·不同的路由器,子网IP其实都是一样的(通常都是192.168.1.1).子网内的主机IP地址不能重复.但是子
  • 网之间的IP地址就可以重复了.
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点.这样的运营商路由器可能会有很多级,最外层的运营商路由器,WAN口IP就是一个公网IP了.
  • 子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WAN口IP),这样逐级替换,最终数据包中的IP地址成为一个公网IP.这种技术称为NAT(Network AddressTranslation,网络地址转换).
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上.这样的服务器可以在阿里云/腾讯云上进行购买.

四、路由选择

路由选择是指在计算机网络中确定数据包从源节点到目标节点所经过的路径的过程。这个过程涉及到路由器和交换机等网络设备根据特定的路由选择算法来做出决策,以确保数据包能够按照最佳路径传输。以下是关于路由选择的总结:

  1. 路由器:路由器是负责在网络中转发数据包的关键设备。它们通过检查数据包的目标地址,并根据预先配置的路由表来决定将数据包发送到哪个接口,以及下一个路由器的地址。

  2. 路由表:路由表是路由器中存储的用于路由选择的数据结构。它包含了一系列目标网络地址以及与之对应的下一跳信息,路由器根据接收到的数据包的目标地址,在路由表中查找匹配的目标网络,并决定如何转发数据包。

  3. 路由选择算法:路由选择算法是指路由器根据路由表中的信息,选择最佳路径将数据包从源节点传输到目标节点的算法。常见的路由选择算法包括距离矢量路由选择算法(如RIP)、链路状态路由选择算法(如OSPF)、路径向量路由选择算法(如BGP)等。

  4. 距离:路由选择算法通常会考虑到路径的距离或成本,以确定最佳路径。距离可以是物理距离、网络拥塞程度、延迟、带宽等因素的综合考量。

  5. 负载均衡:一些路由选择算法还可以实现负载均衡功能,将流量分散到多条路径上,以提高网络的吞吐量和性能。

  6. 动态路由协议:动态路由协议是一种可以自动更新路由表的协议,它们能够在网络拓扑发生变化时通知路由器更新路由信息,以保持网络的连通性和最佳路径。

  7. 路由优先级:有时路由器会根据路由的优先级来选择路径,例如,手动配置的路由可能比动态学习的路由优先级更高。

总的来说,路由选择是网络中保证数据包能够按照最佳路径传输的关键过程,它涉及到路由器、路由表、路由选择算法等多个方面的技术和概念。


总结

以上就是 IP 协议的部分知识内容,后续会有新文章继续补充。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 07:08:04       5 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 07:08:04       5 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 07:08:04       4 阅读
  4. Python语言-面向对象

    2024-05-13 07:08:04       6 阅读

热门阅读

  1. react如何拿输入框的值

    2024-05-13 07:08:04       18 阅读
  2. 嵌入式交叉编译:ffmpeg及相关库

    2024-05-13 07:08:04       18 阅读
  3. SASS预处理器的用法

    2024-05-13 07:08:04       19 阅读
  4. Elasticsearch 8.1官网文档梳理 -综述

    2024-05-13 07:08:04       15 阅读
  5. 抽象类与接口

    2024-05-13 07:08:04       17 阅读
  6. C++简易贪吃蛇

    2024-05-13 07:08:04       21 阅读
  7. linux中passwd --stdin命令含义

    2024-05-13 07:08:04       18 阅读
  8. TCP实现文件传输以及下载

    2024-05-13 07:08:04       20 阅读