【计算机网络】网络层——IP

目录

  • 1.概念
  • 2.协议格式
  • 3.网络划分
    • ip组成
    • IP地址分类
    • IP地址数量
    • 私网IP和公网IP
    • 子网掩码
    • 路由

1.概念

引入

应用层http协议是进行构建和解析请求request和响应response。

传输层的TCP/UDP协议是不提供数据的运输。传输层是为数据传输指定规则。但是,UDP协议并不保证数据传输的可靠性。TCP协议制定了确认应答机制,超时重传机制,连接管理机制,拥塞控制等保证了数据的可靠性,制定了捎带应答,延时应答,快重传机制等保证了数据传输的效率

实际有数据传输能力的是网络层IP协议和数据链路层(后面讲),提供了将数据从主机A跨网络送到主机B的能力。

在这里插入图片描述

概念

在网络层,有一个很重要的设备路由器,路由器可以连接两个局域网,具有数据在网络中路由的功能。

路由器也相当于是局域网里的一台主机,含有网络层及其以下层,但是现在的路由器很强大,已经拥有了应用层及其以下层。

  • 主机:配有IP地址,但是不进行路由控制的设备。
  • 路由器:即配有IP地址,又能进行路由控制。
  • 结点:主机和路由器的统称

网络层的主要作用是实现终端节点之间的通信。这种终端节点之间的通信,也叫点对点通信。

在这里插入图片描述

2.协议格式

在这里插入图片描述

  • 4位版本号:指定IP协议的版本,对于IPv4,就是4。

  • 4位首部长度:IP头部的长度是以32bit(4字节)作为基本单位,也就是报头字节数等于4位首部长度乘4字节。最小报头长度等于20字节,4个比特位表示的最大数字是15,所以最长报头长度等于60字节,多余部分是选项。

  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者互相冲突,只能选一个,具体选哪个,决定于应用层协议。

  • 16位总长度:IP数据报整体占多少字节。包括了数据和报头。

  • 8位生存时间(TIME TO LIVE,TTL):数据报到达目的地的最大报文跳数,也就是经过的路由器数。一般是64。每次经过一个路由,TTL减1,一般减到0还没到达,那么就丢失了,这个字段是防止出现路由循环。

  • 8位协议:标识上层协议类型。传输给上层哪个协议。

  • 16位头部校验和:使用CRC校验,来检验报头是否损坏,只需要检验头部,数据在TCP层检验了。

  • 32位源IP地址和32位目的IP地址:标识接收端主机和发送端主机。

  • 选项:选项最多40字节,报头超过20字节部分。

这里需要了解的知识是切片:

分片概念: 分片就是将传输层发现来的数据,分成几段,再发送下去。

为什么要分片?
每种数据链路的最大传输单元( MTU )不同,网络层的 IP 是数据链路的上一层, IP 通过分片屏蔽数据链路的差异,实现不同数据链路互通。从 IP 的上一层看,它完全可以忽略各个数据链路上的 MTU ,只需要按照源 IP 地址发送的长度接收数据包。
在这里插入图片描述

在这里插入图片描述
以太网就是最常用的数据链路层协议,MTU就是1500.

注意:分片对传输层时透明的,传输层并不知道分片了。只有网络层知道分片了。

所以在接收端的网络层IP协议还需要对分片数据进行组装

接收端接收到的数可能会有没有分片的数据,不同组数据,分片的数据。组装首先需要将分片的没有分片的数据分开,再将同一组数据组装。
在这里插入图片描述

分片的缺陷

  • 报文需要分多次发送,加重路由器的处理性能。
  • 分片传输中,其中一个分片丢失,在组装的时候不能将整个报文组装起来,此时ip层不会向上交付,tcp层会认为报文丢失,超时重传。

如果避免分片
实际数据分片的根本原因在于传输层一次向下交付的数据太多了,导致IP无法直接将数据向下交给MAC帧,如果传输层控制好一次交给IP的数据量不要太大,那么数据在IP层自然也就不需要进行分片。

  • 因此TCP作为传输控制协议,它需要控制一次向下交付数据不能超过某一阈值,这个阈值就叫做MSS(Maximum Segment Size,最大报文段长度)。
    通信双方在建立TCP连接时,除了需要协商自身窗口大小等概念之外,还会协商后续通信时每一个报文段所能承载的最大报文段长度MSS。
  • MAC帧的有效载荷最大为MTU,TCP的有效载荷最大为MSS,由于TCP和IP常规情况下报头的长度都是20字节,因此一般情况下 MSS = MTU - 20 - 20,而MTU的值一般是1500字节,因此MSS的值一般就是1460字节。

所以一般建议TCP将发送的数据控制在1460字节以内,此时就能够降低数据分片的可能性。之所以说是降低数据分片的可能性,是因为每个网络的链路层对应的MTU可能是不同的,如果数据在传输过程中进入到了一个MTU较小的网络,那么该数据仍然可能需要在路由器中进行分片。

报头中分片的字段

在这里插入图片描述

  • 16位标识(id):唯一标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一片里面的这个id相同。
  • 3位标志:第一位保留(现在不用),第二位如果置为1,表示禁止分片,这个时候,如果来了一个超过MTU的数据,IP模块会丢弃报文,置为0表示可以分片。第三位表示"更多分片",如果分片了,如果该分片后面还有分片,当前位置为1,如果后面没有分片或者没有分片,当前位为0。意思就是分片了置为1,没有分片或者是数据分片的结尾置为0。
  • 13位偏移量:表示当前分片在原报文的哪个位置。实际偏移字节数等于当前值乘8,因此除最后一个报文外,其它报文的长度必须是8的整数倍。

使用分片技术的同时许多问题出现了

IP如何将报头和有效载荷分离?

IP协议的报头中也有16位的报文大小,标准报头大小(没有选项)是20个字节,报文大小减去报头大小,可以得到有效载荷的大小。

IP如何将报文交付给上层协议?

IP协议的报头中有8位协议类型。

3.网络划分

ip组成

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

  • 网络号:保证相互连接的两个网段具有不同的标识。
  • 主机号:在同一网段内,主机具有相同的网络号,但是具有不同的主机号。标识相同网段里的不同主机。
    在这里插入图片描述

网络号是设备所在区域的一种标识,网络号相同的设备位于同一个网段内,网络号不同的设备通过路由器实现通信。主机号是在同一个网段中不同设备的标识,不允许同一个网段内出现重复的主机号。

在这里插入图片描述

  • 不同的子网其实就是把网络号相同的主机连接到了一起。
  • 如果在子网中新增一台主机,这台主机的网络号和这个子网的网络号一致,但是主机号必须不同和子网中的其它主机重复。
  • 由上可知,在子网中新增一台主机需要为其分配对应且正确的IP,去除一台主机的话,需要回收IP。但是手动管理子网IP很麻烦。

有一种技术DHCP,能够自动的给子网内新增主机结点分配IP地址,避免了手动管理的不便。
一般现在的路由器都带有DHCP功能,因此路由器可以看作一个DHCP服务器。

IP地址分类

在这里插入图片描述
上面是按照二进制位数1~5位是否为0划分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

A,B,C类越往下网络号表示越来越多,主机号表示越来越少。随着互联网的发展,大多数组织都申请B类网络地址,导致B类很快就用完了。

针对上面的情况,提出了一个新的方案,称为CIDR。只与子网掩码有关,通过子网掩码要区分网络号和主机号。

  • 引入一个子网掩码来区分网络号和主机号。
  • 子网掩码也是32位正整数,通常用一串0结尾。
  • 将IP地址和子网掩码进行按位与,得到的结果就是网络号。
  • 这样划分就不需要这个IP地址局限于上面的哪一个类了,与A,B,C类无关,至于子网掩码有关。

在这里插入图片描述

IP地址数量

IPv4协议的IP地址是32位的,那么只有 2的32 次方个IP地址,而TCP/IP协议规定,每一个主机都需要一个IP地址,这就意味着,一共只能由 2的32 次方台主机连入网络。

但是由于一些特殊网络的存在,并且IP地址并非是按照主机台数配置,而是每一个网卡都需要配置一个或者多个IP地址。,所以实际可以使用的IP地址远少于 2的32 次方。

CIDR虽然一定程度上提高了IP地址位数利用率,但是IP地址总数没变,仍然可能不够用。这时有三种解决方式:

  • 动态分配IP地址,只给接入网络的设备分配IP地址,比如:一台主机接入了网络分配一个IP地址,断开网络是IP地址被回收。因此同一个MAC地址设备,每次接入网络IP地址不一定相同,被其它接入网络的主机分配。
  • NAT技术
  • 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

在这里插入图片描述
我们可以在cmd上使用指令ipconfig查看机器的私网IP
在这里插入图片描述

数据传输

路由器是连接两个或多个网络的硬件设备,在路由器上有两种网络接口,分别是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的不足。

子网掩码

早期网络地址采用固定网络位长度的方式,使 IPv4 地址遭到大量浪费。如今网段地址的长度可变,同时也需要一种标识来获取网段地址,以便路由器对数据包进行转发,这种识别码就是子网掩码。

子网掩码用 32 位的二进制表示, IP 地址的网段地址部分设置为 1 , IP 地址的主机地址部分设置为 0 。换句话说, IP 地址有多少位网段地址,子网掩码就有多少位取 1 ,其余都取 0 。为了方便记录,每 8 位为一组,以“ . ”隔开,再转换为十进制数。

例如:201.20.100.25 的子网掩码是 255.255.255.0 ,算出它的网段地址。

在这里插入图片描述

将子网掩码和 IP 地址进行与( AND )运算,可得到这个 IP 地址的网段地址。

路由

① 默认路由是指路由表中任何一个地址都能与之匹配的条目。所有数据包都可以使用默认路由进行数据转发。默认路由为 0.0.0.0/0 或 default

②“ IP地址/32 ”被称为主机路由,它是路由表中指向单个 IP 地址或主机名的路由条目。例如:192.168.153.15/32 就是一条主机路由,表示整个 IP 地址的所有位都将参与路由。

③以 127 开头的 IP 地址都是环回地址,其所在的回环接口可以理解为虚拟网卡。使用回环地址时,数据包会直接被主机的 IP 层获取,而不经过链路层,也不会流向网络。一般用来检查主机上运行的网络服务是否正常。我们经常使用的127.0.0.1。

在复杂的网络结构中,找出一条通往终点的路。

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

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

在这里插入图片描述

IP数据包的传输过程中会遇到很多路由器,这些路由器会帮助数据包进行路由转发,每当数据包遇到一个路由器后,对应路由器都会查看该数据的目的IP地址,并告知该数据下一跳应该往哪跳。

路由器的查找结果可能有以下三种:

  • 路由器经过路由表查询后,得知该数据下一跳应该跳到哪一个子网。
  • 路由器经过路由表查询后,没有发现匹配的子网,此时路由器会将该数据转发给默认路由。
  • 路由器经过路由表查询后,得知该数据的目标网络就是当前所在的网络,此时路由器就会将该数据转给当前网络中对应的主机。

路由表查询的过程?

每个路由器内部会维护一个路由表,我们可以通过route命令查看云服务器上对应的路由表。
在这里插入图片描述

  • Destination代表的是目的网络地址。
  • Gateway代表的是下一跳地址。
  • Genmask代表的是子网掩码。
  • Flags中,U标志表示此条目有效(可以禁用某些条目)G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
  • Iface代表的是发送接口。

当IP数据包到达路由器时,路由器就会用该数据的目的IP地址,依次与路由表中的子网掩码 Genmask进行“按位与”操作,然后将结果与子网掩码对应的目的网络地址Destination进行比对,如果匹配则说明该数据包下一跳就应该跳去这个子网,此时就会将该数据包通过对应的发送接口Iface发出。

如果将该数据包的目的IP地址与子网掩码进行“按位与”后,没有找到匹配的目的网络地址,此时路由器就会将这个数据包发送到默认路由,也就是路由表中目标网络地址中的default。可以看到默认路由对应的Flags是UG,实际就是将该数据转给了另一台路由器,让该数据在另一台路由器继续进行路由。

数据包不断经过路由器路由后,最终就能到达目标主机所在的目标网络,此时就不再根据该数据包目的IP地址当中的网络号进行路由了,而是根据目的IP地址当中的主机号进行路由,最终根据该数据包对应的主机号就能将数据发送给目标主机了。

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

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

相关文章

Web前端自动化测试Cypress实践总结

本文主要首先主要介绍了什么是自动化测试,接着对常用的自动化测试框架进行了对比分析,最后,介绍了如果将自动化测试框架Cypress运用在项目中。 一、自动化测试概述 为了保障软件质量,并减少重复性的测试工作,自动化测…

Python 文件处理:完整指南,一文够了

Python 是一种流行的解释型动态类型编程语言,用于构建 Web 服务、桌面应用程序、自动化脚本和机器学习项目。程序员在使用基于 Python 的软件项目时,通常必须访问操作系统的文件系统。 例如,我们使用文本文件作为输入,编写文本文…

ERP集成WMS仓储管理系统提升仓储效率

随着企业业务规模的不断扩张,仓储管理逐渐凸显其重要性。传统的仓储管理方式,随着业务量的增长,可能带来种种问题,如数据不准确、效率低下、成本增高等。在这样的背景下,ERP集成WMS仓储管理系统的出现成为企业的及时雨…

Linux进程基础

文章目录 1.进程概念2.进程描述3.进程操作(一)3.1.进程查看3.2.进程获取3.3.进程终止3.4.进程创建 4.进程状态4.1.进程状态理论4.1.1.粗略理解4.1.2.深入理解 4.2.进程状态实现4.2.1.运行状态和浅度/深度睡眠4.2.2.暂停状态和停止并跟踪状态4.2.3.终止状…

基于AliO Things和阿里云的智能环境监控系统。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、实习内容二、实习方法2.1搭建开发环境并完成编译2.1.1 正常完成编译的标志2.1.2 编写实例烧录程序,并完成烧录 2.2按键实现流水灯2.2.1 HaaS ED…

chatgpt接口调用

在线接口文档: https://app.apifox.com/invite?tokensymrLP7sojF6N31kZqnpZ 接口地址 https://chat.xutongbao.top/api/light/chat/createChatCompletion 请求方式 POST 请求参数 token String, 必须 prompt Array, 必须 例子一: 包含上下文 [ { "…

系列十五、idea全局配置

一、全局Maven配置 IDEA启动页面>Customize>All settings>Build,Execution,Deployment>Build Tools>Maven 二、全局编码配置 IDEA启动页面>Customize>All settings>Editor>File Encodings 三、全局激活DevTools配置 IDEA启动页面>Customize>A…

小年轻太卷了,我服了...

想和大家说的话 8年前军哥刚进入到IT行业,现在发现学习软件测试的人越来越多,今天想根据军哥的行业经验再结合自己的一些看法给大家提一些建议。 最近聊到软件测试的行业内卷,越来越多的转行和大学生进入测试行业,导致软件测试已…

HTML基本概念:

HTML简介: 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 1)、HTML 是用来描述网页的一种语言。 2)、HTML 不是一种编程语言&am…

03、移动零:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

文章目录 1、题目描述1.1 移动所有零至数组末尾1.2 示例 2、解题思路2.1 思路讲解2.2 动画演示( 待补充)2.3 复杂度分析 3、答案3.1 Java 代码3.2 运行结果 4、视频讲解( 待补充) 1、题目描述 1.1 移动所有零至数组末尾 给定一个…

通过内网穿透分享本地电脑上有趣的照片:部署piwigo网页

通过cpolar分享本地电脑上有趣的照片:部署piwigo网页 文章目录 通过cpolar分享本地电脑上有趣的照片:部署piwigo网页前言1.Piwigo2. 使用phpstudy网页运行3. 创建网站4. 开始安装Piwogo5. 设定一条内网穿透数据隧道6. 与piwigo网站绑定7. 在创建隧道界面…

每日一练 | 网络工程师软考真题Day47

阅读以下关于Linux文件系统和Samba效劳的说明,答复以下【问题1】至【问题3】。 【说明】 Linux系统采用了树型多级目录来管理文件,树型结构的最上层是根目录,其他的所有目录都是从根目录生成的。通过Samba可以实现基于Linux操作系统的效劳器和…

锐捷RG-EW1200G登录绕过漏洞复现

文章目录 锐捷RG-EW1200G登录绕过漏洞复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.复现 0x06 修复建议 锐捷RG-EW1200G登录绕过漏洞复现 0x01 前言 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、…

sql-50练习题11-15

sql-50练习题11-15 前言数据库表结构介绍学生表课程表成绩表教师表 1-1 查询没有学全所有课程的同学的信息1-2 查询至少有一门课与学号为01的同学所学相同的同学的信息1-3 查询和1号的同学学习的课程完全相同的其他同学的信息1-4 查询没学过张三老师讲授的任一门课程的学生姓名…

Windows电脑怎样修改电脑的名称?

Windows电脑在使用过程中会处于局域网络中,为了让局域网络中其他Windows电脑看到自己的电脑并知识是自己的电脑,可以将电脑名称设置为自己的名字,那怎样设置电脑名称呢? Windows电脑怎样修改电脑的名称? 1、打开Wind…

主从复制(gtid方式)

基于事务的Replication,就是利用GTID来实现的复制 GTID(全局事务标示符)最初由google实现,在MySQL 5.6中引入.GTID在事务提交时生成,由UUID和事务ID组成.uuid会在第一次启动MySQL时生成,保存在数据目录下的…

stm32 模拟spi

目录 简介 spi物理层 连接方式 框图 协议层: 数据处理 传输模式 模式0 起始和停止信号 发送和接收数据 模式1 模式2 模式3 总结 简介 spi物理层 SPI( Serial Peripheral Interface, 串行外设接口)是一种全双工同步…

(2)STM32单片机上位机

使用VX小程序开发上位机, 样式如何创建? 在你所在页面 开辟空间 使用 view 在view 中 输入class 就是样式,在编辑样式的时候,如何寻找哪一块的样式 就是通过这个class寻找的 按钮使用switch

十九、类型信息(6)

接口和类型 interface 关键字的一个重要目标就是允许程序员隔离组件,进而降低耦合度。使用接口可以实现这一目标,但是通过类型信息,这种耦合性还是会传播出去——接口并不是对解耦的一种无懈可击的保障。比如我们先写一个接口: …

Java生成二维码并打印二维码和文字信息

目录 1、生成二维码,并调用画布进行二维码和文字的描绘。 2、主程序:获取打印机,并打印内容 3、打印效果 参考文献: 前期工作是安装好打印机驱动,可连接打印机。 添加三个依赖jar: 具体见文底的参考文献…