06.计算机网络——IP协议

文章目录


网络层

IP协议

  • IP协议提供一种将数据从A主机送达到B主机的能力,进行网络层的通信。

​ IP协议


基本概念

  • 主机 ------ 配有IP地址, 但不进行路由控制的设备;

  • 路由器 ------ 配有IP地址, 又能进行路由控制的这杯;

  • 节点 ------ 主机和路由器的统称;


协议头格式

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

如何解包

​ IP协议会根据16位总长度和4位首部长度获取有效载荷数据的大小,即:有效载荷=16位总长度 - 4位首部长度*4。

如何交付

​ IP协议会根据报头中的8位协议字段决定将数据交付给TCP还是UDP协议。


网段划分

IP地址分为两个部分: 网络号主机号

  • 网络号: 表征不同的区域,保证相互连接的两个网段具有不同的标识。网络号在查找的过程中逐步变大,并且收敛。

  • 主机号: 同一网段内, 主机必须有不同的主机号。不同的子网其实就是把网络号相同的主机放到一起。

  • 通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。

    DHCP技术能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。(一般的路由器都带有DHCP功能)


子网掩码

  • 随着Internet的飞速发展,引入一个额外的子网掩码 来划分网络号和主机号的方案,称为CIDR(Classless Interdomain Routing)。子网掩码也是一个32位的正整数,通常用一串 "0" 来结尾;将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号。
  • IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围。
  • 给不同的路由器配置不同的子网掩码,就能看到不同的网络号。目的IP & 当前路由器的子网掩码=报文要去的网络,从而进行数据之间的转发。

特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成了网络号, 代表这个局域网。
  • 将IP地址中的主机地址 全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的IP地址用于本机环回测试,通常是127.0.0.1。

IP地址的数量限制

​ IPv4是一个32位的正整数,那么一共只有 2的32次方 个IP地址, 大概是43亿左右,CIDR在一定程度上缓解了IP地址不够用的问题,但是IP地址的绝对上限并没有增加,仍然不够用。

这时候有三种方式来解决:

  • 动态分配IP地址: 只给接入网络的设备分配IP地址,同一个MAC地址的设备每次接入互联网中得到的IP地址不一定相同的。
  • NAT技术。
  • IPv6: IPv6并不是IPv4的简单升级版,彼此并不兼容; IPv6用16字节128位来表示一个IP地址,但是目前IPv6还没有普及。

私有IP地址和公网IP地址

RFC1918规定用于组建局域网的私有IP地址:

  • 在这些范围内的, 都成为私有IP, 其余的则称为公网IP;
  • 私有网络的IP是局部的,在不同的子网中可以重复,大大缓解了IP不足的问题
  • 一个路由器可以配置两个IP地址, 一个是WAN口IP/公网ip, 一个是LAN口IP/子网IP。
  • 不同的路由器, 子网IP通常都是192.168.1.1,因为子网属于改路由器自己构建的,路由器LAN口连接的主机,都从属于当前这个路由器的子网中。
  • 同时,路由器也是运营商路由器的子网中的一个节点,WAN口IP就是在上级子网给路由器分配的IP。
  • 子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP) , 这样逐级替换 ,最终数据包中的IP地址成为一个公网IP,就可以进行通信了,这种技术称为NAT(Network Address Translation,网络地址转换)。

路由

​ 路由是指:多台设备进行通信时,彼此之间发送具有IP特征的数据包,当数据包经过具备路由功能的设备时,设备进行解包并查看IP报文的目的网络地址,并于自身维护的路由表条目进行匹配,符合则进行转发,否则丢弃报文,回应网络不可达。

​ IP数据包的传输过程也和问路一样。当IP数据包到达路由器时,路由器会先查看目的IP,路由器内部维护一个路由表判定当前这个数据包该发送到哪里,依次反复, 一直到达目标IP地址。

假设某主机上的网络接口配置和路由表如下:

  • 这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到

    192.168.56.0/24网络;

  • 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接

    口,Flags中的U标志表示此条目有效),G标志表示此条目的下一跳地址是某个路由器的

    地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

  • 转发过程: 如果要发送的数据包的目的地址是192.168.56.3跟第一行的子网掩码做与运算得到192.168.56.0,与第一行的目的网络地址不符,再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去。由于192.168.56.0/24正 是与eth1接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转发。


相关推荐
菜包eo14 分钟前
二维码驱动的独立站视频集成方案
网络·python·音视频
即将头秃的程序媛25 分钟前
centos 7.9安装tomcat,并实现开机自启
linux·运维·centos
yzx99101332 分钟前
关于网络协议
网络·人工智能·python·网络协议
fangeqin33 分钟前
ubuntu源码安装python3.13遇到Could not build the ssl module!解决方法
linux·python·ubuntu·openssl
zsq1 小时前
【网络与系统安全】域类实施模型DTE
网络·安全·系统安全
爱奥尼欧2 小时前
【Linux 系统】基础IO——Linux中对文件的理解
linux·服务器·microsoft
超喜欢下雨天2 小时前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
GLAB-Mary3 小时前
OSPF虚拟链路术语一览:快速掌握网络路由
网络·智能路由器
tan77º3 小时前
【Linux网络编程】网络基础
linux·服务器·网络
笑衬人心。4 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu