Lesson13 IP协议

news2024/11/25 23:01:26

  •  IP:   提供一种能力,将数据从A主机送到B主机的能力,但不一定会成功
  • 主机 : 配有 IP 地址 , 但是不进行路由控制的设备 ;
  • 路由器: 即配有 IP 地址 , 又能进行路由控制 ;
  • 节点 : 主机和路由器的统称;

协议头格式 

如何封装和解包: 定长报头 +  自描述字段

如何交付(分用) : 8位协议(udp或tcp)

第一层 

  •  4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
  • 4位头部长度(header length):
    • 4为首部长度虽然是4个bit位,但是单位是字节
    • 0000->1111 => 0 -> 15,即范围是0 -> 60字节
    • 报头的范围: [20,60]
      • x * 4 = 20 推出 x = 5->0101
      • x * 4 = 60 推出 x = 15->1111
  • 8位服务类型(Type Of Service):
    • 3位优先权字段(已经弃用),
    • 4位TOS字段(a.最小延时, b.最大吞吐量, c.最高可靠性, d.最小成本)
    • 1位保留字段(必须置为0)
  •  16位总长度(total length): IP数据报整体占多少个字节

第三层

  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
  • 8位协议: 表示上层协议的类型 (udp或者tcp)
  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
  • 32位源地址和32位目标地址: 表示发送端和接收端.

第二层

 分片问题

  • 网络层的下层链路层由于物理特征的原因,一般无法发生太大的数据
  • 这时发送端的网络层就会把数据进行分片然后发送,而接收端的网络层就会进行组装

将一个比较大的ip报文,拆分成为多个小的满足条件的报文,

分片的行为是网络做的,同样组装的行为也必须由对方的网络层来做 

  •  网络向上交付也必须是一个完整的报文,
  • IP分片和组装的行为,TCP是不知道的,不关心的

如何实现分片 

  • 16位标识: IP报文序号
  • 3位标志
    • 第一位 保留 (保留的意思是现在不用, 但是还没想好说不定以后要用到).
    • 第二位置为 1表示禁止分片 , 这时候如果报文长度超过MTU, IP模块就会丢弃报文.
    • 第三位表示 "更多分片" , 如果分片了的话,最后一个分片置为1, 其他是0(结束标记)
  • 13位片偏移: 是分片相对于原始IP报文开始处偏移(确认位置)

 区分分片并确认收全->提供组装方案

 

  1. 分片行为不是主流
    1. 在网络层分片和组装中,丢包是有概率的,分片会增加丢包的概率
  2. 识别报文与报文的不同
    1. 不同报文的16位标识不同,这就能区分报文和报文之间的不同,
  3. 识别报文是否被分片
    1. 如果更多分片标志位是1,就表明它被分片了
    2. 如果我就是最后一个分片,但这个更多分片标志位就是0,无法区分是否被分片了
      但是最后一个分片的13位片偏移,一定不为0,能区分是否被分片了
      if(报文->更多分片 & 0x1) return 分片的
      else if(报文->片偏移 > 0) return 分片的
      else return 独立的报文
  4. 识别那些分片是开始,中间,结尾
    1. 开始: 更多分片1,片偏移0
    2. 中间: 更多分片1,片偏移不是0
    3. 结尾: 更多分片0,片偏移不是0
  5. 识别任何一个分片丢失
    1. 通过16位标识,确定这个报文的所有分片,并将其放在一起
    2. 然后按照片偏移进行升序排列

      偏移量 + 自身大小 = 下一个报文的偏移量
    3. 扫描整个报文如果不匹配,中间就一定会有丢失的,
      如果成功计算到结尾,就一定收取完整了(组装时也是这样做的)

  •  分片之前,一定是一个独立的ip报文
  • 分片之后,每一个分片都要有ip报文,
  • 为了支持未来的组装,每一个分片都必须有ip报文

 网段划分(重要)

ip = 网络号+主机号

  • 网络号: 保证相互连接的两个网段具有不同的标识;
  • 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号;
通过 合理设置 主机号和网络号 , 就可以保证在相互连接的网络中 , 每台主机的 IP 地址都不相同 .
那么问题来了 , 手动管理子网内的 IP, 是一个相当麻烦的事情 .
  •  有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便.
  • 一般的路由器都带有DHCP功能. 因此路由器也可以看做一个DHCP服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP]) 

  • 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
随着 Internet 的飞速发展 , 这种划分方案的局限性很快显现出来 ,
大多数组织都申请 B 类网络地址 , 导致 B 类地址很快就分配完了, A 类却浪费了大量地址
  •  例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
  • 然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

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

  • 引入一个额外的 子网掩码 (subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
  • 将IP地址和子网掩码进行 " 按位与 " 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;

  •  可以给不同的路由器配置不同位数的子网掩码,就能看到不同的网络号
  • 目的IP & 当前路由器的子网掩码 = 该报文要去的目的网络
  • 又因为不同的路由器一定至少要级联2个网络,每一个网络的网络号可能是不同的
    每一个路由器都要给自己直接链接的网络配置对应的子网掩码

特殊的IP地址

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

IP地址的数量限制

  • 我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 232次方个IP地址, 大概是43亿左右.
  • TCP/IP 协议规定, 每个主机都需要有一个IP地址. 且还有一些特殊的IP地址的存在, 数量远不足43亿;
  • 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡 都需要配置一个或多个IP地址.
  • CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用.

这时候有三种方式来解决

  • 动态分配IP地址 : 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
  • NAT技术 (后面会重点介绍);
  • IPv6 : IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表 示一个IP地址; 但是目前IPv6还没有普及;

私有IP地址和公网IP地址

  •  路由器天然的会构建区域网(子网),内网IP,
  • 家用路由器:
    • 对内: 面对自己构建的子网
    • 对外:自己本身也是别人构建子网的一个主机
  • 所有路由器一定要有两套地址:
    • 对内: Lan口IP,局域网ip(私有ip)
    • 对外:WAN口IP,自己所在上级子网给自己分配的ip(公有ip)
  • 私有网络对应的IP是局部的,可以在不同的子网中重复出现->IP不足问题就大大缓解了

 缓解IP不足->NAT技术

路由器要做的一个事情:

  • 将报文中的源IP替换成为路由器的WAN口IP
  • 每经过一个运行商的内网路由器,都要做这个工作(公网路由器不做) 
  •  目的IP地址是不变的,源IP地址在不同的内网,通过不同层级的网络节点中转发(替换),
    这种技术就叫做: NAT技术

路由 

  •  IP报文,被千里送到主机C的入口路由器,接下来需要进行交付给目标主机: 封装MAC报头,所以就必须知道主机C的MAC地址
  •  IP提供的是转发的策略,想要解决设备转发的具体功能,需要交给数据链路层解决

数据链路层

1.以太网帧格式->数据帧格式 

  • 源地址和目的地址是指 网卡 硬件地址 (也叫 MAC地址 ), 长度是48位,是在网卡出厂时固化的;
  • 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
  • 帧末尾是 CRC校验码 ->标识主机 唯一性 的方案
认识 MAC 地址
  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
    在网卡出厂时就确定了, 不能修改.
  • mac地址通常是 唯一 的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址)

对比理解MAC地址和IP地址

  • IP地址描述的是 路途总体 的 起点 和 终点;
  • MAC地址描述的是路途上的 每一个区间 的起点和终点;

2.重谈局域网通信原理 

  •  局域网中的主机是越少越好,且发送数据帧的时候,数据帧越短越好
    这样就能有效的减少数据之间的碰撞
  • 碰撞避免算法->发送的主机会休息随机时间,然后,在重新发送
  • 局域网攻击原理.....

认识MTU

MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,
    ARP数据包的长度不够46字节,要在后面补填充位; 
  • 最大值1500称以太网的最大传输单元(MTU), 不同的网络类型 不同的MTU ;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
  • 不同的数据链路层 标准的 MTU是不同的 ;

 3.汇总到整体的通信流程汇总,发现问题--添补细节

  •  在网络转发的`过程中,目的IP不变的,mac帧报头要变

MSSMTU的关系

  • TCP的单个数据报的 最大消息长度 , 称为MSS(Max Segment Size);
  •  MTU的最大字节为1500 = IP
  • IP有效载荷 = 1500 - IP报头(20) = TCP + 数据 = 1480
  • 数据 = 1480 - TCP报头的长度(20) = 1460,即MSS不能大于1460

查看硬件地址和MTU 

ARP协议(地址解析协议)

  •  如果只知道目标主机的IP地址,而不知道对方的MAC地址,就无法封装MAC帧
  • 在一个网段中,通过目标IP,得知对方MAC地址的方式叫做->ARP协议(地址解析协议)

ARP数据报的格式 

  •  硬件类型指链路层网络类型,1为以太网;
  • 协议类型指要转换的地址类型,0x0800为IP地址;
  • 硬件地址长度对于以太网地址6字节;
  • 协议地址长度对于和IP地址4字节;
  • op字段为1表示ARP请求,op字段为2表示ARP应答

模拟一次ARP过程

前提是知道对方的IP地址 

  •  HA会给在这局域网中所有的主机都发送ARP请求(全广播)
  • 每一主机拿到这个请求,都会先看自己的IP地址是否匹配目的IP地址,都会处理,并向上交付
  • 不匹配就直接丢弃,匹配就发送ARP应答给对应主机

  •  HD这台主机会给HA主机发送ARP应答,在APR应答中就包括了HD自己的MAC地址
  •  当然在这个局域网中其他的主机都会收到这个应答,但是不会处理,会直接丢弃

 问题一: 如何理解上诉过程发生的两次丢弃

  • 一次是在arp层丢弃的,一次是在底层mac层丢弃的

问题二: ,是不是每一次发送数据都要发送一个arp请求和一个arp应答

  • 不是,arp请求成功之后,请求方会暂时将IP :  MAC地址的映射暂时保存下来

问题三: 除了在目标最终的子网中进行arp,其他地方会不会也发生arp呢 

  • ,arp过程会在网络中可能的所有路径中出现

小结

  • 任何主机可能之前向目标主机发起过ARP请求,同时,未来一定会受到对应的ARP应答

  • 任何一台主机,也有可能被别人发起ARP请求

  • 在局域网中:任何一台主机受到ARP的时候,可能是一个应答,也可能是一个请求 

 arp伪装

DNS(Domain Name System)

  • TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.
  • 于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名IP地址的关系.

最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的 

  • 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件.
  • 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网.

这样就太麻烦了, 于是产生了DNS系统

  • 一个组织的系统管理机构, 维护系统内的每个主机的IP主机名的对应关系.
  • 如果新计算机接入网络, 将这个信息注册到数据库中;
  • 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址.
遗留问题: 浏览器中输入url后,发生的事情

NAT的转换表

 

  • 其实在进行源地址替换的过程中,可能不一定只替换原IP,必要的时候,源端口也要被替换
  • 路由器在NAT转换的过程中,除了单纯的替换,还会为我们根据报文请求的四源组
    为我们构建一个映射关系
  • 源IP表示唯一的一台主机,源端口表示该主机上唯一的一个进程
    源IP+源端口表示唯一的一个进程 -- 自己在自己的内网中的唯一性
  • 无论从内向外,还是从外向内,都能在各自的网络中表示唯一性,
    所以这个映射关系是:互为KEY值的!!
  •  如果我们从来没有访问过外网,外网能够直接访问内网吗? 理论上不能
    但是有很多基于NAT原理的软件,能够帮助我们进行从外网访问内网 -- 内网穿透

正向代理服务器

 

  •  正向代理是双向的,即请求和应答都会通过这个代理服务器

 反向代理服务器

  •  反向代理是单向的,且一般用于公司大型机房中,主要为了提高服务器的利用率,
  • 将大量的请求通过代理服务器平均分配给所有主机,以提高效率

 访问外网 - fq

 

 

  • 在国内有的服务器是可以直接访问外网的,这种代理叫做正向代理
  • 把要访问的IP(真实IP)用另一个IP(代理服务器IP)嵌套一层,并加密处理
  • 从国内发送给运营商,运营商拿到这个报文,一看IP是国内的IP(代理服务器IP)就通过了
    (运营商没有密钥无法解密,就无法看到我们真实想访问的IP)
  • 代理服务器拿到这个报文,进行解密然后根据IP发送给国外的服务器

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

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

相关文章

Linux驱动之input输入子系统

输入子系统用于实现Linux系统输入设备(鼠标 键盘 触摸屏 游戏杆)驱动的一种框架。Linux内核将其中的固定部分放入内核,驱动开发时只需要实现其中的不固定部分(主要还是和硬件相关的部分),这和platform设备…

离散数学下--- 代数系统

代数系统 定义: 代数系统是用代数运算构造数学模型的方法。 • 通过构造手段生成,所以也称代数结构 • 代数运算:在集合上建立满足一定规则的运算系统 (一)二元运算 二元运算的定义 二元运算需要满足的两个条件&a…

【P1】Jmeter 准备工作

文章目录 一、Jmeter 介绍1.1、Jmeter 有什么样功能1.2、Jmeter 与 LoadRunner 比较1.3、常用性能测试工具1.4、性能测试工具如何选型1.5、学习 Jmeter 对 Java 编程的要求 二、Jmeter 软件安装2.1、官网介绍2.2、JDK 安装及环境配置2.3、Jmeter 三种模式2.4、主要配置介绍2.4.…

数据结构——二叉树层序遍历

数据结构——二叉树层序遍历 107. 二叉树的层序遍历 II199. 二叉树的右视图思路: 637. 二叉树的层平均值 107. 二叉树的层序遍历 II 107. 二叉树的层序遍历 II 给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节…

心血管疾病预测--逻辑回归实现二分类

一、实现效果 实现心血管疾病的预测准确率70%以上 二、数据集介绍 数据共计70000条,其中心血管疾病患者人数为34979,未患病人数为35021。数据特征属性12个分别为如下所示:生理指标(性别、年龄、体重、身高等)、 医疗检测指标(血压、血糖、胆固醇水平等)…

【社区图书馆】PyTorch高级机器学习实战 读书感想

《PyTorch高级机器学习实战》十大特点 1. 深入全面的内容覆盖: 本书的内容深入而全面,涵盖了深度学习中的多个领域,包括自然语言处理、计算机视觉、强化学习等,并介绍了各种不同的神经网络结构和优化算法。 2. 理论和实践并重&am…

scratch拆礼物游戏 中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析2023年3月

目录 scratch拆礼物游戏 一、题目要求 1、准备工作 2、功能实现 二、案例分析 <

java spring 实现 下载hls(m3u8+ts)实时流并进行合并mp4和压缩

参考连接 链接: java下载m3u8视频&#xff0c;解密并合并ts&#xff08;三&#xff09; 链接: Java 下载 HLS (m3u8) 视频 首先需要了解什么是HLS 链接: HTTP Live Streaming (HLS) - 概念 链接: M3U8是什么 简单理解就是, m3u8文件存放着可供客户端播放TS 片段 简单一点…

吴恩达 Chatgpt prompt 工程--1.Guidelines

Setup #安装 !pip install openai#设置key !export OPENAI_API_KEYsk-... # or #import openai #openai.api_key "sk-..."import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())openai.api_key os.getenv(OPENAI_A…

Graph Theory(图论)

一、图的定义 图是通过一组边相互连接的顶点的集合。 In this graph, V { A , B , C , D , E } E { AB , AC , BD , CD , DE } 二、图的类型 2.1 Finite Graph A graph consisting of finite number of vertices and edges is called as a finite graph. Null Graph Tri…

github workflow使用docker部署springboot并推送到阿里云镜像仓库

文章目录 1. 建立你的actions2. 工作流脚本2.1 触发事件2.2 密文和执行参数2.3 deploy.sh执行脚本2.4 Dockerfile 3. 阿里云镜像仓库设置 最近想通过github的workflow部署springboot项目&#xff08;CI&#xff09;&#xff0c;网上看了很多文章&#xff0c;都是有这样那样的问…

Design_transformer

磁性元件设计 思路 滤波电感设计 磁芯不要饱和&#xff08;开气隙&#xff09; 考虑铜损大于铁损 谐振电感设计 磁芯不要饱和&#xff08;开气隙&#xff09; 考虑铁损大于铜损 变压器设计 磁芯不要饱和&#xff08;开气隙&#xff09; 励磁电流产生磁场 开气隙 增加了…

1.rabbitMQ介绍

0.思考 我们以前为什么要学习java直接的框架代码,而不是用springboot整合的框架,在学习完MQ后,我的答案是,可以直接写成更灵活的MQ代码(其他框架也是,SSM我们为什么要学,在于灵活度更高,以后可能会遇到SSM的代码我就可以看得懂),springboot整合虽然完成了大多数功能,但是我要其…

SpringBoot+MyBatis搭建迷你微信小程序

课程链接&#xff1a;https://www.imooc.com/learn/945 标签组件 view view类似于HTML中的div标签是最基础的UI组件 https://blog.csdn.net/wushibo750/article/details/113802928 https://developers.weixin.qq.com/miniprogram/dev/component/view.html block flex ht…

突破1300件!腾讯数据安全专利授权量最新成绩出炉

今天是世界知识产权日&#xff0c;跟大家汇报一下我们在数据安全专利工作上的进展。 截至2023年4月&#xff0c;腾讯共获得数据安全相关专利授权量超过1300件、申请公开量超过1800件&#xff0c;涵盖数据加解密、数据库访问、数据分级分类、数据备份、数据防泄漏、机密计算等多…

音视频八股文(9)-- flv的h264六层结构和aac六层结构

flv介绍 FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式&#xff0c;由于其封装后的⾳视频⽂件体积⼩、封装简单等特点&#xff0c;⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV格式封装的⽂件后缀为.flv。 FLV封装格式是由⼀个⽂件头(file header)…

概述篇——01 计算机网络概述

一、什么是计算机网络 计算机网络主要由一些通用的、可编程的硬件互连而成&#xff0c;通过这些硬件&#xff0c;可以传送不同类型的数据&#xff0c;并且可以支持广泛和日益增长的应用&#xff1b; 计算机网络不只是软件概念&#xff0c;还包含硬件设备&#xff1b;计算机网…

【Mysql】基础篇:DML(data manipulation language)语句:增、删、改数据库数据总结

博主简介&#xff1a;努力学习的大一在校计算机专业学生&#xff0c;热爱学习和创作。目前在学习和分享&#xff1a;数据结构、Go&#xff0c;Java等相关知识。博主主页&#xff1a; 是瑶瑶子啦所属专栏: Mysql从入门到精通近期目标&#xff1a;写好专栏的每一篇文章 目录 一、…

微搭低代码实现下拉框动态填充值

有个粉丝问我&#xff0c;微搭的下拉框如何自动填充值 想问一下&#xff0c;下拉控件需要绑定数据源里面的列表&#xff0c;这个需要怎么做&#xff0c;自己研究了蛮久也没弄出来&#xff0c;需要参考您哪一篇教程&#xff1f; 一般你字段设置为枚举类型就可以&#xff0c;如果…

数据结构入门(二)——单链表(增,删,查,改)

1.单链表的概念 概念&#xff1a;链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;但链表在逻辑上是连续的&#xff0c;顺序的&#xff0c;而数据元素的逻辑顺序是通过链表中的指针连接次序实现的。 1.2链表的结构 我们给int重新定义一下新类型叫做SLDataType…