【javaEE】网络原理(网络层)

news2025/8/11 14:12:55

努力经营当下,直至未来明朗

文章目录

  • 前言
  • 一、网络层简述
  • 【IP协议】
  • THINK


前言

一个人最大的痛苦来源于对自己无能的愤怒

Hi,这里是不想秃头的宝贝儿!
秃头
本文主要介绍【网络层】,其中最关键的就是【IP协议】。(同样,重点内容重点标出)

【回顾】
TCP特性:
确认应答、超时重传、连接管理——保证【可靠性】
滑动窗口——保证【效率】
流量控制、拥塞控制——保证【可靠性】,是对滑动窗口的制约/加持
延时应答、捎带应答——保证【效率】
面向字节流的粘包问题——注意事项
异常情况——可靠性的延伸
面试题】:TCP如何实现可靠传输?


一、网络层简述

  1. 网络层的工作就是在两点之间规划出一个合理的路径,同时也需要对主机的位置进行定义。
  2. 所以,网络层的工作其实是:地址管理 + 路由选择
  3. 网络层最主要的协议就是IP协议。

【IP协议】

(针对IP协议只了解一些简单的原理就行)

  1. IP协议报头:(指IPv4)
    IP协议

① 4位版本:目前取值只有两个:4/6,也就是IPv4和IPv6.(以下出现的IP协议如不做特殊说明则都是指IPv4)
② 4位首部长度:和TCP类似,首部是变长的,报头中也带有选项。
③ 8位服务类型(TOS):说是8位,但是其实只有4位是有效的。这4位表达了当前IP协议不同的“工作模式”,并且这四位中只能有一位是1,不能同时出现多个1。

4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四位互相冲突,只能一位有效。
(这里的几种状态,在实际开发中很少使用)

④ 16位总长度(字节数):描述了IP数据包的报文长度是多少。 (IP总长度-IP报头长度=TCP报文长度)

16位的最大长度是64kb,那么一个数据报最大只能是64kb吗?
其实并非如此,可以通过IP协议传输很长的TCP数据报:因为IP协议自带了分包分组的机制

⑤ 16位标识:同组的包就会有相同的标识。
⑥ 3位标志:主要是两位在起作用,1位用来表示当前分没分包,1位用来表示当前这个包是不是最后一个

第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。
第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。
第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。

⑦ 13位片偏移:用来区分包的前后顺序。(前面的包 片偏移比较小,后面的包 片偏移比较大)
⑧ 8位生存时间(TTL):网络上可能会有很多的数据报在传输,有的数据报可以顺利发到对面,而有的数据报却是永远也发不过去的(如:收件人地址写错了)

TTL的单位是“次数”,是一个整数。一般是一个类似于32/64/128这样子的整数。
② 数据报传输时,每经过一个路由器转发,TTL就-1。如果TTL减小到0了,此时就把包丢弃(不再继续转发)。因为预期正常情况下,数据报是可以在很短的次数内就传输到世界上的任何一个主机上的。(可以通过ping来查看TTL,此时TTL就是剩余的路由器转发次数)

为啥转发这几次就能够达到?
基于一个社会科学上的假设:六度空间理论【朋友关系网】

⑨ 8位协议:表示上层协议的类型
即:IP载荷中数据报使用的传输层协议,接收方收到IP数据报后进行分用,分用到网络层的时候,接下来要向上把数据交给传输层,把数据给传输层的哪个协议来解析是通过8位协议来区分的。

⑩ 32位源IP和32位目的IP地址【最关键】:其实就是发件人地址和收件人地址。

① IP地址本质上是32位的整数,也就是4个字节,类似于一个int。
② 通常会把32位整数转为“点分十进制”的表示方式。每个部分就是一个字节,每个部分的取值范围就是0~255.
③ 【IP地址用来区分网络上唯一的一台主机。】

一个IP地址是4个字节,也就是32个比特位,所能表示的最大范围不到43亿个不同的主机,而目前能够上网的设备早已经超过了这个数值,此时IP地址就不太够用了。

2.( IP地址不够用) 解决方案:
1)动态分配 IP地址:设备上网时才分配IP地址,不上网的时候就把IP回收给别人用。这种方案并没有增加IP地址的数量,只是提高了利用率而已,治标不治本。
2)NAT机制【主流机制】
不再强制要求每个主机都有独立的IP,把IP地址分为两大类:
① 外网IP/公网IP
② 内网IP/私网IP/局域网IP:约定10.* , 172.16-172.31.* , 192.168.* 都是内网IP

  • 约定:在同一个局域网内部,IP不能重复; 但是在不同的局域网内部,IP之间是允许重复的。

  • 如果在局域网内部想要访问某个外网的服务器,就会使用一个外网IP来代替一大波局域网中的设备,这样就大大节省了外网IP的个数了

注:路由器一般有LAN口和WAN口,功能是把两个局域网连接起来
(路由器本身也是一个NAT设备,NAT是网络地址转换)
每次经过一个NAT设备进行转发的时候,就会把源IP替换(目的IP不变)。 路由器会记录下替换关系,等原路返回时同样替换IP就行。

当前网络环境的现状:NAT+动态地址分配,可以通过NAT访问外网,但是局域网之间无法访问设备(因为NAT中我的IP只能在该局域网内使用)
(如果你想在内网中访问另一个内网中的设备:内网穿透 or VLAN)

3)IPV6:彻底解决IP地址不够用问题的方案。
IPV4:4个字节,32位来表示IP地址,能够表示的不同主机42亿多
IPV6:16个字节,128位来表示IP地址,所能够表示的主机数量并不仅是IPV4 的4倍,其能够表示的主机数量是42亿42亿42亿*42亿

IPV6已经提出很多年了,但是当前网络的现状仍然是NAT+动态分配,为啥IPV6没有大规模普及呢?
因为IPV6和IPV4不兼容。如果想要从IPV4路由器升级到IPV6路由器就要花钱!

  • 但是在国内普及还是相当好的,目前70%的家用宽带已经能够支持IPV6了,只是默认处于未开启状态而已;当前看到的各种常见的应用程序也都支持IPV6了,但是由于家里的网络没有开启IPV6,所以仍然是按照IPV4的方式来访问的
  • IPV4 IP地址的分配权在美国人手里,而IPV6地址太多了没有被垄断
  1. 关于IP地址具体的规则:(IPV4)
    IP地址分为两个部分:网络号和主机号
    ① 网络号:标识网段,保证相互连接的两个网段(网段:网络号,局域网的身份标识)具有不同的标识;(网段具有不同标识便是不同局域网,用网络号来表示局域网)
    ② 主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;(表示不同主机)

【同一个局域网中,主机之间的网络号是相同的,但是主机号必须不同。】
在相邻的局域网中(同一个路由器(WAN口和LAN口有不同的网络号)连接的局域网),要求网络号是不同的

  1. 如何划分网络号和端口号?
    子网掩码可以划分从哪里到哪里是一个网络号。
    子网掩码有32位,左半边都是1,右半边都是0(不会0/1混合)
    子网掩码左半边有多少个1就表示IP地址左侧有多少位的网络号。

(把子网掩码与IP地址按位与运算得到的结果就是网络号)
(路由器就是把WAN口对应的局域网和LAN口对应的局域网给连起来了)

  1. IP地址分配(教科书版本)
    但是该种分配方式比较浪费,逐渐消失在历史长河中。
    IP地址

  2. 特殊的IP地址:
    ① 如果一个IP地址主机号为0,此时这个IP地址就表示网络号。如:192.168.0.0就代表当前的局域网
    ② 如果一个IP地址的主机号为1,此时这个IP往往就表示整个局域网的“网关”。如:192.168.0.1代表的就是局域网的网关(通常就是路由器的IP)【但是网关不是强制要求主机号为1的,可以手动改】

网关:就类似于出入口,网关的角色一般就是路由器,把守着当前局域网和其他局域网之间的出入口

③ 如果一个IP地址的主机号全为1,此时这个IP表示广播IP。(一般UDP可以,TCP不行)
④ 127.*都是环回IP,最典型的就是127.0.0.1.但是实际上只要是127开头的都是环回IP。

  1. 路由选择:就像地图导航一样,能够在两点之间规划出一个路线;这是一个**“启发式”**的过程,非常类似于“问路”。
  2. IP数据报中包含了目的IP。网络数据报到达路由器的时候,路由器本身有一个“路由表”数据结构(路由表就是这个路由器认识的路)。一个路由器无法认识到网络的全貌,但是可以认识附近的一部分。

① 如果当前的目的IP路由器认识,就会给出一个明确的路线
②如果当前的目的IP路由器不认识,路由器就会把数据报转发给一个更加“见多识广”的路由器(在路由表里有一个默认选项,即:下一跳)

是否会出现问了一圈之后也没找到目的地?
也是有可能的,比如IP地址不存在(或者IP地址不可达),此时就需要通过TTL

  1. 路由过程不光是找一条路,也是要筛选一条更好的路。
  2. 路由选择最关键的是路由表数据结构以及路由表数据的来源(路由表生成过程比较复杂,不进行详解,可以自己去了解【面试以及工作中都用不到】

THINK

  1. IP协议报头的理解
  2. IP协议不够用解决方法:动态分配+NAT(IPV6)
  3. IP地址:网络号+主机号
  4. 如何划分网络号、主机号(子网掩码)
  5. IP地址五类分配+特殊IP(了解)
  6. 内网IP(了解)

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

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

相关文章

【天池竞赛】心跳数据挖掘

天池学习赛 心跳数据挖掘 168分攻略 Chapter 1. 赛题解析 就如比赛界面所介绍的一般,这里再复述一遍 本次新人赛是Datawhale与天池联合发起的0基础入门系列赛事 —— 心跳信号分类预测。赛题以心电图心跳信号数据为背景,要求选手根据心电图感应数据预测…

【序列召回推荐】(task4)多兴趣召回实践:MIND(更新中)

note 阿里的序列召回MIND模型:引入了胶囊网络,将胶囊网络的动态路由算法引入到了用户的多兴趣建模上,通过B2I动态路由很好的从用户的原始行为序列中提取出用户的多种兴趣表征。在离线训练阶段,通过提出Label-Aware Attention详细…

Lifecycle 生命周期组件的那些事

引言 在2022的今天,AndroidX 普遍的情况下,JetPack Lifecycle 也早已经成为了开发中的基础设施,小到 View(扩展库) ,大到 Activity,都隐藏着它的身影,而了解 Lifecycle 也正是理解 JetPack 组件系列库生命感知设计的基…

D-013 蜂鸣器硬件电路设计

蜂鸣器硬件电路设计1 简介2 蜂鸣器电路设计1 简介 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中做发声器件。 蜂鸣器的分类:压电…

【ASM】字节码操作 工具类与常用类 AnalyzerAdapter初步介绍

文章目录 1.概述1.1 第一句话1.2 第二句话2. AnalyzerAdapter2.1 class info2.2 fields2.3 constructors2.4 methods2.4.1 execute方法2.4.2 return和throw2.4.3 jump2.4.4 visitFrame方法2.4.5 new和invokespecial1.概述 在上一篇文章:

创建KVM虚拟机公共镜像

手动配置kvm教程: https://blog.csdn.net/nvd11/article/details/127435990 但是毕竟每次创建新的虚拟机时,还要装一次系统比较麻烦。 打算做个公共的ubuntu镜像出来。 目标: NoDESCcpu数内存第一步创建虚拟机vm128g第二步创建虚拟机镜像文…

第五章《类的继承》第1节:继承的概念与实现方式

继承是面向对象最显著的一个特性,它是以已存在的类为基础定义新类的技术,新的类可以继承已有类的属性和方法,也可以增加新的类成员。 5.1.1什么是继承 在现实生活中,一类事物往往都可以划分成更小的类别。例如:“人”就是一类事物,按照人的身份和职业,可以把人划分成学…

SSTV慢速扫描的几种模式优劣对比

下面使用的图片是我自己拍摄的照片,无版权问题 原图: 扫描环境: 家中客厅,窗户打开,窗外有鸟叫和人声.模拟了介于野外和户外之间的环境 ,两部设备相隔1厘米,音量35%,所有测试下来设备未移动. Martin1 模式 : 扫描时长: 1分55秒 扫描后图片 Martin2 模式 : 扫描时长: 58秒…

Pywinauto的安装及使用

目录 1.pywinauto简单介绍 2.pywinauto的安装 3. 通过启动windows自带记事本,检查是否可正常使用 1.pywinauto简单介绍 pywinauto是一组用于自动化测试脚本的python模块,用于自动化Microsoft Windows GUI。它允许将鼠标和键盘操作发送到windows对话框…

基于JSP的企业固定资产管理系统【数据库设计、源码、开题报告】

数据库脚本下载地址: https://download.csdn.net/download/itrjxxs_com/86466989 主要使用技术 SpringStruts2HibernateJSPCSSJSMysql 功能介绍 固定资产管理系统是对高校固定资产的一个信息化管理系统,基本功能包括: 对固定资产的购进、…

基于遥感和GIS技术的生态承载力评价的解决方案

生态承载力的概念最早来自于生态学。1921年,Park和Burgess在生态学领域中首次应用了生态承载力的概念,即在某一特定环境条件下(主要指生存空间、营养物质、阳光等生态因子的组合),某种个体存在数量的最高极限。生态承载…

2023-2028年中国化肥行业市场需求预测与投资趋势分析报告

本报告由锐观咨询重磅推出,对中国化肥行业的发展现状、竞争格局及市场供需形势进行了具体分析,并从行业的政策环境、经济环境、社会环境及技术环境等方面分析行业面临的机遇及挑战。还重点分析了重点企业的经营现状及发展格局,并对未来几年行…

m分集2跳OFDM系统中基于功率分配和子载波配对算法的信道容量matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 随着当代无线通信事业的迅猛发展,无线频谱资源已显得越来越匮乏,传统固定静态的无线频谱分配模式和策略,很难为未来的无线通信事业的进一步发展提供更多可利用的无线频谱带宽和更高的频谱…

源码分析 Laravel 重复执行同一个队列任务的原因

发现问题 在 Laravel 中使用 Redis 处理队列任务,框架提供的功能非常强大,但是最近遇到一个问题,就是发现一个任务被多次执行,这是为什么呢? 先说原因: 因为在 Laravel 中如果一个队列(任务&a…

Java项目:JSP民宿预订网站信息管理平台

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目为前后台,包括管理员与普通用户两种角色; 管理员角色包含以下功能: 管理员登录,用户管理,会员管理,…

高斯消元总结

A-Matrix Equation_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(济南)(重现赛) 自己写一个2维矩阵或者3维矩阵就可以发现对于每一列来说都是独立的,每一列的n个Cij都是都关系的&#xff0c…

Sentinel熔断降级

Sentinel熔断降级 1、介绍 官网地址:https://github.com/alibaba/Sentinel/wiki/熔断降级 Sentinel 提供以下几种熔断策略: 慢调用比例 (SLOW_REQUEST_RATIO):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最…

cesium for ue5中actor的cesium georeference组件的改变

今天,重新回顾下cesium for ue的教程,actor添加cesium georeference组件 发现在ue5中,没有这个组件了, 忍住卸载ue5,重新安装ue4.27的冲动,cesium的组件数量增多了,反而功能减少了&#xff…

hive的安装配置及使用

hive需要MySQL和hadoop的支持 文章目录hive需要MySQL和hadoop的支持安装完毕MySQL之后下载并解压hive添加系统环境变量配置hive修改 vim hive-env.sh修改hive-site.xml(1、简化配置(推荐))修改hive-site.xml(2、在简化的基础上添加了部分配置)下载一个my…

Java项目:JSP药店药品商城管理系统

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台,分为管理员与普通用户两种角色,管理员登录后台,普通用户登录前台; 管理员角色…