【计算机网络_网络层】IP协议

news2024/11/29 16:37:23

文章目录

  • 1. IP的基本概念
    • 1.1 什么是IP协议
    • 1.2 为什么要有IP协议
  • 2. IP的协议格式
  • 3. 网段划分(重要)
    • 3.1 为什么要进行网段划分
    • 3.2 网段划分的规则
      • 3.2.1 古老的划分方案
      • 3.2.2 现代的划分方案
  • 4. 特殊的IP地址
  • 5. 解决IP地址的数量限制问题
  • 6. 私有IP和公网IP
  • 7. 路由及路由表
    • 7.1 数据的路由
    • 7.2 路由表

1. IP的基本概念

1.1 什么是IP协议

IP协议(Internet Protocol)网际互联协议,是属于网络协议栈中的网络层协议

1.2 为什么要有IP协议

在上一节中,我们了解到TCP协议,TCP是用来控制数据在网络传输中的可靠性和传输效率的,因此叫做“传输控制协议”,但是实际上TCP协议并没有发送数据的能力,真正有发送数据的能力的是传输层之下的网络层和数据链路层(IP协议和MAC帧协议)

但是有能力就代表一定能做到么?

答案是否定的,有这个能力只能够表示IP有很大概率能完成这件事情,不代表一定能完成,所以需要在传输层TCP协议控制其稳定高效的将数据跨网络从A主机传输到B主机上。

在刚开始接触网络的时候,我们就已经说了,网络分层的作用是用来解耦,每一层都有每一层需要做的事情,那么对于网络层,需要完成的任务就是**把数据从一台主机交付给另一台主机,也就是数据的路由**

img

虽然在我们日常生活中使用网络的时候,大多数的场景下是连接无线网络(WI-FI),但是实际上在网络通信中,所有的网络都是通过网线进行连接的,只是在我们使用端会进行无线信号转化。还会有一些情况用的是网线连接的,大家肯定看过水晶头

IP的数据路由方式是按照IP地址在一堆路由器中选择下一个路由器,在网络环境中跳来跳去,最终跳到了目的主机

2. IP的协议格式

img

1. 4位版本

在日常使用中经常能看到IP的版本有两种:IPv4和IPv6,这个符号就是用来标识的(IPv4和IPv6不兼容)

2. 4位首部长度

提到协议就一定要考虑如何进行解包和分用,4位首部长度就是用来确定协议报头的长度的,和TCP协议相同,这个4位首部长度的单位是4字节

3. 8位服务类型

3位优先权字段(已经弃用), 4位TOS字段,和1位保留字段(必须置为0)。 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个。 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要。

4. 16位总长度(字节数)

整个IP报文的总长度

5. 16位标识

唯一标识主机发送的报文. 如果IP报文大于数据链路层的最大传输单元,导致IP层进行分片, 那么每一个片里面的这个id都是相同的。

6. 3位标志和13位片偏移

3位标志字段: 第一位保留(保留的意思是暂未使用,备用)。第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为0, 其他是1,分片的该位为1说明该分片还不是整体报文的最后一片。

对于禁止分片标志位,如果置1表示禁止分片。该报文经过路上路由器时,若该路由器的最大MTU小于该报文的有效载荷,由于禁止分片标志位置1,路上路由器无法对其进行分片,该报文将会被丢弃。传输层将会超时重传该报文,并选择一条可以满足数据传输的路由通路。(找到较大吞吐量的路)。那么所有的路由器的最大MTU全部设置为1500字节不就好了?其实最大MTU较小的路由器更适合小容量的有效载荷通过,速度较快。

13位分片偏移(framegament offffset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了)。

7. 8位生存时间(TTL)

报文在网络中“跳来跳去”的话,有可能会出现找不到对应的目的IP的情况,在这种情况下就需要记录一条报文的生存时间(跳数),当跳数累计到一定程度的时候,就认为这个报文无效,然后途中路由器就不会再路由这条报文,直接丢弃

8. 8位协议

我们知道网络层的上层协议是传输层,有UDP和TCP协议,为了区分上层协议是什么,使用8位协议号来标识

9. 16位首部检验和

校验不通过,直接将报文丢弃,TCP有超时重传机制会补发给IP。

10. 32位源IP地址

表示一条报文的最初的发送地址

11. 32位目的IP地址

表示一条报文的目的地址

3. 网段划分(重要)

IP地址 = 网络号 + 主机号

网络号:保证相互连接的两个网段具有不同的标识; (就好像学校里不同的学院有不同的编号)

主机号:在同一网段内,会存在多个不同的主机,通过主机号来标识同一网段的不同主机

3.1 为什么要进行网段划分

互联网中存在非常庞大数量的主机,其中一台主机想要将数据发送到另外一台指定主机,用于查找的消耗非常大,为了方便快速的定位到一台主机,所以将子网进行了划分,然后每次在查找主机的时候按照网段进行划分即可

img

  • 不同网段之间的数据传输依靠路由器,所以如果想要把数据在网络中传输,路由器这种设备应该隶属于两个网段,路由器也是一台主机,它在多个网段都有一个当前网段的IP地址。通常情况下,路由器的子网IP地址是网段标识.1(LAN口),同时路由器也有WAN口表示上层子网的标识
  • 手动管理子网的IP太复杂了,所以一般来说,在一个子网内路由器充当IP的管理者
  • 有一种技术叫做DHCP,能够自动给加入当前子网的设备分配一个不同于当前子网段主机号的IP,一般路由器都带有DHCP功能,所以路由器也可以看作是DHCP服务器

3.2 网段划分的规则

3.2.1 古老的划分方案

把IP地址分为5类

img

  • 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

这种划分方案其实非常的不合理,很少有子网能够使用A类地址,一个子网内很少出现224 个主机,但是B类地址的设计分类就很适合使用,所以大家都想使用B类地址,导致IP地址不够用,所以提出了第二种划分方案

3.2.2 现代的划分方案

提出的新方案叫做CIDR(Classless Interdomain Routing),引入一个**子网掩码(subnet mask)**来区分网络号和主机号

子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;

将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;

网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

img

4. 特殊的IP地址

  • 在一个网段内,如果主机号为0,所对应的就是这个网段IP的网络号

  • 在一个网段内,如果主机号对应的每个二进制位都是1,所对应的就是这个网段的广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

  • 127.*表示的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

5. 解决IP地址的数量限制问题

我们知道,一个IP地址的大小是4个字节,也就死活32个位,最终的IP地址个数最多也就42亿左右,这其中还存在一部分特殊IP地址,所以最终能够用在网络间通信的IP地址就更少了。但是TCP/IP协议规定,每一个参与网络通信的主机都应该有一个IP地址

使用CIDR技术只能够提高IP的利用率,没有办法增加IP地址个数,所以IP地址不够用的问题还是没有解决,但是现在有一些技术能够解决这个问题

  • 动态分配IP地址:只给接入网络的设备分配IP地址,所以每次入网的时候,同一个MAC地址的设备的IP地址不一样
  • NAT技术(后面再详细介绍)
  • IPv6协议:和IPv4是两个协议,并不兼容,采用128位表示一个IP地址,但是目前IPV6还没有普及

6. 私有IP和公网IP

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

1、10.*,前8位是网络号,共16,777,216个地址 (企业级路由器使用)
2、172.16.*到172.31.*,前12位是网络号,共1,048,576个地址 (企业级路由器使用)
3、192.168.*,前16位是网络号,共65,536个地址(家用路由器使用)

包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)

路由器的作用

1、数据包转发

2、DHCP功能、组建子网(如配置无线网络。注:局域网是内网IP)

3、NAT功能

数据是如何发送到服务器的?

在这里插入图片描述

(这里借用一下大佬dragon的图)

我们只带路由器是连接两个或多个网络的硬件设备,在路由器上有两种网络接口,分别是LAN口和WAN口(上文中提到过):

其中LAN口(Local Area Network)表示连接本地网络的端口,主要与家庭网络中的交换机、集线器或PC相连。WAN口(Wide Area Network)表示连接广域网的端口,一般指互联网。我们将LAN口的IP地址叫做LAN口IP,也叫做子网IP,将WAN口的IP地址叫做WAN口IPO,也叫做外网IP

  • 不同的路由器,子网IP实际上都是一样的(一般来说是192.168.1.1)子网内的主机IP地址不能重复,但是子网之间的IP地址就可以重复
  • 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点,这样的运营商路由器可能会有很多级,最外层的运营商路由器的WAN口IP就是一个公网IP了
  • 如果希望我们自己实现的服务器程序,能够在公网上被访问到,就需要把程序部署在一台具有外网IP的服务器上,这样的服务器可以在阿里云/腾讯云上进行购买

由于私网IP不能出现在公网当中,因此子网内的主机在和外网进行通信时,路由器会不断将数据包IP首部中的源IP地址替换成路由器的WAN口IP,这样逐级替换,最终数据包中的源IP地址成为一个公网IP,这种技术成为NAT(Network Address Translation,网络地址转换)。

  • 为什么私有IP不能出现在公网中?

不同局域网中主机的IP地址有可能相同,所以没有办法标识一台唯一的主机,如果出现在公网中,就会出现找不到指定的目的IP的情况

但由于IP地址不足的原因,我们不能让主机直接使用公网IP而让主机使用私网IP,因为私网IP可以重复也就意味着我们可以在不同的局域网使用相同的IP地址,缓解了IP的不足

此外,我们不能直接使用公网IP还有一个原因就是,因为我们的数据包必须要经过运营商的路由器,如果我们发送的数据直接到了公网,那也就意味着我们再也不用交网费了,这是不现实的

  • 两个局域网当中的主机不能不跨公网进行通信

两个局域网当中的主机理论上是不能不跨公网进行通信的,因为一个主机要将数据发送给另一台主机的前提是得先知道另一台主机的IP地址。即便现在这个主机知道了另一台主机的IP地址,但有可能这两台主机的IP地址是一样的,因为它们的IP地址都是私网IP地址。 当这一台主机发送数据时将目的IP地址填成和自己相同的IP地址,操作系统就会认为这个数据就是要发给自己的,而不会向外进行发送了。

所以数据要从一个局域网发送到另一个局域网,如果不经过公网是基本上不可能的。我们在和别人聊天的时候,也不是直接将数据从一个局域网直接发送到了另一个局域网,而是先将数据经过公网发送到了服务器,然后再由服务器将数据经过公网转发到了另一个局域网。

但实际确实存在一些技术能够使数据包在发送过程中不进行公网IP的替换,而将数据正确送到目标主机,这种技术叫做内网穿透,也叫做NAT穿透。

7. 路由及路由表

7.1 数据的路由

数据路由的过程:

img

路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程。

所谓 “一跳” 就是数据链路层中的一个区间。具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

IP数据包的传输过程也和问路一样:

  1. 当IP数据包, 到达路由器时, 路由器会先查看目的IP;
  2. 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器。依次反复, 一直到达目标IP地址;(一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来处理数据包。现在主机使用的网关,一般指的是默认网关)
  3. 通过路由表来判定这个数据包应该发送到哪里

7.2 路由表

在Linux下可以使用route指令来查看Linux机器的路由表

image-20240319171932866

  • Destination:目标网络
  • Gateway:下一跳(网关)
  • Genmask:子网掩码
  • Flags:使用状态(U/UG/UGH)
  • Iface:物理接口

若此时有一个目的IP10.0.4.0
1、遍历路由表
2、目的IP & 路由表配置的子网掩码,确定该数据包要去的目标网络
3、将&出来的结果和目标网络(Destination)进行比较
4、在路由器中找到这个目标网络,这个目标网络就是下一跳的目的地。
此时有另一个目的IP202.10.1.2
1、重复上述步骤发现路由表中并没有目标网络
2、那么路由器下一跳的目的地就是该路由器配置的默认网关
3、通过Iface接口发送报文

注:数据报位于不同的路由器中的网络号是不一样的。子网掩码越来越长,说明数据报去往的目标网络越来越具体。

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

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

相关文章

【视频异常检测】Real-world Anomaly Detection in Surveillance Videos 论文阅读

Real-world Anomaly Detection in Surveillance Videos 论文阅读 Abstract1. Introduction2. Related Work3. Proposed Anomaly Detection Method3.1. Multiple Instance Learning3.2. Deep MIL Ranking Model 4. Dataset4.1. Previous datasets4.2. Our dataset 5. Experiment…

java8:LinkedList的实现原理

概述 先来看看源码中的这一段注释,我们先尝试从中提取一些信息: Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).All of the operations …

【Linux(1)】Linux的一些基本指令(补充上一篇)

思维导图 学习内容 通过上面的学习目标,我们可以列出要学习的内容: linux的一些指令:cd mkdir cp touch which rm cat alias 一些基本的概念:指令的概念,用户家目录是什么...... 一、Linux的一些指令 1.1 重新认识…

【SpringSecurity】十三、基于Session实现授权认证

文章目录 1、基于session的认证2、Demosession实现认证session实现授权 1、基于session的认证 流程: 用户认证成功后,服务端生成用户数据保存在session中服务端返回给客户端session id (sid),被客户端存到自己的cookie中客户端下…

信息发布系统

特色功能 画布功能---可任意拖动各控件的播放位置及大小,可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…

[uni-app] uni.createAnimation动画在APP端无效问题记录

文章目录 uni.createAnimation动画描述动画代码templatejs部分 问题原因改进方案template js部分改动git 改进截图 uni.createAnimation 动画描述 实现一个以左上角为锚点,以Z轴做平面抬起及落下的动画效果 动画代码 template <image v-if"showHot(item.cname)&quo…

查找众数及中位数 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 众数是指一组数据中出现次数量多的那个数&#xff0c;众数可以是多个。 中位数只是指把一组数据从小到大排列&#xff0c;最中间的那个数&#xff0c;如果这组数…

Filter and Listener and AJAX and JSON

一、Filter Filter 表示过滤器&#xff0c;是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。&#xff08;拦截指定资源&#xff09; 正常情况下&#xff0c;浏览器可以访问服务器上的所有的资源&…

【机器学习】无监督学习算法之:高斯混合模型

高斯混合模型 1、引言2、高斯混合模型2.1 定义2.2 原理2.3 实现方式2.4 算法公式2.4.1 概率密度函数2.4.2 EM算法之E步骤2.4.2 EM算法之M步骤 2.5 代码示例 3、总结 1、引言 小屌丝&#xff1a;鱼哥&#xff0c;给俺讲一讲什么是高斯啊 小鱼&#xff1a;高斯&#xff1f; 小…

苹果意将Gemini引入iPhone;英伟达发布新AI GPU;Grok正式开源

苹果正在谈判将 Gemini 引入 iPhone Mark Gurman 报道&#xff0c;苹果正在谈判将 Google 的生成式 AI 大模型 Gemini 引入 iPhone。 知情人士透露&#xff0c;两家公司正在积极谈判&#xff0c;让苹果获得 Gemini 授权&#xff0c;为今年 iPhone 软件的一些新功能提供动力。苹…

HCIA——30奈奎斯特定理、香农定理

学习目标&#xff1a; 计算机网络 1.掌握计算机网络的基本概念、基本原理和基本方法。 2.掌握计算机网络的体系结构和典型网络协议&#xff0c;了解典型网络设备的组成和特点&#xff0c;理解典型网络设备的工作原理。 3.能够运用计算机网络的基本概念、基本原理和基本方法进行…

Spring Boot 自动化单元测试类的编写过程

前言 Web环境模拟测试 企业开发不仅要保障业务层与数据层的功能安全有效&#xff0c;也要保障表现层的功能正常。但是我们一般对表现层的测试都是通过postman手工测试的&#xff0c;并没有在打包过程中代码体现表现层功能被测试通过。那么能否在测试用例中对表现层进行功能测…

【NLP笔记】RNN总结

文章目录 经典RNN单向RNN双向RNNDeep RNNRNN特性总结 变体RNNLSTMGRU 参考及转载内容&#xff1a; 循环神经网络&#xff08;RNN&#xff09;深度学习05-RNN循环神经网络完全理解RNN&#xff08;循环神经网络&#xff09; 传统的CNN&#xff08;Covolutional Neural Network&am…

【考研数学】汤家凤《1800题》值不值得做?

属于中等偏上的水平&#xff0c;想要基础扎实把1800拿下就错不了&#xff01; 这1800道题&#xff0c;真的不是盖的&#xff0c;数量相当可观&#xff01;想搞定它们&#xff0c;可得抓紧时间&#xff0c;不然真做不完。而且&#xff0c;想要效果更佳&#xff0c;还得来个二刷…

Django分页器

Django分页器 分页器前瞻之url urls.py不需要做修改 urlpatterns [path(test/, views.test,nametest), ]假设此时在原有的路径http://127.0.0.1:8000/app01/test后面添加/?page2 然后再后端获取到page def test(request):page request.GET.get(page)print(page) # 2retu…

MATLAB环境下基于改进最大相关峭度解卷积的滚动轴承故障诊断

相关峭度解卷积MCKD是一种新的解卷积方法&#xff0c;其设计了一个新的目标函数—相关峭度&#xff0c;并以此为优化目标设计一系列的FIR滤波器&#xff0c;为实现最好的效果&#xff0c;需要从中找到最优滤波器并最终实现对信号中噪声的抑制和对信号中冲击成分的突出的目的。M…

O2OA红头文件流转与O2OA版式公文编辑器基本使用

O2OA开发平台在流程管理中&#xff0c;提供了符合国家党政机关公文格式标准&#xff08;GB/T 9704—2012&#xff09;的公文编辑组件&#xff0c;可以让用户在包含公文管理的项目实施过程中&#xff0c;轻松地实现标准化公文格式的在线编辑、痕迹保留、手写签批等功能。并且可以…

Spire.PDF for .NET【文档操作】演示:将PDF拆分为多个PDF文件

Spire.PDF for .NET 是一款独立 PDF 控件&#xff0c;用于 .NET 程序中创建、编辑和操作 PDF 文档。使用 Spire.PDF 类库&#xff0c;开发人员可以新建一个 PDF 文档或者对现有的 PDF 文档进行处理&#xff0c;且无需安装 Adobe Acrobat。 E-iceblue 功能类库Spire 系列文档处…

基于Springcloud+Vue校园招聘系统 Eureka分布式微服务

以行动研究为主&#xff0c;辅以文献法、教育实验法和个案研究法等方法相结合的研究方法。在研究方法&#xff0c;遵循软件工程中软件生命周期的规则。概括来讲可以划分成三大步&#xff1a;系统规划、系统开发和系统运行维护。将其上述步骤细分下来&#xff0c;可以分为以下8小…

[Qt学习笔记]Qt实现鼠标点击或移动时改变鼠标的样式以及自定义鼠标样式

1、鼠标样式介绍以及对应函数 在Qt中大概有20种左右的内置鼠标样式&#xff0c;一般使用setCursor(Qt::CursorShape shape)来进行设置&#xff0c;一般常用的有标准箭头、手型&#xff0c;双箭头等等形状&#xff0c;对于不同的操作系统下&#xff0c;鼠标的样式显示会略有差别…