【网络原理】IP协议详解

一.与IP协议相关的基本概念

  • IP协议,即网际互连协议(Internet Protocol),是TCP/IP体系中的核心网络层协议。

网络层IP协议解决的问题

  • 数据传输的过程中,不是直接进行的传输,而是经过层层的封装和分用的过程才能到达对端. IP协议主要的功能就是地址管理(使用一套地址管理体系,描述设备在网络上的具体位置)和路由选择(数据包如何从网络中的一个地址传输到另一个地址).

二.IP协议的基本格式

IP协议的格式如图:
在这里插入图片描述

  • 4位版本号: 用来描述当前IP协议的版本(指的是IPv4和IPv6这两个版本)
  • 4位首部长度: 用来描述IP协议的IP报头.
  • 8位服务类型(TOS):3位优先权字段(已经弃用), 1位保留字段(必须置为0)和4位TOS字段. 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择⼀个.对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
  • 16位总长度:整个IP报文的总长度.但这并不意味着IP报文的长度就想UDP报文一样有长度限制,IP协议中提供了拆包和组包这样的功能,可以根据需求,将IP数据报分成若干个,这个拆包和组包的过程是在网络层完成的,传输层和数据链路层,并不会关心这个过程.
  • 16位标识:它的作用是将拆包后的各个子包的标识位相同,在组装的时候,该位相同的放到一起组装.如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
  • 3位标志: 该位用来描述是否进行了拆包.第⼀位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第⼆位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后⼀个分片置为1, 其他是0. 类似于⼀个结束标记.
  • 13位片偏移:描述这些子包的先后顺序.是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后⼀个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
  • 8位生存时间:这里存储的时间不是s/ms,而是一个整数,通常是32/64.一个IP数据报,每经过一个路由器转发TTL就-1,如果这个数据减到0,说明这个数据丢包了. 这个字段主要是用来防止出现路由循环
  • 8位协议:表示传输层使用的哪个协议.
  • 16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏.只用校验IP的首部,载荷中的TCP/UDP都自带校验.
  • 32位源地址和32位目标地址: 表示发送端和接收端.

三.地址管理

网段划分

IP地址分为两个部分:

  • 网络号:保证相互连接的两个网段具有不同的标识;
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号

DHCP协议

现实中手动管理IP地址是一个非常麻烦的事情,当子网中新增主机时需要给其分配一个IP地址,当子网当中有主机断开网络时又需要将其IP地址进行回收,便于分配给后续新增的主机使用。因此对于IP地址的分配和回收一般不会手动进行,而是采用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)技术。DHCP通常被应用在大型的局域网环境中,其主要作用就是集中地址管理、分配IP地址,使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。DHCP是一个基于UDP的应用层协议,⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.

子网划分

过去曾经提出⼀种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示。

在这里插入图片描述

  • A类 0.0.0.0到127.255.255.25
  • 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的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址

  • 例如, 申请了⼀个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
  • 然而实际网络架设中, 不会存在⼀个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是⼀个32位的正整数. 通常用一串 “0” 来结尾;
    • 将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
    • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;
    在这里插入图片描述
    可见,IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
    IP地址和子网掩码还有⼀种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0

特殊的IP地址

  • 将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
  • 将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1.

四.路由选择.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/670961.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

初识指针(2)<C语言>

前言 前文介绍完了一些指针基本概念,下面介绍一下,const关键字、指针的运算、野指针的成因以及避免,assert函数等。 目录 const(常属性) 变量的常属性 指针的常属性 指针的运算 ①指针 -整数 ②指针-指针 ③指针与…

不考408的985,不想考408的有福了!吉林大学计算机考研考情分析

吉林大学(Jilin University)简称吉大,位于吉林长春,始建于1946年,是中华人民共和国教育部直属的综合性全国重点大学,国家“双一流”、“211工程”、“985工程”、“2011计划”重点建设的著名学府&#xff0…

控制台调试 hover 后才出现的元素

调试 hover后才出现的元素 打开开发者工具,鼠标放在hover时才出现的元素上,然后点击右键; 不要选中任何选项,将鼠标移动到开发者工具的调试面板中; 按下N键,此时悬浮的元素不会消失,定位成功。…

2024年电工杯数学建模竞赛A题B题思路代码分享

您的点赞收藏是我继续更新的最大动力! 欲获取更多电工杯学习资料,可点击如下卡片链接 点击链接加入群聊【2024电工杯】:http://qm.qq.com/cgi-bin/qm/qr?_wv1027&k_PrjarulWZU8JsAOA9gnj_oHKIjFe195&authKeySbv2XM853pynlnXiv6M58…

【0day】湖南建研工程质量检测系统InstrumentUsageRecordExport接口处存在任意文件读取漏洞

免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该…

MLP实现fashion_mnist数据集分类(1)-模型构建、训练、保存与加载(tensorflow)

1、查看tensorflow版本 import tensorflow as tfprint(Tensorflow Version:{}.format(tf.__version__)) print(tf.config.list_physical_devices())2、fashion_mnist数据集下载与展示 (train_image,train_label),(test_image,test_label) tf.keras.datasets.fashion_mnist.l…

JS基础:变量的详解

你好,我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃,大专生,一枚程序媛,感谢关注。回复 “前端基础题”,可免费获得前端基础 100 题汇总,回复 “前端基础路线”,可获取…

数据库SQL语言实战(七)

前言 这次的有一点点难~~~~~我也写了好久 练习题 题目一 在学生表pub.student中统计名字(姓名的第一位是姓氏,其余为名字,不考虑复姓)的使用的频率,将统计结果放入表test5_01中 create table test5_01(First_name…

Docker容器:Docker-Consul 的容器服务更新与发现

目录 前言 一、什么是服务注册与发现 二、 Docker-Consul 概述 1、Consul 概念 2、Consul 提供的一些关键特性 3、Consul 的优缺点 4、传统模式与自动发现注册模式的区别 4.1 传统模式 4.2 自动发现注册模式 5、Consul 核心组件 5.1 Consul-Template组件 5.2 Consu…

esp32+mqtt协议+paltformio+vscode+微信小程序+温湿度检测

花费两天时间完成了这个项目(不完全是,属于是在resnet模型训练和温湿度检测两头跑......模型跑不出来,又是第一次从头到尾独立玩硬件,属于是焦头烂额了......,完成这个项目后,我的第一反应是写个csdn&#…

如何delphi7中添加自定义的控件或组件

1.问题 为了编写方便,会自己生成一些自定义的控件。 XXX.PAS:源码文件,后续可以再调整 XXX.DCU:编译后的文件 2.解决办法 1.自定义控件的文件如下 2.将这些文件保留在程式代码中,万一丢失会导致程式开启后报是否忽略 3.选择菜单栏中的com…

简述前后端分离架构案例

Hello , 这里是小恒不会java 。今晚1点写写关于RESTful接口的使用案例,本文会通过django原生js前后端分离的案例简单讲解。本文带你认识一下简化版的前后端分离架构 代码 本文案例代码在GitHub上 https://github.com/lmliheng/fontend前后端分离 先说说什么是前后…