【计算机网络】初识IP协议

news2024/10/5 17:27:06

前言

IP协议,可谓是程序猿必备的基础功之一,这不仅仅是因为IP协议为面试的常客,更是因为IP协议为整个网络协议中最重要、最常被人接触的一种协议。例如IP地址就几乎为所有人所熟知的一种概念,无论是浏览网页、聊天、打游戏,都离不开IP地址,想必这也说明了其重要性了吧。掌握IP协议不仅能够让你在面试脱颖而出,更能提高你的作为程序员的内功,学习IP协议刻不容缓,从现在开始!!!

IP协议基础

概念

IP协议是一种不可靠的网络传输协议,对于数据的传输只是尽力而为,主要负责将数据传输到网络中唯一标识的目的地址。IP协议工作在TCP/IP模型中的网络层,负责为数据包分配源IP和目的IP,并将选择合适的路由将数据传输到目的地。

IP协议分为IPV4与IPV6,IPV6是用于解决IPV4地址耗尽问题而被设计出来的终极解决方案,但因为IPV6与IPV4兼容性不好,难以推广,所以当今主流的版本还是IPV4.

在这里插入图片描述

IP的报文格式

下图为IP的报文格式。

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
| 4位版本  |  4位首部长度  | 8位服务类型(TOS)|       16位总长度       | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|         16位标识        |    3位标志    |     13位片偏移         | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|      8位生存时间(TTL)    |   8位协议     |      16位首部校验和    | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       32位源IP地址                            | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|                       32位目的IP地址                           | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 
|              选项                       |         填充        | 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          数据报                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • 版本:用于标识IP协议版本,如:IPV4则为4,IPV6则为6

  • 首部长度:用于计算报头长度,计算方式为:首部长度 * 4

  • 服务类型:一般服务有:最小延时、最大吞吐量、最高可靠性、最小成本。

  • 总长度:IP数据报的总长度。

  • 16位标识:用于标识报文的唯一性,当报文被分片时则分片的标识都一致

  • 3位标识

    • 第一位:用于保留,暂时不使用
    • 第二位:标识为1则表示禁止IP数据报分片
    • 第三位:标识为1则表示数据报分片了,为0表示数据数据之后没有分片了
  • 13位片偏移:用于标识分片的数据在原数据的位置,计算方式为

  • 8位生存时间:用于标识数据最多能经过多少次路由转发,最多经过为255个路由转发。

  • 8位协议:用于标识上层的协议,为TCP则交付给上层TCP协议…

  • 16位首部校验和:用于检验是否头部是否损坏

IP地址

子网掩码

一个IP地址被划分成网络号与主机号,子网掩码是用于区别IP地址中网络号与主机号的手段,子网掩码通过与IP之地进行按位与来区别主机地址与网络地址。

工作原理:

子网掩码CIDR表示法可用主机数描述
255.0.0.0/816,777,214A类地址,超大规模网络
255.255.0.0/1665,534B类地址,大规模网络
255.255.255.0/24254C类地址,中小规模网络
255.255.255.128/25126子网掩码用于划分更小的子网
255.255.255.192/2662更小规模的子网

例子:

192.168.1.128/26  // 十进制
11000000.10101000.00000001.10000000/26 // 二进制
11111111.11111111.11111111.11000000    // 掩码

// 主机号范围:
192.168.1.129 ~ 192.168.1.190
// 网络地址:
192.168.1.128
// 广播地址:
192.168.1.191
//计算过程:
根据最后6位掩码得出:可用主机地址数为63个。除去网络地址与广播地址则为61个。

IP地址分类

IP地址分为4类地址:

  1. A类地址:0.0.0.0/8 ~ 127.0.0.0/8 为A类地址, 主机位有24位
  2. B类地址:128.0.0.1/16 ~ 191.255.0.0/16 为B类地址,主机位有16位
  3. C类地址:192.168.0.0/24 ~ 239.255.255.0/24 为C类地址,主机位有16位
  4. D类地址:224.0.0.0 ~ 239.255.255.255 为D类地址,没有主机位,常用于多播。

特殊地址:

  • 本地环回:127.0.0.0/8 的地址都为本地环回,数据只会在本机内传输

  • 私网IP:私网IP指的是不会传入公网(互联网)的地址,设置之初用于本地网络的数据传输,私网IP有以下三类:

    1. 10.0.0.0~10.255.255.255 (10/8) :能够容纳 2 24 2^{24} 224 个主机,一般用于大型网络
    2. 172.16.0.0~172.31.255.255(172.16/12) : 能够容纳 2 20 2^{20} 220 个主机,一般用于中型网络
    3. 192.168.0.0~192.168.255.255(192.168/16) : 能够容纳 2 16 2^{16} 216 个主机,一般用于小型网络
  • 广播地址:广播地址指的是主机位全为1的地址,如:192.168.255.255/16。广播地址允许设备将数据发送给同一网络中全部的主机。

  • 网络地址:网络地址指的是主机为全为0的地址,如:192.168.0.0/16.网络地址用来标识所在子网的地址,用于确定IP所属网络。

IP协议工作原理

IP地址划分

当今世界上拥有70多亿人口,而IPV4地址使用32个bit位组成的,最多只能容纳42亿台主机,为了解决IPV4地址短缺的问题,世界各地的科学家们也是绞尽脑汁,最终得到了子网划分与NAT模式这两种最常用的解决方案。

子网划分

我们在前面已经了解了子网掩码,那么也该介绍子网掩码相关的子网划分了。世界上的网络分为4大类,但现实是我们不太可能会存在一个子网内存在数十万台主机的情况,直接使用A类、B类会造成极大的浪费,为了解决这种情况,子网划分技术被设计了出来。

工作原理

子网划分其实就是把主机号的一部分划分给网络号,让一个大的网络地址空间划分成若干个较小的、更容易管理的子网,从而提高网络地址空间的利用率与管理性。

image.png

可变掩码长度

子网划分通过掩码的确提高了网络的利用率,但实际上不是每个子网都需要如此大的主机范围。

例如:

  1. 部门A需要500台主机
  2. 部门B需要100台主机
  3. 部门C需要50台主机。

像这种情况子网掩码如果保持一致,那么子网划分的效率将会降低不少,于是为了继续提高IP地址的利用率,可变长度子网掩码(VLSM)又由此诞生。

image.png

NAT模式

尽管子网划分技术提高了网络IP地址的利用率,但IP地址的总量也还是不会改变,如果每台主机都分配一个IP地址,那么还是远远不够的,毕竟当今人口70亿,而IP地址只有40亿个。

此时NAT技术便应声而起,公网IP不够,私网IP来凑,NAT技术允许将主机私网地址转换成公网地址,从此NAT技术便成为最重要的解决IP数量不足的解决方案,以至于严重阻碍到IPV6的发展。

工作原理

NAT技术通过映射技术来实现私网到公网的转换,每个连接通过私网IP:端口->公网IP:端口的方式来进行映射,当端口有冲突时则随机选择一个端口。

在这里插入图片描述

NAT技术的小细节

  • TCP与NAT:使用TCP连接时,NAT服务器会在接收到FIN信号时删除映射关系,如果连接长时间无响应则一般在5分钟后删除映射条目。

  • UDP与NAT: 使用UDP连接时,NAT服务器会建立一个临时映射条目,如果连接长时间无响应则自动删除映射条目。

NAT的限制

  • 无法直接访问位于NAT服务器后的主机。
  • 映射条目的创建和销毁会损耗一定性能。
  • 一旦NAT设备出现异常,所有的TCP连接都会断掉。

路由选择

IP协议不能仅凭自己就将数据发送到远端地址,为了将报文发送到合适的网络,IP报文需要交付给路由器,让路由器选择最适合的地址。

路由器中拥有着一种叫做路由控制表的数据结构,当IP报文被发送到路由器时,路由器会根据其路由控制表选择一个最匹配的IP地址,如果没有匹配的IP地址,则发送到默认路由。

路由选择类型

  1. 静态路由:需要管理员手动设置路由表。
  2. 动态路由:自动计算更新路由表。

在这里插入图片描述

IP相关协议

ICMP

无论你是否为一名程序猿,相信ping指令都多多少少有所了解,而这个ping指令便是利用了ICMP协议而实现的程序。ICMP协议是为了辅助IP协议而被设计出来的协议,因为IP协议无法确定远端IP地址是否存在,

工作流程

一般情况下,IP报文如果转发到路由器,发现目的IP地址不存在,那么路由器将会丢弃该IP报文,但如果IP报文封装上ICMP协议,则路由器将会把将错误原因返回填上到ICMP的报文中,并返回。

在这里插入图片描述

DHCP

DHCP是一种自动分配IP地址的协议,意在实现即插即用,也就是当设备连接上网络后,DCHP服务器(一般在路由器上)会自动为你分配一个闲置的IP地址,免除了每次添加设备都要分配IP地址的麻烦。

工作流程

  • 发现阶段:首先发送一条广播信息(源ip:0.0.0.0, 目的ip:255.255.255.255)来发现DHCP服务器,DHCP发现信息后将返回一条DHCP提供包信息(包含可分配的IP、子网掩码、租约时间等).

  • 请求阶段:客户端选择一个IP地址,并发送请求信息给DHCP服务器,表明接受服务。DHCP服务器收到信息后,发送一个DHCP确认信息给客户端,表明正式分配IP地址给客户端。

DNS

DNS是一种将域名转换为IP地址的协议,打比喻来讲DNS就像是手机中的电话簿,我们可以用名字来标明电话号码,这样我们便减少了通信的成本。

工作流程

  1. 发送请求:用户向DNS服务器查询域名对应的IP地址。

  2. 检查缓存:用户的请求会先发送到本地DNS服务器,DNS服务器会检查是否有该域名的缓冲,如果没有则递归查询。

  3. 递归查询:本地DNS服务器没有域名信息,则会向根DNS服务器查询,层层向上查询,类似于在树中递归查找。

  4. 返回结果:如果找到了结果则将结果返回给客户端。

总结

IP协议是一种不可靠的网络协议,主机需要访问互联网则必须要有公网IP,为了解决IP地址不足的问题,子网划分与NAT技术被发明了出来。为了更好的服务IP协议,像DNS、DHCP、ICMP等协议被设计出来,互联网技术的发展也离不开这些辅助的协议。

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

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

相关文章

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍

网络编程: 高级IO与多路转接select,poll,epoll的使用与介绍 前言一.五种IO模型1.IO的本质2.五种IO模型1.五种IO模型2.同步IO与异步IO3.IO效率 二.非阻塞IO1.系统调用介绍2.验证代码 三.select多路转接1.系统调用接口2.写代码 : 基于select的TCP服务器1.封装的Socket接口2.开始写…

HarmonyOS NEXT星河版之自定义List下拉刷新与加载更多

文章目录 一、加载更多二、下拉刷新三、小结 一、加载更多 借助List的onReachEnd方法,实现加载更多功能,效果如下: Component export struct HPList {// 数据源Prop dataSource: object[] []// 加载更多是否ingState isLoadingMore: bool…

WebGIS常用技术体系记录

1、数据下载 (1)OSM下载开源矢量数据,数据较全,但是质量一般; (2)地理空间数据云下载DEM影像; (3)datav下载行政区 http://datav.aliyun.com/tools/atlas/…

了解Maven,并配置国内源

目录 1.了解Maven 1.1什么是Maven 1.2快速创建一个Maven项⽬ 1.3Maven 核⼼功能 1.3.1项⽬构建 1.3.2依赖管理 1.4Maven Help插件 2.Maven 仓库 2.1中央仓库 2.2本地仓库 3.Maven 设置国内源 1.查看配置⽂件的地址 2.配置国内源 3.设置新项⽬的setting 1.了解Ma…

【iOS】Runtime

文章目录 前言一、Runtime简介二、NSObject库起源isaisa_t结构体cache_t的具体实现class_data_bits_t的具体实现 三、[self class] 与 [super class]四、消息发送与转发五、Runtime应用场景 前言 之前分part学习了Runtime的内容,但是没有系统的总结,这篇…

自然语言处理(NLP)—— 主题建模

1. 主题建模的概念 主题建模(Topic Modeling)是一种用于发现文档集合(语料库)中的主题(或称为主题、议题、概念)的统计模型。在自然语言处理和文本挖掘领域,主题建模是理解和提取大量文本数据隐…

vue-$set修改深层对象的值

背景: 点击编辑按钮,打开修改预算的抽屉,保存后更新此行数据的预算,以前是调接口刷新表格,这次的数据是由前端处理更新,由于数据层级比较深,使用$set来修改两层嵌套对象 使用方法: …

upload-labs-第五关

目录 第五关 1、构造.user.ini文件 2、构造一个一句话木马文件,后缀名为jpg 3、上传.user.ini文件后上传flag.jpg 4、上传成功后访问上传路径 第五关 原理: 这一关采用黑名单的方式进行过滤,不允许上传php、php3、.htaccess等这几类文件…

3D按F3为什么显示不出模型?---模大狮模型网

对于3D建模软件的用户来说,按下F3键通常是用来显示或隐藏模型的功能之一。然而,有时当按下F3键时,却无法正确显示模型,这可能会让用户感到困惑。模大狮将探讨这种情况发生的可能原因以及解决方法,帮助设计师们更好地理…

快速搭建高效运营体系,Xinstall App下载自动绑定助您一臂之力

在互联网的浪潮中,App的推广与运营面临着诸多挑战。如何在多变的互联网环境下迅速搭建起能时刻满足用户需求的运营体系,成为了众多企业关注的焦点。今天,我们就来聊聊如何通过Xinstall的App下载自动绑定功能,轻松解决App推广与运营…

[word] word文档字体间距怎么调整? #其他#经验分享

word文档字体间距怎么调整? 调整word文档字体间距的方法: 打开一个预先写好文字的文档。选中所有文字,点击字体右下角的“更多选项”。 在弹出的“字体”对话框中进入“字符间距”选项卡,在“间距”选项中即可设置字体间距。 设…

智慧视觉怎么识别视频?智慧机器视觉是通过什么步骤识别视频的?

智慧视觉功能怎么识别视频?智慧视觉是搭载在智能设备比如手机、AI盒子、机器视觉系统上的一个应用程序或特性,采用计算机视觉和人工智能的技术来识别图像或视频中的内容。如果想了解视频识别,就要明白智慧视觉功能会涉及的以下几个关键步骤和…

知识图谱的应用---智慧司法

文章目录 智慧司法典型应用 智慧司法 智慧司法是综合运用人工智能、大数据、互联网、物联网、云计算等信息技术手段,遵循司法公开、公平、公正的原则,与司法领域业务知识经验深度融合,使司法机关在审判、检查、侦查、监管职能各方面得到全面的…

OpenShift 4 - OpenShift Service Mesh 3 预览

《OpenShift / RHEL / DevSecOps 汇总目录》 了解 OpenShift Service Mesh 3 的变化 OpenShift Service Mesh 是一套在 OpenShift 上安装部署、跟踪监控 Istio 运行环境的实现。红帽在 2023 年底推出了技术预览版的 OpenShift Service Mesh 3,它和目前的 OpenShif…

经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用

经典神经网络(10)PixelCNN模型、Gated PixelCNN模型及其在MNIST数据集上的应用 1 PixelCNN PixelCNN是DeepMind团队在论文Pixel Recurrent Neural Networks (16.01)提出的一种生成模型,实际上这篇论文共提出了两种架构:PixelRNN和PixelCNN,两…

鸿蒙开发的南向开发和北向开发

鸿蒙开发主要分为设备开发和应用开发两个方向,也叫南向开发和北向开发: 鸿蒙设备开发(南向开发),要侧重于硬件层面的开发,涉及硬件接口控制、设备驱动开发、鸿蒙系统内核开发等,目的是使硬件设备能够兼容并…

Linux环境---在线安装MYSQL数据库

Linux环境—在线安装MYSQL数据库 一、使用步骤 1.安装环境 Mysql 驱动 8.0 需要 jdk1.8 才行。 JDK版本:1.8 参考文档 MYSQL版本:8.0.2 下载链接: https://pan.baidu.com/s/1MwXIilSL6EY3OuS7WtpySA?pwdg263 操作系统:CentOS 1.1 建立存…

Python数据分析II

目录 1.HS-排序返回前n行 2.HS-相关性 3.缺失值处理 4.时间 5.时间索引 6.分组聚合 7.离散分箱 8.Concat关联(索引关联) 9.Merge关联(字段关联) 10.join合并(左字段,右索引) 11.行列转置及透视表 12.数据可视化-面向过程 13.数据可视化-面向对象 14.快速生成柱状…

github有趣项目:Verilog在线仿真( DigitalJS+edaplayground)

DigitalJS https://github.com/tilk/digitaljs这个项目是一个用Javascript实现的数字电路模拟器。 它旨在模拟由硬件设计工具合成的电路 像 Yosys(这里是 Github 存储库),它有一个配套项目 yosys2digitaljs,它可以转换 Yosys 将文…

STCunio数字电源带PID数字闭环(带详细的代码说明文档)

STCunio,即 system on chip unusual i/o,采用类似 arduino 构架设计,即使没有单片机知 识的设计师和艺术家们能够很快地通过它学习电子和传感器的基础知识,并应用到他们的设 计当中。设计中所要表现的想法和创意才是最主要的,至于…