网络-IP协议详解(报文格式、分类、NAT、子网、CIDR、抓包分析)
目录
简介
报文格式
IPv4地址
分类
网络地址转换NAT
子网划分与子网掩码
CIDR
实战
参考
简介
IP(网际互连协议,Internet Protocol)是TCP/IP协议族中最为核心的协议。所有的 TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。网际协议IP又称为Kahn-Cerf协议,因为这个重要协议正是Robert Kahn和Vint Cerf二人共同研发的,这两位学者在2005年获得图灵奖。
报文格式
- 版本:占4位,指IP协议的版本。通信双方使用的IP协议的版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4),以后要使用IPv6(即版本6的IP协议)。
- 首部长度:占4位,可表示的0~15,单位是4B。因为IP首部的固定长度是20字节,因此首部长度字段的最小值是5(即二进制表示的首部长度是0101)。而当首部长度为最大值1111时(即十进制数的15),就表明首部长度达到最大值15个32位字长,即60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此IP数据报的数据部分永远在4字节的整数倍时开始。首部长度限制为60字节的缺点是有时可能不够用,但这样做是希望用户尽量减少开销。最常用的首部长度是20字节(即首部长度为0101),这时不使用任何选项。
- 区分服务:占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(DifferentiatedServices)。只有在使用区分服务时,这个字段才起作用,在一般的情况下都不使用这个字段。
- 总长度:占16位,指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为2^16-1=65535字节。
- 标识(identification)占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报片的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
- 标志(flag)占3位,但目前只有低两位有意义。标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个。标志字段中间的一位记为DF(Don't Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
- 片偏移占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,除了最后一个分片,长度一定是8字节(64位)的整数倍,最后一个分片可能是8字节(64位)的整数倍。
- 生存时间占8位,生存时间字段常用的英文缩写是TTL(Time To Live),表明这是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在互联网中兜圈子(例如从路由器R1转发到R2,再转发到R3,然后又转发到R1),因而白白消耗网络资源。最初的设计是以秒作为TTL值的单位。每经过一个路由器时,就把TTL减去数据报在路由器所消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值减为零时,就丢弃这个数据报。
- 协议占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个协议进行处理。至少记住TCP和UDP(腾讯安全工程师笔试题)。
- 首部检验和占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
- 源地址占32位。
- 目的地址占32位。
- 可选字段:0~40B,用来支持排错、测量以及安全等措施。
- 填充:全0,把首部补成4B的整数倍。
IPv4地址
分类
IP地址表示如下:
IP地址::={<网络号>,<主机号>}
下面是一个C类IP地址
11011111 00000001 00000001 00000001
二进制对于人类来说很难记忆,所以我们将IP地址分为上面的4个部分,每个部分8位(0-255),使用.分隔,就是点分十进制。
- A类IP地址 地址范围1.0.0.1-126.255.255.254(二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110)
- B类IP地址地址范围128.1.0.1-191.254.255.254(二进制表示为:10000000 00000001 00000000 00000001 - 10111111 11111110 11111111 11111110)
- C类IP地址范围192.0.1.1-223.255.254.254(二进制表示为: 11000000 00000000 00000001 00000001 - 11011111 11111111 11111110 11111110)
- D类IP地址范围224.0.0.1-239.255.255.254(二进制表示为:11100000 00000001 00000001 00000001 - 11101111 11111111 11111111 11111110)
A类是7位,应该是0-127呀,为什么是1-126呢?因为一些规定,有些ip作为了特殊ip,不能作为A类地址的网络。
以下特殊IP需要单独记忆一下
除去特殊ip后
网络号全0表示本网络
主机号全为0表示指向本网,主机号全为1表示广播地址,16777214是2^24-2,去掉全0和全1,其他同理。
私有IP也需要注意一下, 私有IP就是本地网络的IP,路由器不会转发目的地址是私有地址的数据报。
我们平常用的大多是C类的,如果在使用电脑,可以打开命令窗口查看一下,Windows是使用ipconfig、Linux是使用ifconfig。
网络地址转换NAT
前面我们提到了私有IP地址,在电脑上查看到的也是私有IP,那么如何与外网通信呢?这就需要NAT。
网络地址转换NAT(Network Address Translation):在专用网连接到因特网的路由器上安装NAT软件,安装了NAT软件的路由器叫NAT路由器,它至少有一个有效的外部全球IP地址。
以我当前的网络为例,家里的WiFi,浏览器输入192.168.31.1,进入小米路由器:
子网掩码可以看后面,DNS学习可以查看: 网络-DNS域名系统详解与DNS攻击
本地网络:192.168.31.0
路由器本地端口ip/本地网关:192.168.31.1
公网ip:110.255.250.111
NAT路由器内部会维护一个NAT表,进行本地ip:端口到外部网络ip:端口的映射。例如,192.168.31.164:50001->110.255.250.111:40001,那么我访问百度,就是本地数据包发给路由器,路由器转发数据包,百度响应后,发给路由器,路由器收到后再根据是局域网内的哪个设备请求的再给予分发数据包进行回应。
子网划分与子网掩码
两级IP有一些缺点:
- 第一,IP地址空间的利用率有时很低。
- 第二,给每一个物理网络分配一个网络号会使路由表变得太大因而使网络性能变坏。
- 第三,两级IP地址不够灵活。
例如,一个单位申请了一个B类地址,但是公司没有那么多台电脑,但又可能会扩充,这个时候可能会按照部门进行子网的划分,增加部门内部人员或增加部门就比较方便,此时,单位内部的网络IP可表示为:
IP地址::={<网络号>,<子网号>,<主机号>}
子网划分
下面用例子说明划分子网的概念。下图表示某单位拥有一个B类IP地址,网络地址是145.13.0.0(网络号是145.13)。目的地址为145.13.x.x的数据报都被送到这个网络上的路由器R1。
现把单位网络划分为三个子网。这里假定子网号占用8位,因此在增加了子网号后,主机号就只有8位。所划分的三个子网分别是:145.13.3.0,145.13.7.0和145.13.21.0。在划分子网后,整个网络对外部仍表现为一个网络,其网络地址仍为145.13.0.0。但网络145.13.0.0上的路由器R1在收到外来的数据报后,再根据数据报的目的地址把它转发到相应的子网。
子网可有2^8共256个,现分配了3、7、21,还可分配253个。
子网145.13.3.0可有主机共2^8-2=254个,145.3.3.1-145.3.3.9以及145.3.3.102-145.3.3.254可以分配给新来本部门的同事。其余两个子网同理。
子网掩码
子网掩码,主机号部分全0,剩下全1。可用于和ip相与,判断是否属于本网络。上面的子网掩码为11111111 11111111 11111111 00000000,写成点分十进制为255.255.255.0。
例题:
已知IP地址是141.14.72.24,子网掩码是255.255.192.0,求网络地址。
72的二进制为01001000,192的二进制为11000000,相与后为01000000,即64,故网络地址为141.14.64.0。
主机起始ip:01110010 00001110 01000000 00000001 141.14.64.1
主机结束ip:01110010 00001110 01111111 111111110 141.14.127.254
例题:
某主机的IP地址为180.80.77.55,子网掩码为255.255.252.0。若该主机向其所在子网发送广播分组,则目的地址可以是().
A.180.80.76.0 B.180.80.76.255 C.180.80.77.255 D.180.80.79.255
77的二进制01001101,252的二进制11111100,相与后为01001100,十进制为76,广播分组为主机号全1,即第三个为01001111(79),第四个为255,所以选D。
CIDR
CIDR(Classless Inter-Domain Routing,无类别域间路由)是一个用于给用户分配IP地址以及在互联网上有效地路由IP数据包的对IP地址进行归类的方法。
IP地址::={<网络前缀>,<主机号>},CIDR写法为ip/网络前缀位数,例如,128.14.32.7/20。
128.14.32.7写成二进制 10000000 00001110 00100000 00000111,其中下划线加粗的20位就是网络前缀,本网络
开始地址:10000000 00001110 00100000 00000000 128.14.32.0
结束地址:10000000 00001110 00101111 11111111 128.14.47.255
当然,还是全0表示本网络,全1为广播地址,不能分配给主机。
最长前缀匹配
使用CIDR时,查找路由表可能得到几个匹配结果,应选择具有最长网络前缀的路由。前缀越长,地址块越小,路由越具体。
例题:
路由器RO的路由表见下表:若进入路由器RO的分组的目的地址为132.19.237.5,请问该分组应该被转发到哪一个下一跳路由器()。
A.R1 B.R2 C.R3 D.R4
网络前缀为8位,132.19.237.5所在目的网络为132.0.0.0,匹配
网络前缀为11位,132.19.237.5(19的二进制为00010011)所在目的网络为132.0.0.0,匹配
网络前缀为2位,132.19.237.5(237的二进制为11101101)所在目的网络为132.19.236.0,不匹配
故,选择B
例题:
某网络的IP地址空间为192.168.5.0/24,采用定长子网划分,子网掩码为255.255.255.248,则该网络中的最大子网个数、每个子网内的最大可分配地址个数分别是()。
A.32,8 B.32,6 C.8,32 D.8,30
248的二进制为11111000,故后三位为主机号,2^3=8,由于全0和全1不可分配,故选B。选项不是很好,应该有个30 6,注意CIDR的子网是全可以用的,不用管全0和全1。
实战
访问:http://www.cxtuku.com/search.php?q=lady_killer9
- 版本:0100,4,表示IPv4
- 首部长度:0101,5,单位4B,故首部长度20B
- 总长度:02f5,757,总长度757B
- 标志,片偏移:4000,二进制为010000....,DF=1,MF=0,禁止分片,后面没有分片,片偏移为0
- TTL:40即64s。
- 协议:06,即TCP,关于TCP的学习,可查看:网络-TCP协议详解自学笔记(例题、代码、实战)
- 校验和:0000
- 源IP:c0a81fa4,二进制为 11000000 10101000 00011111 10100100,点分十进制为192.168.31.164
- 目的IP:65252bf9,步骤同上,IP见图
参考
《计算机网络第七版 谢希仁》 第4.2-4.3节
网络-IP协议详解(报文格式、分类、NAT、子网、CIDR、抓包分析)相关推荐
- TCP头部格式详解,附Wireshark对TCP头部抓包分析
TCP之所以能为数据通讯提供可靠的传输,主要在于TCP数据包头部功能非常多. 那么,我们先来看看TCP头部格式(RFC 793.1323定义了TCP头部): TCP头部格式中的内容解析如下:(文末还有 ...
- SOME/IP协议详解「3.1.1·服务发现报文的格式」
SOME/IP协议详解「3.1.1·服务发现报文的格式」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「3.1.1·服务发现报文的格式」 1 SD的SOME/IP格式头 ...
- SOME/IP协议详解「2.1.1·SOME/IP的格式头」
SOME/IP协议详解「2.1.1·SOME/IP的格式头」 点击返回雪云飞星的SOME/IP协议详解「总目录」 SOME/IP协议详解「2.1.1·SOME/IP的格式头」 1 SOME/IP报文 ...
- TCP /IP协议详解【转】
转自:https://www.jianshu.com/p/0cf648510bce?utm_campaign=maleskine&utm_content=note&utm_medium ...
- 《TCP IP协议 详解》思考总结 · 三
前言 这一篇文章主要围绕了IP协议,ICMP协议和UDP协议展开,希望可以在这里大概做一个总结,将<TCP/IP协议详解 卷一>书中TCP相关章节前面的内容做一个结束,在下一篇文章专心的去 ...
- IP协议详解及IPv4与IPv6协议的区别
IP协议是在TCP/IP协议模型中的重要组成部分,目前我们使用最多的是IPv4协议,IPv6协议的用户量也在慢慢增加,苹果在几年之前就已经开始支持IPv6协议了.我们先来了解一下IPv4和IPv6协议 ...
- TCP/IP协议详解---概述
工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本书,希望 ...
- TCP/IP协议详解、TCP三次握手
TCP/IP协议详解:TCP/IP协议详解_王佳斌-CSDN博客_tcp/ip协议认识HTTP协议它是互联网协议(Internet Protocol Suite),一个网络通信模型,是互联网的一个基本 ...
- SOME/IP协议详解「总目录」
SOME/IP协议详解「总目录」 欢迎大家来到雪云飞星的<SOME/IP协议详解>,开始前博主先列出本专栏学习的大纲,同时这也可以作为大家学习SOME/IP协议知识点的参考.下面蓝字都是传 ...
最新文章
- lt;备份gt;10月18日 DNS
- 打印最少硬币的组合-dp+记录路径
- php助手函数自定义,Laravel 添加自定义助手函数
- 中兴上网卡 linux,电信3G无线上网卡中兴AC2726在Ubuntu 10.10安装使用成功
- BCrypt加密怎么存入数据库_Spring Boot 中密码加密的两种姿势
- 【Clickhouse】Connection is currently waiting for an insert operation, check your previous InsertState
- 按键精灵定位坐标循环_关于按键精灵win10抓抓截图问题
- python爬虫验证码的处理(云打码)_python爬虫验证码的处理(云打码)
- Badboy工具:简介,安装,脚本录制
- RGB565 转 RGB
- chart.js使用学习——混合图表
- Elasticsearch 6.4 ingest-attachment对office文件IK分词器全文检索(1) HttpAPI使用
- 怎样让自己的【微信公众号】快速涨粉?
- Ribbon(1、简介)
- PyQt之计数器(QSpinBox)控件的常用方法
- 箱体图Boxplot及Python绘制方法
- 2021年标准员-岗位技能(标准员)考试资料及标准员-岗位技能(标准员)模拟考试题
- ROS msg 文件修改 报错
- 606. 根据二叉树创建字符串(视频讲解!!!)
- 集成学习(voting)
热门文章
- 北海市卫生学校计算机教室,北海市卫生学校简介-概况
- 【牛客】Old Bill(C语言)
- Sqlserver 主外键约束
- Towards Transferable Targeted Attack 论文笔记
- 读书感受 之 《创能量》
- oracle 18C 安装时新的小功能
- mambo维护技巧集锦(tips)(2006.11.18更新)
- linux显示当前目录下文件,Linux显示当前目录有哪些文件命令-linux ls命令详解-嗨客网...
- (一)什么是机器学习
- 开发直播源码需要了解哪些原理?小白必看内容