【Java网络原理】 六

本文主要介绍了网络层的IP协议/NAT机制/IPv6的由来以及在数据链路层涉及到的以太网协议和DNS域名解析系统

一.网络层

1.IP协议

各个字段所表示的含义

>4位版本号

用来表示IP协议的版本,现在只有两个版本IPv4 ,IPv6

>4位首部长度

IP报头可变,带有选项

单位是4字节

>8位服务类型

(只有四种有效)

最小时延

最大吞吐量

最高可靠性

最小成本

四种形态互斥,只能切换到一种形态

>16位总长度

 IP报头+载荷的长度

最大长度虽然只有64kb,但是IP协议自身支持拆包组包机制,如果需要携带一个比较长的数据,IP协议会自动把数据报拆成多个,接收方分用的时候,也会把多个数据报合并成一个数据报。

以下三个字段字段描述的是IP数据报拆包的过程

>16位标识

拆除的多个包,16位标识是相同的

>3位标志位

有一位表示是否允许拆包,有一位表示是否是最后一个包

>13位片偏移

拆包后,通过片偏移,区分包的先后顺序(前一个包片偏移更小,后一个更大)

描述了整个IP数据报拆包组包的过程,当IP数据报携带比较长的数据的时候,IP协议就会触发拆包

拆包:

把一个打包拆成多个小包,多个小的IP数据报都会带有IP报头,载荷是TCP数据报的几个部分

>8位生存时间TTL

单位是次。初始情况下会有个数值,每次经过一个路由器转发,TTL-1,减到0就会被丢弃

正常来说,TTL足以支持数据报到达网络的任意一个位置的,TTL位0,基本不可达

>8位协议

描述上层传输层使用哪种协议,分用的时候就知道把数据交给哪种传输层协议处理

>16位首部校验和

校验首部是否正确就行,载荷数据传输层校验过了

>32位源地址

>32位目的地址

IP地址

一般用点分十进制表示:把32位分为四个部分,每个部分8个字节,每个部分的范围是0-255。

比如,192.168.1.2

事实上,32位表示的数据量非常有限42亿9千万

既然是地址,原则上是不能重复的,然而现在全世界上的设备,早就超过这个数字了,这就涉及到了一个非常严重的问题:IP不够用了怎么办?

一般来说有三种方法:

1.动态分配DHCP

某个设备不会一直上网,需要上网,就分配,不需要就不分配。但是这种方法只能缓解!不能完全解决问题!

2.NAT机制(网络地址转换)

3.IPv6(增加IP的数量)

2.NAT机制

把ip地址分成两类

1.内网IP

不同的局域网内的设备,内网ip可以重复;同一个局域网内的设备,内网ip不能重复

比如我的电脑上的IP地址(他其实就是一个内网IP)

2.外网IP

外网ip不饿能重复

现在设备之间的通信有以下情况:

1.局域网内部的设备之间进行通信,是完全可以的,因为IP地址是互不相同的。

2.两个局域网通信:A局域网中的设备,希望和B局域网设备通信,这个时候怎么办,毕竟这两个ip可能相同

当前的规则是禁止这个情况的,要想通信就需要有一个带有外网ip的设备进行中转,局域网内的设备访问带有外网ip的设备

比如我们平常使用的电脑手机,都是在局域网内使用的,它们会有一个内网ip;还有一类设备,是服务器,服务器可以有外网ip,这个时候就涉及到NAT工作了

举个例子:

当这个数据报到达cctalk服务器之后,cctalk服务器并不知道这个数据是源自于我的电脑ip,而是只知道源自于路由器的ip

NAT机制下,意义在于,一个外网IP代表的不一定是一个设备了,而是很多设备。

对于NAT设备,会在触发NAT的时候,维护一个映射表,表示了替换前ip和替换后ip的映射

当然,上述只是简化版本。

NAT缺点

1.效率不高

2.非常繁琐

3.不方便直接访问局域网内的设备

但是NAT是一个纯软件实现的方案,成本很低,优势明显。


3.IPv6

从根据上解决IP地址不够用问题

IPv4是4个字节,32位表示IP地址

IPv6是16个字节,128位表示IP地址

IPv6的数量是:2^128=(2^32)^4  这是一个天文数字,足够为地球上的每粒沙子都分配一个地址

缺点是:

IPv6和IPv4不兼容,要想升级IPv6,就需要更换路由器设备,成本很高

相比之下,NAT方案,只需要路由器开发商开出新版本的软件,升级软件就可以支持,成本较低

因此IPv6的发展比NAT要慢很多。

4.IP地址

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

1.同一个局域网中设备网络号必须相同,主机号必须不同

2.两个相邻的局域网,网络号必须不同

那么一个Ip地址,哪个部分是网络号,哪个部分是主机号

通过子网掩码来识别:

子网掩码和IP地址一样,也是四个字节,32位的整数

左侧必须是连续的1,右侧必须是连续的0

1的范围描述了IP地址的对应哪些位是网络号

家用路由器子网掩码一般是255.255.255.0

子网掩码是现代的划分网络号的方案

以前还有一种方法

广播地址

如果IP地址中的主机号全部设为1,就成为了广播地址,用于给同一个链路上的相互连接的所有主机发送数据报;

比如:

子网掩码是255.255.255.0(最后八位是主机号)

如果ip地址是192.168.0.255(255代表全1)

往这个IP上发送数据报,这个数据就会被转发给局域网中的所有设备

(此处的广播,在传输层只能使用UDP,不是使用TCP,TCP无法针对广播地址进行三次握手建立连接)

举个常见的例子:

将手机上的内容投屏到电视上,前提是手机和电视在同一个局域网下(同一个wifi下),手机点击搜索设备,就能把所有同一个局域网下的设备都找出来,这个搜索的过程就可以基于广播IP实现

5.路由选择

路由选择的IP协议的另一个功能。

由于路由器,无法做到理解全貌,只能认识部分网络环境,在这个前提下,进行路由转发,走一步算一步,给出的路径不一定是最优解,只能说是较优解。

每一个路由器内部,有一个路由表

数据报到达路由器的时候,就需要查询路由表

1)如果查到了就按照这个方向转发

2)如果没查到,路由器就会给一个默认的方向,沿着默认的方向走

二.数据链路层

数据链路层的代表协议是以太网协议

以太其实是人们人们设想出来的一种物质,事实上并不存在。

另外以太网协议既涉及到数据链路层的内容,也涉及到物理层的内容

1.以太网协议

以太网协议报头有三个字段:

>目的地址

>源地址

这个地址叫做mac地址,长度是6字节

为什么有了IP地址,还要mac地址

这其实是因为这两个地址,都被各自独立设计出来了,因此都保留下来了

(一般使用十六进制数字,表示mac地址)

两个十六进制数字,就是一个字节

(字节之间一般是-或者:来分割)

mac地址比IPv4的地址大很多

mac地址都是网卡出厂的出后就固定了,可以保证每个设备的网卡都有独立的mac地址的

>类型

以太网数据帧的载荷有多种形式,通过这个字段来标识

载荷部分最大长度是1500(1kb多一点)

一个稍微大一点的传输层/应用层数据报都会在数据链路层被切分成多个

其实IP数据报分包和组包这个过程就是为了MTU(最大值)而做的

2.域名

上网就要访问服务器,知道服务器的ip地址,但是ip地址不方便人们记忆和传播,于是就出现了域名。

比如:www.baidu.com

三级域名.二级域名.一级域名

这个域名机器不认识,就需要一套系统,把域名解析成ip地址----这就促成了域名解析系统的诞生。

3.DNS域名解析系统

DNS的工作原理简单的来说就是:主机A想访问www.baidu.com,主机会先访问DNS服务器,让DNS服务器返回www.baidu.com的IP地址给主机,于是主机就可以访问这个IP地址

DNS服务器如何能够承受高并发的状况的呢?

开源节流

1.每个电脑上在进行域名解析的时候都会有缓存,这样不至于每一次访问域名都要真的访问DNS

2.全世界搭建了很多的DNS镜像服务器(和最初的DNS服务器同步数据)

此时访问镜像和访问那个DNS服务器效果一样

但是如果根域名服务器(在美国)还是可以控制镜像服务器,这也意味着美国掌握着世界上任何一个国家的网络使用权。

因此国内大力发展IPv6一部分原因也是为了摆脱DNS的限制(虽然IPv6也需要DNS,但是它是一套新的DNS,和之前的不相关)

从技术角度看,NDS服务器是否会挂?

会。

 尤其是所在地区的DNS镜像服务器

比如:遇到类似这样的情况:qq能用,浏览器不能用

这种时候就很有能是DNS镜像服务器挂了,好在如果挂了可以改镜像服务器

比如改成谷歌维护的DNS服务器8.8.8.8

在网络管理中修改:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ZYNQ连载02-开发环境

ZYNQ连载02-开发环境 1. 官方文档 ZYNQ开发使用的软件为Vivado/Vitis/PetaLinux,软件体积比较大,硬盘保留100G以上的空间,赛灵思提供详细的文档,链接如下: ZYNQ文档 2. Vivido和Vitis安装 赛灵思统一安装程序 3. PetaLinux安装…

设计模式面试知识点总结

文章目录 设计原则常用设计模式单例模式1. 饿汉式2. 懒汉式3. 双重检测 工厂方法模式(简单工厂、工厂方法、抽象工厂)简单工厂静态工厂工厂方法模式抽象工厂模式 策略模式责任链模式 设计原则 标记设计模式原则名称简单定义OCP开闭原则对扩展开放&#…

VSCode 自动格式化

1.打开应用商店,搜索 prettier code formatter ,选择第一个,点击安装。 2.安装完成后,点击文件,选择首选项,选择设置。 3.在搜索框内输入 save ,勾选在保存时格式化文件。 4.随便打开一个文件&a…

【iOS】——知乎日报第二周总结

文章目录 一、自定义cell内容乱序问题二、WKWebView加载网页三、通过cell的协议函数进入指定网页四、滚动视图左滑加载新的网页五、隐藏导航栏 一、自定义cell内容乱序问题 当我下拉刷新的时候一开始我自定义的cell的内容顺序没有问题,当我一直下拉刷新或者上滑看以…

leetcode-链表

链表是一个用指针串联起来的线性结构,每个结点由数据域和指针域构成,指针域存放的是指向下一个节点的指针,最后一个节点指向NULL,第一个结点称为头节点head。 常见的链表有单链表、双向链表、循环链表。双向链表就是多了一个pre指…

ITSource 分享 第5期【校园信息墙系统】

项目介绍 本期给大家介绍一个 校园信息墙 系统,可以发布信息,表白墙,分享墙,校园二手买卖,咨询分享等墙信息。整个项目还是比较系统的,分为服务端,管理后台,用户Web端,小…

ELASTICO-A Secure Sharding Protocol For Open Blockchains

INTRO 在中本聪共识中,通过POW机制来公平的选举leader,不仅非常消耗power,并且拓展性也不好。现在比特币中是7 TPS,和其他的支付系统相比效率相差甚远。 当前的许多拜占庭共识协议,并不支持在一个开放的环境中使用&a…

C语言实现输入一个字符串,递归将其逆序输出

完整代码&#xff1a; // 输入一个字符串&#xff0c;递归将其逆序输出。如输入 LIGHT&#xff0c;则输出 THGIL #include<stdio.h> #include<stdlib.h> //字符串的最大长度 #define N 20//逆序输出字符串 void func(char *str){if (*str\0){//结尾时直接退出递归…

Java SE 学习笔记(十七)—— 单元测试、反射

目录 1 单元测试1.1 单元测试概述1.2 单元测试快速入门1.3 JUnit 常用注解 2 反射2.1 反射概述2.2 获取类对象2.3 获取构造器对象2.4 获取成员变量对象2.5 获取常用方法对象2.6 反射的作用2.6.1 绕过编译阶段为集合添加数据2.6.2 通用框架的底层原理 1 单元测试 1.1 单元测试概…

基于单片机的太阳跟踪系统的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、硬件电路设计2.1跟踪控制方案的选择2.1.1跟踪系统坐标系的选择2.2系统总体设计及相关硬件介绍…

服务熔断保护实践--Hystrix

概述 微服务有很多互相调用的服务&#xff0c;构成一系列的调用链路&#xff0c;如果调用链路中某个服务失效或者网络堵塞等问题&#xff0c;而有较多请求都需要调用有问题的服务时&#xff0c;这是就会造成多个服务的大面积失效&#xff0c;造成服务“雪崩”效应。 服务“雪…

十九、类型信息(2)

本章概要 Class 对象 类字面常量泛化的 Class 引用cast() 方法 Class 对象 要理解 RTTI 在 Java 中的工作原理&#xff0c;首先必须知道类型信息在运行时是如何表示的。这项工作是由称为 **Class**对象 的特殊对象完成的&#xff0c;它包含了与类有关的信息。实际上&#x…

JVM第二十三讲:Java动态调试技术原理

Java动态调试技术原理 本文是JVM第二十三讲&#xff0c;Java动态调试技术原理。转载自 美团技术团队胡健的Java 动态调试技术原理及实践&#xff0c;通过学习java agent方式进行动态调试&#xff0c;了解目前很多大厂开源的一些基于此的调试工具 (例如来自阿里开源的Arthas)。 …

微信小程序设计之主体文件app-wxss/less

一、新建一个项目 首先&#xff0c;下载微信小程序开发工具&#xff0c;具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后&#xff0c;注册小程序账号&#xff0c;具体注册方法&#xff0c;可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…

elementUI 特定分辨率(如1920*1080)下el-row未超出一行却换行

在1920*1080分辨率下&#xff0c; el-col 内容未超出 el-col 宽度&#xff0c;el-col 不足以占据一行&#xff0c;el-row 却自动换行了&#xff08;其他分辨率没有这个问题&#xff09;。 截图&#xff1a; 排查&#xff1a; el-col 内容没有溢出&#xff1b;没有多余的 pad…

拜耳阵列(Bayer Pattern)和解马赛克简介

拜尔阵列 典型的图像传感器&#xff08;例如我们在数码相机中使用的图像传感器&#xff0c;主要有CCD, CMOS&#xff09;由许多单独的光电传感器组成&#xff0c;所有这些传感器都会捕获光线。这些光电传感器本身能够捕获光的强度&#xff0c;但不能捕获其波长&#xff08;颜色…

CTF-Web(3)文件上传漏洞

笔记目录 CTF-Web(2)SQL注入CTF-Web(3)文件上传漏洞 1.WebShell介绍 (1)一句话木马定义 一种网页后门&#xff0c;以asp、php、jsp等网页文件形式存在的一种命令执行环境&#xff0c;而 一句话木马往往只有一行WebShell代码。 作用&#xff1a; 攻击获得网站控制权限 查看、修改…

如何防范AI等技术带来的诈骗风险?从技术、法律、教育等多方面入手

文章目录 前言什么是AI诈骗案例案例一案例二 AI诈骗的特点如何预防和应对AI诈骗建议后记 前言 互联网是一把双刃剑&#xff0c;这是我们常说的一个问题。 随着人工智能技术的快速发展&#xff0c;AI诈骗成为当今社会面临的新兴威胁。不法分子利用人工智能技术&#xff0c;以更…

Qt之实现支持多选的QCombobox

一.效果 1.点击下拉列表的复选框区域 2.点击下拉列表的非复选框区域 二.实现 QHCustomComboBox.h #ifndef QHCUSTOMCOMBOBOX_H #define QHCUSTOMCOMBOBOX_H#include <QLineEdit> #include <QListWidget> #include <QCheckBox> #include <QComboBox>…

面试算法43:在完全二叉树中添加节点

题目 在完全二叉树中&#xff0c;除最后一层之外其他层的节点都是满的&#xff08;第n层有2n-1个节点&#xff09;。最后一层的节点可能不满&#xff0c;该层所有的节点尽可能向左边靠拢。例如&#xff0c;图7.3中的4棵二叉树均为完全二叉树。实现数据结构CBTInserter有如下3种…