【lwip】09-IPv4协议&超全源码实现分析

目录

  • 前言
  • 9.1 IP协议简述
  • 9.2 IP地址分类
    • 9.2.1 私有地址
    • 9.2.2 受限广播地址
    • 9.2.3 直接广播地址
    • 9.2.4 多播地址
    • 9.2.5 环回地址
    • 9.2.6 本地链路地址
    • 9.2.7 本网络本主机地址
    • 9.2.8 子网
    • 9.2.9 NAT 概念
  • 9.3 IP数据报
    • 9.3.1 版本号字段
    • 9.3.2 首部长度字段
    • 9.3.3 服务类型(TOS:type of service)字段
    • 9.3.4 总长度字段
    • 9.3.5 标识字段
    • 9.3.6 标志字段
    • 9.3.7 分片偏移量字段
    • 9.3.8 生存时间(Time-To-Live,TTL)字段
    • 9.3.9 协议字段
    • 9.3.10 首部校验和字段
    • 9.3.11 二进制反码求和
    • 9.3.12 源IP字段
    • 9.3.13 目标IP字段
    • 9.3.14 选项字段
    • 9.3.15 数据区字段
    • 9.3.16 对应wireshark包分析
  • 9.4 IP首部数据结构
  • 9.5 网卡路由
    • 9.5.1 路由网卡匹配
    • 9.5.2 路由网卡匹配基函数
    • 9.5.3 路由网卡匹配支持源IP和目的IP网卡匹配的接口
    • 9.5.4 路由网卡匹配的钩子函数
    • 9.5.5 收包网卡匹配
  • 9.6 IP层数据流图
  • 9.7 IP层输出
    • 9.7.1 发送数据报
    • 9.7.2 ip层前期处理:ip4_output()
    • 9.7.3 发包前的网卡匹配
    • 9.7.4 组建、发送IP包
    • 9.7.5 IP数据报分片
  • 9.8 IP层输入
    • 9.8.1 接收数据报
    • 9.8.2 IP数据报转发
    • 9.8.3 IP数据报重组
      • 9.8.3.1 相关数据结构
      • 9.8.3.2 相关宏
      • 9.8.3.3 相关函数
      • 9.8.3.4 ip4_reass()
      • 9.8.3.5 ip_reass_enqueue_new_datagram()
      • 9.8.3.6 ip_reass_dequeue_datagram()
      • 9.8.3.7 ip_reass_free_complete_datagram()
      • 9.8.3.8 ip_reass_remove_oldest_datagram()
      • 9.8.3.9 ip_reass_chain_frag_into_datagram_and_validate()
      • 9.8.3.10 重组IP数据报的超时机制
前言默认主讲ipv4 。
概念性的内容简单过一遍即可,主要还是在源码实现方面 。
原文:李柱明博客:https://www.cnblogs.com/lizhuming/p/16859723.html
9.1 IP协议简述IP 协议(Internet Protocol),又称之为网际协议,IP 协议处于 IP 层工作,它是整个 TCP/IP 协议栈的核心协议,上层协议都要依赖 IP 协议提供的服务,IP 协议负责将数据报从源主机发送到目标主机 , 通过 IP 地址作为唯一识别码 。
IP 协议是一种无连接的不可靠数据报交付协议,协议本身不提供任何的错误检查与恢复机制 。
IP地址是协议地址,MAC地址是硬件地址,所处的层级不一样 。
常见的广域网路由器就工作在IP层 。
在本次笔记lwip源码实现分析内容概述:
  • IP地址及其分类、特殊IP地址;
  • 子网划分、子网掩码、NAT等概念;
  • IP层数据包结构一级数据报输入处理;
  • IP层数据包的发送及分片操作;
  • IP层分片数据重装过程 。
9.2 IP地址分类
【lwip】09-IPv4协议&超全源码实现分析

文章插图
A类地址:1.0.0.1—126.155.255.254
B类地址:128.0.0.1—191.255.255.254
C类地址:192.0.0.1—223.255.255.254
D类地址:224.0.0.1—239.255.255.254
E类地址:240.0.0.1—255.255.255.254
具体更加细致的地址作用 , 自行百度 。
9.2.1 私有地址A类的:10.x.x.x 是私有地址 。
B类的:172.16.0.0—172.31.255.255 是私有地址 。
C类的:全都是 。192.0.0.1—223.255.255.254 是私有地址 。
9.2.2 受限广播地址受限广播地址是网络号与主机号都为 1 的地址:255.255.255.255
为了避免这个广播地址往整个互联网里发送广播包,在任何情况下,路由器都会禁止转发目的地址为 255.255.255.255 的广播数据包 , 要不然会给整个互联网带来网络性灾难 。
9.2.3 直接广播地址直接广播地址是主机号全为 1 而得到的地址,广播地址代表本网络内的所有主机,使用该地址可以向网络内的所有主机发送数据 。
A 类地址的广播地址为:XXX.255.255.255
B 类地址的广播地址为:XXX.XXX.255.255
C 类地址的广播地址为:XXX.XXX.XXX.255
9.2.4 多播地址多播地址属于分类编址中的 D 类地址 , D 类地址只能用作目的地址 , 而不能作为主机中的源地址 。
多播地址用在一对多的通信 。
9.2.5 环回地址127.x.x.x 是保留地址 , 用作循环测试用(127.0.0.1 为保留地址,一般用于环回地址)
9.2.6 本地链路地址169.254.x.x 是本地链路地址 。
AUTOIP协议使用 。
即是如果 IP 地址是自动获取 IP 地址,而在网络上又没有找到可用的 DHCP 服务器,就会得到其中一个 IP 。

推荐阅读