网络层协议 ——— IP协议

news2024/11/14 14:00:20

文章目录

  • 概念
  • 协议头格式
  • 分片与组装
  • 网段划分
  • IP地址的数量限制
  • 私有IP和公有IP
  • 路由

概念

IP协议(Internet Protocol)是互联网上使用的一种网络协议,也是互联网的基础协议之一。它属于TCP/IP体系中的网络层协议,主要负责将数据包从源主机传输到目标主机。

  • TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略,而真正负责数据在网络中传输的则传输层之下的网络层和链路层。

  • 进行网络通信时,发送的数据并不是直接从一方的传输层直接发送到了另一方的传输层,而是需要传输层将数据继续向下进行交付,在网络层和链路层经过数据封装后再通过网络发送到对方主机,对方主机收到数据后也同样需要在链路层和网络层进行数据解包,此时对方的传输层才拿到了发送过来的数据,然后再继续将该数据向上进行交付。

网络层要解决的问题就是,将数据从一台主机送到另一台主机,也就是数据的路由。

协议头格式

在这里插入图片描述

  • 4位版本号(version):指定IP协议的版本(IPv4/IPv6),对于IPv4来说,就是4。
  • 4位首部长度(header length):表示IP报头的长度,以4字节为单位。
  • 8位服务类型(Type Of Service):3位优先权字段(已经弃用),4位TOS字段,和- 1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。比如对于ssh/telnet这样的应用程序,最小延时比较重要,而对于ftp这样的程序,最大吞吐量比较重要。
  • 16位总长度(total length):IP报文(IP报头+有效载荷)的总长度,用于将各个IP报文进行分离。
  • 16位标识(id):唯一的标识主机发送的报文,如果数据在IP层进行了分片,那么每一个分片对应的id都是相同的。
  • 3位标志字段:第一位保留,表示暂时没有规定该字段的意义。第二位表示禁止分片,表示如果报文长度超过MTU,IP模块就会丢弃该报文。第三位表示“更多分片”,如果报文没有进行分片,则该字段设置为0,如果报文进行了分片,则除了最后一个分片报文设置为0以外,其余分片报文均设置为1。
  • 13位片偏移(framegament offset):分片相对于原始数据开始处的偏移,表示当前分片在原数据中的偏移位置,实际偏移的字节数是这个值× 8 \times 8×8得到的。因此除了最后一个报文之外,其他报文的长度必须是8的整数倍,否则报文就不连续了。
  • 8位生存时间(Time To Live,TTL):数据报到达目的地的最大报文跳数,一般是64,每经过一个路由,TTL -= 1,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环。
  • 8位协议:表示上层协议的类型。
  • 16位首部检验和:使用CRC进行校验,来鉴别数据报的首部是否损坏,但不检验数据部分。
  • 32位源IP地址和32位目的IP地址:表示发送端和接收端所对应的IP地址。
  • 选项字段:不定长,最多40字节。

分片与组装

由于数据链路层的特点,一般无法转发太大的数据,数据链路层一次性可以转发到网络的报文大小的限制是(1500字节 MTU)。所以在数据传到链路层前,要进行分片操作。分片要在网络层处理同理,将分片进行组装成完整的报文也是在对端的网络层进行的。

  • 16位标记位:因为一个报文有可能会被分片成多份,我们需要标识来自于同一报文的分片,所以如果16位标识中存储的字段相同,则代表它们来自同一个报文;
  • 13位片偏移:在组装分片时,需要知道这些分片在原先报文中的顺序,才能组装成为一个完整并且正确的报文。3位片偏移就标识了当前分片在原先报文中的偏移量!
  • 三位标记位:可以查看这个报文是否被分片了

在这里插入图片描述
每一层添加颜色方块即为封装,向下交付;每一层去掉颜色方块即为解包,向上交付;
在ip层将tcp报文分开即为分片;在对端ip层将分好的tcp报文拼接即为组装;

网段划分

IP地址分为两个部分, 网络号和主机号

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

在这里插入图片描述

  • 不同的子网其实就是把网络号相同的主机放到一起.
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同.

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

在这里插入图片描述

  • 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

大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址

所以,引入一个额外的子网掩码来区分网络号和主机号

  • 子网掩码是一个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

IP地址的数量限制

我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址.

这意味着, 一共只有43亿台主机能接入网络么?
实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡
都需要配置一个或多个IP地址.

CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:

  • 动态分配IP地址:只给接入网络的设备分配IP地址,因此同一个MAC地址的设备,每次接入互联网中,得到的IP地址不一定是相同的,避免了IP地址强绑定于某一台设备。
  • NAT技术:能够让不同局域网当中同时存在两个相同的IP地址,NAT技术不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
  • IPv6:IPv6用16字节128位来表示一个IP地址,能够大大缓解IP地址不足的问题。但IPv6并不是IPv4的简单升级版,它们是互不相干的两个协议,彼此并不兼容,因此目前IPv6还没有普及。

私有IP和公有IP

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都可以,但是RFC 1918规定了用于组建局域网的私有IP地址

  • 10.*,前8位是网络号,共16,777,216个地址
  • 172.16.到172.31.,前12位是网络号,共1,048,576个地址
  • 192.168.*,前16位是网络号,共65,536个地址
  • 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);

在这里插入图片描述

一个路由器可以配置两个IP地址, 一个是WAN口IP对外, 一个是LAN口IP(子网IP)对内

  • 路由器LAN口连接的主机, 都从属于当前这个路由器的子网中

NAT IP转换过程
在这里插入图片描述

路由

是数据链路层中的一个区间。具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间,就是从A主机到B主机需要走的路径

能否直接到达主机B,
能就发送给主机B;
不能就发送给下一个路由器,路由器中的路由表会告知你下一站应该往哪儿走

唐僧和他的徒弟们在前往西天取经的路上迷路了。他们不知道下一步应该往哪个方向走,以便能够找到正确的路径到达目的地(西天)。

  • 寻找信息源:唐僧看到前面有个村庄,于是走过去向村民询问去西天的路该怎么走。这里的村民就相当于网络中的一个路由器,他们拥有关于网络拓扑结构的信息。

  • 路由决策:村民告诉唐僧,他们需要先往南走,然后经过一座山,再向西走才能到达西天。这就是一个路由决策的过程,路由器根据路由表或路由算法来决定数据包应该往哪个方向传输。

  • 传递信息:唐僧按照村民的指示继续前行。这相当于数据包在网络中按照路由决策的路径进行传输。
    在这里插入图片描述

  • 当IP数据包, 到达路由器时, 路由器会先查看目的IP;

  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;

  • 依次反复, 一直到达目标IP地址;

如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表

  • 当唐僧迷路时,他找到了一个信息源——村民,村民基于他们对路况的了解给出了方向建议(即路由表中的信息)。
  • 村民告诉唐僧应该往哪个方向走,这就是一个路由决策的过程。
  • 唐僧根据村民的建议选择了下一跳的方向(向南走),并继续前行。
  • 如果唐僧在途中遇到更了解路况的村民,他们可能会给出更优的路径建议。
    在网络中,路由器之间会不断地交换路由信息,使用动态路由协议来更新路由表。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算用于角点检测的梯度矩阵的最小特征值。 该函数类似于 cornerEigenValsAndVecs,但它计算并存储协方差矩阵导数的最小特征值&…

尚硅谷javaweb笔记

1、基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com 静态web html,css 提供给所有人看的数据始终不会发生变化! 动态web 淘宝,几乎是所有的网站; 提供给所有人看的数据始终会发生变化&…

【C高级】有关shell脚本的一些练习

目录 1、写一个shell脚本,将以下内容放到脚本中: 2、写一个脚本,包含以下内容: 1、写一个shell脚本,将以下内容放到脚本中: 1、在家目录下创建目录文件,dir 2、dir下创建dir1和dir2 …

计算机毕业设计 基于Python的汽车销售管理系统 Python+Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

how can I train a OpenAI fine tuned model with more prompts

题意:我如何使用更多提示来训练一个 OpenAI 微调模型? 问题背景: I fine-tuned OpenAI model with some prompts following this documentation it succeeded and created a new model in the playground. How I can retrain (fine-tune) th…

Linux Vim编辑器常用命令

目录 一、命令模式快捷键 二、编辑/输入模式快捷键 三、编辑模式切换到命令模式 四、搜索命令 注:本章内容全部基于Centos7进行操作,查阅本章节内容前请确保您当前所在的Linux系统版本,且具有足够的权限执行操作。 一、命令模式快捷键 二…

Unity引擎绘制多边形属性图

大家好,我是阿赵   在制作游戏的时候,经常会遇到需要绘制多边形属性图的需求,比如这种效果: 可以根据需要的属性的数量变化多边形的边数,然后每一个顶点从中心点开始到多边形的顶点的长度代表了该属性的强度&#xf…

超声波清洗机哪个品牌更值得推荐一些?四款良心眼镜清洗机值得信赖!

作为一名拥有20年戴镜经历的眼镜一族,我深深体会到清洁眼镜的种种挑战:微小缝隙里的污垢难以清除,频繁积累的脏污往往让我无暇应对,而用力擦拭又恐伤及镜片,这确实让人苦恼不已,渴求一种有效的清洁解决方案…

C++11(5)

目录 12。function包装器 用法 function的应用 13。bind绑定 bind的应用——计算利息 万众瞩目的C11它又来了,本章将继续讲解C11更新的内容,欢迎观看!!! 12。function包装器 function包装器 也叫作适配器。C中的…

大数据新视界 --大数据大厂之算法在大数据中的核心作用:提升效率与智能决策

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

情感类智能体——你的微信女神

智能体名称:你的微信女神 链接:文心智能体平台AgentBuilder | 想象即现实 (baidu.com)https://agents.baidu.com/agent/preview/RulbsUjIGj4wsinydlBH7AR3NQKFungt 简介 “你的微信女神”是一个直率的智能体,她用犀利而真实的言辞帮助用户…

kubernetes调度2

1、各种缩写的应用 [rootk8s-master test]# kubectl get rsNAME DESIRED CURRENT READY AGEtest001-64c7957b5c 2 2 2 8m59stest001-698b98bb8f 0 0 0 12m[rootk8s-master test]# kubectl get replicas…

医疗领域患者监控中的手势识别:一种深度卷积神经网络方法

这篇论文的标题是《Hand Gesture Recognition for Patient Monitoring in the Medical Field: A Deep Convolution Neural Networks Approach》,作者们来自印度的Chaitanya Bharathi Institute of Technology电子与通信工程系。论文主要探讨了在医疗领域&#xff0c…

【Redis入门到精通二】Redis核心数据类型(String,Hash)详解

目录 Redis数据类型 1.String类型 (1)常见命令 (2)内部编码 2.Hash类型 (1)常见命令 (2)内部编码 Redis数据类型 查阅Redis官方文档可知,Redis提供给用户的核心数据…

先导小型五轴数控加工中心助力职业教育

职业本科高校规模不断扩大,职校学生升学渠道打通,产教融合更加紧密,科教融汇成果不断出现,教学改革持续深化……种种迹象表明,职业教育大变革已经开启。 推进新型工业化、发展新质生产力等时代命题与职业教育发展方向和…

深刻理解OS管理与进程

OS是什么 OS:operator system OS的本质是进行软硬件资源管理的软件 内存是cpu与外部间的巨大缓存 OS的意义 对下:操作系统对下软硬件资源的管理,保证系统稳定的,高效的安全的能进行良好的工作(手段)对上&am…

Linux--禁止root用户通过ssh直接登录

原文网址:Linux--禁止root用户通过ssh直接登录_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Linux服务器怎样禁止root用户通过ssh直接登录。 为什么要禁止? 因为root用户是每个Linux系统都有的,黑客可以使用root用户名尝试不同的密码来暴力破…

电机控制系统PCB设计 222

6 还能只用网络标号?没用网络端口比较电流 通过SD引脚来控制电机驱动右边是电机四个MOS管是连在一起的不懂为啥加左边这个好像说只要用芯片的 就加个滤波电容?DRV87里也有这个 难道都要有这个?? 缓冲? 数字逻辑?加了左上这个 吸收的防止电源超过7.2V这放旁边就行??? 取…

C++ OpenCV Canny边缘检测,使用Trackbar滑动条选择最佳参数

目录 一、代码二、检测效果 一、代码 下面代码可以通过Trackbar滑动条拖动查看最佳阈值&#xff0c;使用只需要修改导入图像路径。本教程提供的边缘检测方法为Canny&#xff0c;学者可以在此框架基础上替换为其它检测方法。 具体代码见下&#xff1a; #include <iostream…

重磅发布:OpenAI o1全新推理模型系列

2024年9月12日&#xff0c;OpenAI正式推出全新的推理模型系列——OpenAI o1。这款全新AI模型系列专为解决复杂问题而设计&#xff0c;能够在响应前花费更多时间进行思考&#xff0c;并通过深入推理应对比以往模型更具挑战性的科学、编程和数学问题。 1. 开发背景与首发版本 今…