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协议(网际协议)相关推荐

  1. 【TCP/IP 协议】 TCP/IP 基础

    总结 : 通过学习 TCP/IP 基础, 并总结相关笔记 和 绘制思维导图 到博客上, 对 TCP/IP 框架有了大致了解, 之后开始详细学习数据链路层的各种细节协议, 并作出笔记; 博客地址 : h ...

  2. 概述---《TCP/IP协议》卷一

    第1章 概述 1.1 引言 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们互相进行通信.这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想. 1.2 ...

  3. IP协议+以太网协议

    在计算机网络体系结构的五层协议中,第三层就是负责建立网络连接,同时为上层提供服务的一层,网络层协议主要负责两件事:即地址管理和路由选择,下面就网络层的重点协议做简单介绍~~ IP协议 网际协议IP是T ...

  4. IP协议的漏洞及防护措施

    文章目录 一.TCP/IP协议族 二.IP协议 三.IP协议的安全问题及防护措施 一.TCP/IP协议族 二.IP协议 网际协议(Internet Protocol,IP)是TCP/IP协议族的核心, ...

  5. 《TCP/IP详解卷1:协议》第3章 IP:网际协议(2)-读书笔记

    章节回顾: <TCP/IP详解卷1:协议>第1章 概述-读书笔记 <TCP/IP详解卷1:协议>第2章 链路层-读书笔记 <TCP/IP详解卷1:协议>第3章 IP ...

  6. TCP/IP协议(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)

    TCP/IP协议 TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇.T ...

  7. 【TCP/IP协议 卷一:协议】第三章 IP:网际协议

    3.1 引言 unreliable不可靠的意思是它并不能保证IP数据报能成功的到达目的地.IP只提供尽力而为的传输服务. conectionless无连接的意思是IP并不维护任何关于后续数据报的状态信 ...

  8. ssh协议是osi_TCP/IP协议和三次握手四次挥手

    计算机网络体系结构 在计算机网络的基本概念中,分层次的体系结构是最基本的.计算机网络体系结构的抽象概念较多,在学习时要多思考.这些概念对后面的学习很有帮助. 网络协议是什么? 在计算机网络要做到有条不 ...

  9. HTTP/TCP/IP协议

    TCP:传输控制协议 UDP:用户数据包协议 IP:网际协议 HTTP:超文本传输协议 TCP/UDP是面向传输层的协议,HTTP是面向应用层的协议,TCP和UDP使用该协议从一个网络传送数据包到另一 ...

  10. OSI参考模型与TCP/IP协议的比较研究

     OSI参考模型与TCP/IP协议的比较研究  OSI参考模型与TCP/IP协议的比较研究 摘要:OSI参考模型与TCP/IP协议是网际互联中的两个重要协议体系.本文从首先分别介绍了两个协议体系的产生 ...

最新文章

  1. 深入理解Ribbon之源码解析
  2. ASP.NET 获取客户端IP (无视代理)
  3. (转载)Hadoop2.7.1配置
  4. linux 离线安装中文字库,centos7 离线安装字体fontconfig
  5. 开源cms 和 开源博客_BackBee CMS如何以及为何开源
  6. match和exec
  7. as3数据类型检查写法(is/as/typeof/in/instanceof)用法介绍
  8. 收集的正则表达式列子大全,方面他人,自己备用
  9. OpenCV 实现分水岭算法
  10. QTreeView使用总结: 自定义model示例,大大优化性能和内存
  11. 样本峰度(kurtosis)与随机变量的峰度及四阶统计量之间的关系和计算估计
  12. 20 分钟教你量化自己的资产
  13. canvas实现橡皮擦
  14. 图片翻译如何操作?图片翻译的方法分享.
  15. Demo : 人脸5个关键点检测
  16. 呼叫中心坐席功能在职场中的应用
  17. 从质量低到高带你了解影片名里面的TC、HD等的含义
  18. 膜拜,阿里内部都在学习的五大深入理解Java虚拟机PDF,简直强无敌
  19. redis 五大数据类型
  20. 做好架构师,要懂微服务,汇总微服务架构落地的15种框架

热门文章

  1. 【翻译】CRAFT:Character Region Awareness for Text Detection
  2. Cloud Native 演进可行性研究
  3. Python中的盆地跳跃(Basin Hopping)优化
  4. oracle一次性说清楚,多种分隔符的一个字段拆分多行,再多行多列多种分隔符拆多行,最终处理超亿亿。。亿级别数据量
  5. 完整流程 Flutter 集成 Rust 多语言跨端开发基础案例
  6. 成语秀才小程序部署问题总结
  7. TCP/IP Attack Lab(SEED实验)
  8. 网站建设流程是什么?
  9. c语言结构体memcmp,用memcmp()比较结构体
  10. Package cmake is not available, but is referred to by another package.