当前位置:网站首页>【TCP/IP 四 IP 网际协议】
【TCP/IP 四 IP 网际协议】
2022-08-04 21:54:00 【民谣唱给爱人听丶】
TCP/IP 四 IP 网际协议
IP 网际协议
IP是TCP / IP协议族中最为核心的协议.所有的TCP、 UDP、 ICMP及IGMP数据都以IP数据报格式传输(见图 1 - 4)
- 不可靠
- 不能保证IP数据报能成功地到达目的地
- IP仅仅提供最好的传输服务
- IP有一个简单的错误处理算法:丢弃该数据报,然后发送ICMP消息报给信源端
- 无连接
- IP并不维护后续数据报的状态信息
- 每个数据报的处理是相互独立的
- 一信源向相同的信宿发送两个连续的数据报(A,B) 每个数据报都是独立的进行路由选择,可能选择不同的路线,因此B有可能在A之前到达
1. IP数据报结构
IP首部数据报结构
- 普通的IP首部长为20个字节,除非含有选项字段.
- 版本 (4bit)
- 目前版本号为4 故IP又被称作IPv4
- 首部长度(4bit)
- 首部占32bit字的数目,包括任何选项 最长为60字节
- TOS 服务类型 (8bit)
- 优先权子字段(3bit)
- 被忽略
- 最小时延(1bit)
- 最大吞吐量(1bit)
- 最高可靠性(1bit)
- 最小费用(1bit)
- 这四位只能同时只能置其一位 如果4位均为0 则意味是一般服务
- 查阅TOS推荐值表
- 未用位(1bit)
- 必须置位0
- 优先权子字段(3bit)
- 总长度(16bit)
- IP数据报的长度 以字节为单位 所以IP数据报最长可达65535字节
- 标识(16bit)
- 唯一地标识主机发送的每一份数据报
- 通常每发送一份报文 值加1
- 标志(3bit)
- 分片与重组使用
- 片偏移(13bit)
- 分片与重组使用
- TTL 生存时间(8bit)
- 设置数据报可以经过最多路由器数
- 指定了数据报的生存时间
- 初始值由源主机设置(一般为32/64)
- 每经过一个路由器 值减1
- 数据为0 数据报被丢弃 并发送ICMP报文给源主机
- 协议(8bit)
- IP对数据报进行分用
- 1表示为ICMP协议,
- 2表示为IGMP协议,
- 6表示为TCP协议,
- 17表示为UDP协议.
- 首部校验和(16bit)
- 首部检验和字段是根据IP首部计算的检验和码.
- 它不对首部后面的数据进行计算.
- 源IP地址(32bit)
- 目的地IP地址(32bit)
- 选项[如果有]
- 安全和处理限制
- 记录路径
- 时间戳
- 宽松的源站选路
- 严格的源站选路
- 选项字段一直都是以32bit作为界限,必要时候插入值0的填充
- 保证IP首部始终是32bit的整数倍
- 并非所有的主机和路由器都支持这些选项
- 版本 (4bit)
协议分类:
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_IGMP 2 /* internet group management protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
#define IPPROTO_RAW 255 /* raw IP packet */
#define IPPROTO_MAX 256
2. IP路由选择
IP层在内存中有一个路由表.当收到一份数据报并进行发送时,它都要对该表搜索一次.
当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的 IP地址之一或者IP广播地址.
如果确实是这样,数据报就被送到由 IP首部协议字段所指定的协议模块进行处理.
如果数据报的目的不是这些地址,
那么
- (1)如果 IP层被设置为路由器的功能,那么就对数据报进行转发(也就是说,像对待发出的数据报一样处理);
- (2)数据报被丢弃.
路由表中每一项都包含下面的这些信息:
- 目的IP地址.它既可以是一个完整的主机地址,也可以是一个网络地址,由该表目中的标志字段来指定(如下所述).
- 主机地址有一个非0的主机号,以指定某一特定的主机
- 而网络地址中的主机号为0,以指定网络中的所有主机(如以太网,令牌环网).
- 下一站(或下一跳)路由器(next-hop router)的IP地址,或者有直接连接的网络IP地址.下一站路由器是指一个在直接相连网络上的路由器,通过它可以转发数据报.下一站路由器不是最终的目的,但是它可以把传送给它的数据报转发到最终目的.
- 标志.其中一个标志指明目的 I P地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接连的接口.
- 为数据报的传输指定一个网络接口
IP路由选择是逐跳地(hop - by - hop)进行的.从这个路由表信息可以看出, IP并不知道到达任何目的的完整路径(当然,除了那些与主机直接相连的目的地).
所有的IP路由选择只为数据报传输提供下一站路由器的IP地址.它假定下一站路由器比发送数据报的主机更接近目的,而且下一站路由器与该主机是直接相连的.
IP路由选择主要完成以下这些功能:
- 1 搜索路由表,寻找能与目的 I P地址完全匹配的表目(网络号和主机号都要匹配).如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值).
- 2 搜索路由表,寻找能与目的网络号相匹配的表目.如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值).目的网络上的所有主机都可以通过这个表目来处置.
- 例如,一个以太网上的所有主机都是通过这种表目进行寻径的.
- 这种搜索网络的匹配方法必须考虑可能的子网掩码.
- 3 搜索路由表,寻找标为“默认(default)”的表目.如果找到,则把报文发送给该表目指定的下一站路由器.
如果上面这些步骤都没有成功,那么该数据报就不能被传送.
如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误.
完整主机地址匹配在网络号匹配之前执行.只有当它们都失败后才选择默认路由.
IP 路由选择特性:
- 默认路由,以及下一站路由器发送的ICMP间接报文.
- 为一个网络指定一个路由器,而不必为每个主机指定一个路由器.
- 数据报中的目的IP地址始终不发生任何变化
- 除开使用源路由选项时,目的IP地址才有可能被修改.
- 所有的路由选择决策都是基于这个目的IP地址
- 每个链路层可能具有不同的数据帧首部
- 链路层的目的地址(如果有)始终指向的是下一站的链路层地址
- SLIP链路并没有这样做,以太网地址一般通过ARP获得
3. 子网寻址
现在所有的主机都要求支持子网编址.不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号.
在InterNIC获得某类IP网络号后,就由当地的系统管理员来进行分配,由他(或她)来决定是否建立子网,以及分配多少比特给子网号和主机号.
子网对外部路由器来说隐藏了内部网络组织(一个校园或公司内部)的细节.
子网对于子网内部的路由器是不透明的
子网的作用是可以缩小Internet路由表的规模
例如(B类网络地址):
- B类网络地址(140.252),在剩下的16bit中, 8bit用于子网号, 8bit用于主机号.
3.1 子网掩码
除了IP地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号.这是在引导过程中通过子网掩码来确定的.这个掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号.
B类地址的两种不同的子网掩码格式:
给定IP地址和子网掩码以后,主机就可以确定IP数据报的目的是:
(1)本子网上的主机;
(2)本网络中其他子网中的主机;
(3)其他网络上的主机.
如果知道本机的IP地址,那么就知道它是否为A类、 B类或C类地址(从IP地址的高位可以得知),
也就知道网络号和子网号之间的分界线.
而根据子网掩码就可知道子网号与主机号之间的分界线
假设我们的主机地址是140.252.1.1(一个B类地址),而子网掩码为255.255.255.0(其中8bit为子网号,8bit为主机号).
- 如果目的IP地址是140.252.4.5,那么我们就知道B类网络号是相同的(140.252),但是子网号是不同的(1和4).
- 如果目的IP地址是140.252.1.22,那么B类网络号还是一样的(140.252),而且子网号也是一样的(1),但是主机号是不同的.
- 如果目的IP地址是192.43.235.6(一个C类地址),那么网络号是不同的,因而进一步的比较就不用再进行了.
4. 特殊的IP地址
- 0表示所有的比特位全为0;
- -1表示所有的比特位全为1;
- netid/subnetid/hostid:不为全0或全1的对应字段
- 子网号栏为空表示该地址没有进行子网划分.
边栏推荐
猜你喜欢
Altium Designer 19.1.18 - Protecting Locked Objects
Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
数字重塑客观世界,全空间GIS发展正当其时
Lecture 2 Software Life Cycle
Open source summer | Cloud server ECS installs Mysql, JDK, RocketMQ
如何根据“前序遍历,中序遍历”,“中序遍历,后序遍历”构建按二叉树
国际项目管理师PMP证书,值得考嘛?
ctfshow终极考核web654
PMP证书在哪些行业有用?
七夕特制:《牛郎会织女》
随机推荐
《剑指offer》刷题分类
Numpy on the superposition of two arrays
论文解读(PPNP)《Predict then Propagate: Graph Neural Networks meet Personalized PageRank》
Redis中的LRU算法
如何根据“前序遍历,中序遍历”,“中序遍历,后序遍历”构建按二叉树
打卡第 2 天: urllib简记
传奇服务器需要什么配置?传奇服务器租用价格表
如何为Web3.0世界启动完美的DAO
七夕特制:《牛郎会织女》
Altium Designer 19.1.18 - draw polygons copper hollow out, for the cursor just capture solutions
[Linear Algebra 03] Elimination method display and 4 solutions of AX=b
rk3399-9.0一级二级休眠
openresty lua-resty-template页面静态化
Re24:读论文 IOT-Match Explainable Legal Case Matching via Inverse Optimal Transport-based Rationale Ext
数电快速入门(二)(复合逻辑运算和逻辑代数的基本定律的介绍)
Excel商业智能-Power BI电商数据分析实战
【线性代数02】AX=b的2种解释和矩阵乘法的5种视角
Driving point cloud format changes bring efficiency improvement
Some problems with passing parameters of meta and params in routing (can be passed but not passed, empty, collocation, click to pass multiple parameters to report an error)
As hot as ever, reborn | ISC2022 HackingClub White Hat Summit was successfully held!