网际协议IP

网际协议IP

一、IP地址
1、分类的IP地址

IP地址::={<网络号>,<主机号>}

2、无分类编址CIDR

IP地址::={<网络前缀>,<主机号>}

(1)网络前缀

与分类IP最大的区别就是网络前缀的位数n是不固定的,可以是0~32位。

​ 采用斜线标记法,"/"后面的是网络前缀的位数。111.112.113.1/20,表示前20位为网络前缀,后12位为主机号。

(2)地址块

​ CIDR把网络前缀都相同的所有连续IP地址组成一个CIDR地址块。

​ 一个大的地址块往往包含很多小的地址块,所以在路由器的转发表中利用一个大的地址代替许多小的地址,这种方法称为路由聚合。这样就能大大压缩转发表的空间,减少了查找转发表的时间。

(3)地址掩码

​ 我们人类可以通过斜线标记法快速计算出网络前缀,这种斜线标记在计算机中是没有的,而是通过地址掩码来计算的。

​ 子网掩码是一串连续的1和0组成,CIDR记法中斜线后面的数字即为1的个数。

​ 111.112.113.1/20 AND 255.255.240.0 =>111.112.112.0/20

二、地址解析协议ARP

​ 我们知道IP地址是网路层和上层使用的地址,是一种逻辑地址,而MAC地址是数据链路层使用的地址。IP地址放在IP数据报的首部,IP数据报在数据链路层被封装成帧,而MAC地址则放在MAC帧的首部,所以数据链路层是看不见数据报的IP地址的,是依靠MAC地址传送的。所以在数据链路层怎样知道目的地址的MAC地址呢?

​ ARP在主机的ARP高速缓存 中存放一个本局域网上的各主机和路由器的IP地址到MAC地址的映射表,并且经常动态更新。

​ 例如在某个局域网,A向B发送数据报,首先在ARP高速缓存中查找B的IP地址,如有则将其对应的MAC地址写入MAC帧然后发送到该MAC地址。

​ 如果找不到呢?

​ (1)A的ARP进程在本局域网上广播一个ARP请求分组,其中包含A的IP地址和MAC地址。

​ (2)本局域网上的所有主机都能收到该分组。

​ (3)主机B的IP地址与ARP请求分组中要查询的IP地址一致,则收下该分组,其他主机都不会理睬这个分组。B向A单播ARP响应分组,其中包含B的MAC地址。(为了避免B向A发送ARP请求分组,减少网络通信量,B在收到A的请求分组后,也会将A的映射信息写入自己的高速缓存)。

​ (4)A收到响应分组后就在其ARP高速缓存中写入主机B的IP到MAC地址的映射。

ARP对保存在高速缓存中的映射项都设置生存时间,凡超过生存时间的项目就从告诉缓存中删掉。这样就能避免因某主机网络适配器损坏导致MAC地址失效,而无法被别的主机找到的问题。

三、IP数据报格式

IP数据报首部格式分为2部分:

1、固定部分

(1)版本

​ 4位。协议IP的版本。

(2)首部长度

​ 4位。以4字节位为单位。因为首部固定长度为20字节 ,所以最小值为5。最大值为15,所以首部长度最大值为60字节。当首部长度不是4字节的倍数时,则需在填充字段加以填充。这样就能保证数据部分永远在4字节的整数倍开始,方便实现IP协议。

(3)区分服务

​ 8位。用来获得更好的服务。

(4)总长度

​ 16位。首部和数据部分长度之和。最大长度为2^16^-1=65535字节,但是受链路层MTU限制,超过MTU则需分片处理,而且实际中也很少传送这么长的数据报。

​ 尽可能长的IP数据报会提高传输效率,但IP数据报越短,路由器转发的速度就越快。因此规定主机和路由器必须能够接受长度不超过576字节的数据报。(512上层数据+60首部长度+4富余)。

(5)标识

​ 16位。IP软件在存储器中维护一个计数器,每产生一个数据报,计数器就加1,但这并不是为了按序接收的问题,因为IP本身就是无连接的,而是为了在分片时,给每个分片的标识字段赋值,相同字段值的数据报片就能重装为原来的数据报。

(6)标志

​ 3位,目前只有两位有效。

  • 最低位MF(more fragment):值为表示后面还有分片,为0表示已是数据报片的最后一个。
  • 中间位DF(don't fragment):不能分片,值为0时才允许分片。

(7)片偏移

​ 13位。分片后,某片在原分组中的相对位置。以8字节为偏移单位(也就是说除了最后一个数据报片外,其他分片都是8字节的整数倍)。

(8)生存时间

​ 8位。TTL(time to live),表明数据报在网络中的寿命。由发出数据报的源点来设置,防止无法交付的数据报无限制的在互联网中兜圈子而耗费网络资源。

​ TTL起初以秒为单位,每经过一个路由器TTL就减去数据报在该路由器所消耗的时间。随着技术的进步,路由器处理数据报的时间一般都远远小于1秒,TTL功能则改为了"跳数限制"。表示该数据报在互联网至多可经过多少个路由器(最大值255)。当TTL减为0时,该数据报就会被丢弃。

(9)协议

​ 8位。指出此数据报携带的数据适用何种协议,以便使目的主机IP层知道应将数据部分上交给哪个协议处理。

(10)首部检验和

​ 16位。只检验数据报的首部,不检验数据部分。

​ 在发送方将首部划分为16位的序列,并把检验和字段置0,以反码算数运算全部相加后再取反码得到检验和字段值。在接收方将所有16位序列以反码算数运算相加后取反码,如果不为0则表示首部发生变化,并将此数据报丢弃。

(11)源地址

​ 32位。发送IP数据报的主机的IP地址。

(12)目的地址

​ 32位。接收IP数据报的主机的IP地址。

2、可变部分
相关推荐
Tassel_YUE1 小时前
网络自动化04:python实现ACL匹配信息(主机与主机信息)
网络·python·自动化
Diamond技术流1 小时前
从0开始学习Linux——网络配置
linux·运维·网络·学习·安全·centos
Spring_java_gg1 小时前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
方方怪3 小时前
与IP网络规划相关的知识点
服务器·网络·tcp/ip
weixin_442643424 小时前
推荐FileLink数据跨网摆渡系统 — 安全、高效的数据传输解决方案
服务器·网络·安全·filelink数据摆渡系统
阑梦清川4 小时前
JavaEE初阶---网络原理(五)---HTTP协议
网络·http·java-ee
阿尔帕兹4 小时前
构建 HTTP 服务端与 Docker 镜像:从开发到测试
网络协议·http·docker
FeelTouch Labs5 小时前
Netty实现WebSocket Server是否开启压缩深度分析
网络·websocket·网络协议
千天夜6 小时前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
长弓三石7 小时前
鸿蒙网络编程系列44-仓颉版HttpRequest上传文件示例
前端·网络·华为·harmonyos·鸿蒙