IP协议(网际协议)
IPV4
IP(Internet Protocol)网际协议,是TCP/IP协议的核心部分,虽然IPV4终将会被IPV6替代,但是目前IPV4仍然是IP协议的主流版本。
IP协议首部格式(IPV4)
- 4位版本号(Version):用来指定IP协议的版本,IPV4的版本号就是4,如果这个IP报文是IPV4版本,那么这个字段的值就是4,用4位来标识就是0100。IPV6的版本号则是6。
- 4位首部长度(Internet Header Length):表明IP首部的大小,单位是4个字节,length * 4的字节数,因为这一字段共4个比特位,所以这一字段最大值为2 ^ 4 - 1即15,所以IP首部最大长度为15 * 4即60字节;在默认情况下,该字段被设置为5,所以默认IP首部20字节。
- 8位服务类型(Type Of Service):前三位表示优先度(已经弃用),第4位表示最低延迟、第5位表示最大吞吐、第6位表示最大可靠性、第7位表示最小代价,这四位互相冲突,只能选择一个。需要根据不同情况进行选择,如果是SSH/TELNET这类远端登录,那么就应该选择最小延时,如果是FTP类型的程序,则应该选择最大吞吐量;第8位是保留位,目前没有使用,必须填0。
- 16位总长度(Total Length):表示IP首部和后面携带的数据部分一共有多少个字节。该字段有16个比特位,因此IP数据报整体最大长度为65535个字节。
- 16位标识(ID):唯一地标识主机发送的报文,如果一份IP报文在数据链路层被分片,那么每一片的该字段应该都是相同值。帮助对端主机在接收后进行分片重组。
- 3位标志(Flag):第一位保留(保留的意思是现在不使用,未来如果需要的话再使用),必须填0;第二位用来指明是否可以分片,如果为0则可以分片,如果为1则不能分片,假如一个IP报文禁止分片且长度还大于了MTU(Maximum Transmission Unit最大传输单元,后面详细介绍),则该本文只能被丢弃;如果报文被分片,第三位为1表示它是分片中段的报文,即后续还有分片报文,如果第三位为0则表示这是最后一片。
- 13位片偏移(Fragment Offset):该字段表示分片相对于原始IP报文开始处的偏移量,其实就是表示当前分片在原报文中所处的位置,第一个分片对应值为0。由于该字段总共13个比特位,因此最多可以表示2 ^ 13即8192个相对位置。单位为8字节,所以最大可以表示8192 * 8 = 65536个字节的位置。
- 8位生存时间(Time To Live):数据报到达目的地的最大报文跳数(Hop,指网络中一个区间,IP数据包正是在网络中一个跳间被转发),一般为64,每次经过一个路由,TTL–,如果TTL == 0时还没到达目的地,那么这个报文就会被丢弃。这个字段主要是为了防止出现路由循环,数据包在一个循环中一直转发,浪费网络资源。
- 8位协议(Protocol):表示IP的上层是什么协议,我们熟知的TCP、UDP、ICMP等都是在IP上层的。
- 16位首部校验和(Header Checksum):使用CRC进行校验,鉴别IP首部是否收到损坏,如果损坏直接丢弃,它只校验IP头部,不校验下面的内容,因为内容部分的校验是上层传输层(TCP)需要考虑的,IP协议只要发现首部有问题就直接丢弃该报文。
- 32位源IP地址(Source Address):表示发送端的IP。
- 32位目的IP地址(Destination Address):表示接收端的IP。
- 选项字段(Options):不定长,最大可以到40个字节。
分片与组装:
MTU(Maximum Transmission Unit最大传输单元)是在IP层下面的MAC协议中的概念,MAC协议我们可以理解为是物理层的一些协议,它位于IP协议的下层,那么在发送数据时相当于是用户数据 + 应用层协议报头(如HTTP请求报头)作为有效载荷交给传输层(如TCP协议),TCP协议再将TCP报头 + 应用层传来的数据下交给IP层,IP层再将IP协议首部 + TCP层传来的TCP报文交付给MAC帧。因此每个MAC帧其实是IP协议首部 + IP层的有效载荷。而MAC帧是有长度限制的,所以就要求IP数据报向下交付时并不是随心所欲想发多长就发多长,如果MAC帧要求MTU为1500字节,而IP数据包总长度有2000字节,那么就需要分片,将原有的IP数据包分成两片,依次发送,对端的主机在接收后,由对端的IP层再完成组装。我们在Linux环境下可以使用ifconfig命令查看到MTU。
分片和组装对于上层TCP/UDP和下层的MAC都是透明的,即上层和下层都不知道IP层将数据包进行了分片操作,因此分片和组装操作会由发送方IP层和接收方IP层自动完成。但是分片意味着需要把一份数据变为多组数据传输,并且在对端还需要进行组装,这样会大大降低网络传输效率以及提升错误风险,因此在传输过程中应当尽量避免分片,即尽量不要发送超过MTU长度的IP数据报。
IP地址
IP地址的定义:
IPV4中我们由32位正整数来表示IP地址,计算机内部会直接以二进制来保存IP地址,不过人并不善于记忆二进制整数,所以我们采用点分十进制来记录IP地址:即将32位IP地址每8位一组,分成4组,组间用’ . '进行分隔,再将每组转换为十进制。
因此我们可以直接算出,在IPV4标准下最多有2 ^ 32 = 4292967296个IP地址,但是能被人们使用的远远不足这个数字。(比如某些IP地址是有特殊作用被预留的,某些设备如路由器会占有多个IP地址)
IP地址的组成:
IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。
网络号:保证互相连接的两个网段具有不同的标识。
主机号:保证在同一个网段中,两台主机具有不同的标识。
IP地址的划分:
IP地址划分为五个级别,分别为A类、B类、C类、D类和E类(一直没有使用过),所以目前我们所能见到的IP地址只有A、B、C、D四类。划分的依据就是IP地址从第1位到第4位的比特位。
A类地址:0.0.0.0 ~ 127.255.255.255
B类地址:128.0.0.0 ~ 191.255.255.255
C类地址:192.0.0.0 ~ 223.255.255.255
D类地址:224.0.0.0 ~ 239.255.255.255
E类地址:240.0.0.0 ~ 247.255.255.255
引入子网掩码:
随着Internet的发展,使用前四位是否为1来分类的方案弊端开始显现:那就是很多子网的申请者都会去申请B类网络地址,因为A类根本用不完,而C类不够用。导致B类的网络地址很快就被分配完了。而申请了A类的网络又会浪费大量的IP地址,在这种情况下,人们提出了新的划分方案:CIDR(Classless Interdomain Routing无类型域间选路)
- 引入子网掩码来区分网络号和主机号
- 子网掩码也是一个32位的正整数,但结尾通常是一串0
- 将IP地址与子网掩码进行&操作,所得结果就是网络号
- 网络号和主机号的划分就与这个IP地址是A类、B类还是C类无关了
一些特殊的IP地址
将IP地址中的主机地址全设置为0,即该局域网的网络号,这个IP地址代表这个局域网。
将IP地址中的主机地址全设置为1,可以变成广播地址,这个广播地址可以给同一个链路中互相连接的所有主机发送数据包
127.*的IP地址用于本地环回测试,通常是127.0.0.1
私有IP地址和公网IP地址
RFC1918规定了组建局域网的私有IP地址的规范:
10.* 前8位是网络号,共有16,777,216个地址
172.16.*~172.31.* 前12位是网络号,共有1,048,576个地址
192.168.* 前16位是网络号,共有65,536个地址
上述范围内的IP地址都是私有IP,不在上述范围内的IP则为全局IP地址(公网IP地址)。
IPv6
IPv6由40个字节的固定头部和可变长的扩展头部组成。
- 4位版本号:IP协议版本,IPv6值为6
- 8位通信类型:指示数据通信类型和优先级
- 20位流标志:用于某些对连接服务质量有特殊要求的通信。
- 16位净荷长度:指IPv6扩展头部和应用程序数据长度之和,不包含固定头部长度
- 8位下一个包头:指紧跟IPv6固定头部的包头类型,如扩展头或上层协议。
- 8位跳数限制:和IPv4的TTL含义相同
- 后两项IP地址:IPv6地址一般用16进制字符串表示,用‘:’分割为8组,每组两个字节。
参考:(210条消息) IP协议详解_长岛冰茶去冰的博客-CSDN博客_ip协议
IP协议(网际协议)相关推荐
- 【TCP/IP 协议】 TCP/IP 基础
总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后开始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...
- 概述---《TCP/IP协议》卷一
第1章 概述 1.1 引言 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们互相进行通信.这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想. 1.2 ...
- IP协议+以太网协议
在计算机网络体系结构的五层协议中,第三层就是负责建立网络连接,同时为上层提供服务的一层,网络层协议主要负责两件事:即地址管理和路由选择,下面就网络层的重点协议做简单介绍~~ IP协议 网际协议IP是T ...
- IP协议的漏洞及防护措施
文章目录 一.TCP/IP协议族 二.IP协议 三.IP协议的安全问题及防护措施 一.TCP/IP协议族 二.IP协议 网际协议(Internet Protocol,IP)是TCP/IP协议族的核心, ...
- 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记
章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...
- TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)
TCP/IP协议 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇.T ...
- 【TCP/IP协议 卷一:协议】第三章 IP:网际协议
3.1 引言 unreliable不可靠的意思是它并不能保证IP数据报能成功的到达目的地.IP只提供尽力而为的传输服务. conectionless无连接的意思是IP并不维护任何关于后续数据报的状态信 ...
- ssh协议是osi_TCP/IP协议和三次握手四次挥手
计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...
- HTTP/TCP/IP协议
TCP:传输控制协议 UDP:用户数据包协议 IP:网际协议 HTTP:超文本传输协议 TCP/UDP是面向传输层的协议,HTTP是面向应用层的协议,TCP和UDP使用该协议从一个网络传送数据包到另一 ...
- OSI参考模型与TCP/IP协议的比较研究
OSI参考模型与TCP/IP协议的比较研究 OSI参考模型与TCP/IP协议的比较研究 摘要:OSI参考模型与TCP/IP协议是网际互联中的两个重要协议体系.本文从首先分别介绍了两个协议体系的产生 ...
最新文章
- 深入理解Ribbon之源码解析
- ASP.NET 获取客户端IP (无视代理)
- (转载)Hadoop2.7.1配置
- linux 离线安装中文字库,centos7 离线安装字体fontconfig
- 开源cms 和 开源博客_BackBee CMS如何以及为何开源
- match和exec
- as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
- 收集的正则表达式列子大全,方面他人,自己备用
- OpenCV 实现分水岭算法
- QTreeView使用总结: 自定义model示例,大大优化性能和内存
- 样本峰度(kurtosis)与随机变量的峰度及四阶统计量之间的关系和计算估计
- 20 分钟教你量化自己的资产
- canvas实现橡皮擦
- 图片翻译如何操作?图片翻译的方法分享.
- Demo : 人脸5个关键点检测
- 呼叫中心坐席功能在职场中的应用
- 从质量低到高带你了解影片名里面的TC、HD等的含义
- 膜拜,阿里内部都在学习的五大深入理解Java虚拟机PDF,简直强无敌
- redis 五大数据类型
- 做好架构师,要懂微服务,汇总微服务架构落地的15种框架
热门文章
- 【翻译】CRAFT:Character Region Awareness for Text Detection
- Cloud Native 演进可行性研究
- Python中的盆地跳跃(Basin Hopping)优化
- oracle一次性说清楚,多种分隔符的一个字段拆分多行,再多行多列多种分隔符拆多行,最终处理超亿亿。。亿级别数据量
- 完整流程 Flutter 集成 Rust 多语言跨端开发基础案例
- 成语秀才小程序部署问题总结
- TCP/IP Attack Lab(SEED实验)
- 网站建设流程是什么?
- c语言结构体memcmp,用memcmp()比较结构体
- Package cmake is not available, but is referred to by another package.