JavaEE初阶10.0

目录

网络层协议:

一、IP协议

[1.0 IP协议](#1.0 IP协议)

(1)简介

(2)作用

(3)报头

(4)IP地址的其他规则

(5)特殊的IP地址

(6)路由选择

数据链路层

1.0以太网协议

(1)简介

(2)以太网数据帧格式

[(3) DNS](#(3) DNS)


网络层协议:

一、IP协议

1.0 IP协议
(1)简介

IP协议,复杂程度和TCP是差不多的~~ //cmd里面输入ipconfig可以查看自己电脑的ip

但是我们并不会详细展开介绍太多的细节(哈哈哈哈 虚幻一枪)

日常开发的时候,最多就是用到传输层就够了 网络层 除非你是专门开发路由器的工程师 否则一般不会涉及到网络层

(2)作用

1.地址管理 使用IP地址,这样的概念,标识网络上某个设备的位置~

2.路由选择 在两个通信的节点之间 规划出一个合理的路径~

(3)报头

4位版本:IPv4 IPv6 开发阶段,主要针对IPv4

4位首部长度:IP协议的报头 也是变长的 单位是4个字节

8位服务类型:决定了IP协议的工作方式 4位TOS分别表示:最小延时 最大吞吐量 最高可靠性 最小成本 IP可以切换它的工作状态

16位总长度:一个IP数据报 报头+载荷的长度 64KB的限制 但是IP协议内置了拆包和组包的功能

16位标识:哪几个IP数据包是一组的 拆包组包的结果

13位片偏移:描述了先后顺序 偏移小的放前面 大的放后面

3位标志:其中一个标志位 表示是否触发了拆包操作 还有一个表示 当前包是否是最后一个

8位生存时间:一个IP数据包能够在网络上传输的最大时间 单位是次数 每经过一个路由器 TTL-1

比如发了一个错误的数据包(目的IP写错了) 注定不可能到达的 这个包也不能无线传输)

8位协议:标识传输层使用哪种协议 分用的时候 IP协议解析 IP数据报的时候 拿到载荷 交给上层处理 此处8位协议编号 就能起到区分效果~~

16位首部校验和:载荷部分自然有tcp udp自行校验~

32位源IP地址IP协议的关键部分 IP地址本质上是通过32位整数来表示的 由于32位整数不方便阅读 通常会把IP写十进制 表示方式 用三个点分出四个部分 例:192.168.100.98

32位IP地址 只能表示42亿9千万个不同的IP

IP不够用了怎么办:(3种)

动态分配IP 上网再分配 不上网就不分配 这样解决不了根本问题

IPv6 终极方案 IPv4是使用4个字节作为IP地址 IPv6是16个字节 天文数字 能保证全地球的每一粒沙子分配一个IPv6地址 都是绰绰有余的 现状是IPv6普及程度非常低

NAT机制 网络地址转换 当前网络世界最主要的方式

把所有的IP地址分为两个大类 公网IP/外网IP 内网IP/私网IP

内网ip是10*. 172.16--172.31* 192.168*开头的ip 剩下的是公网ip 外网IP是唯一的 内网ip在不同的局域网中 允许重复(内网类似门牌号 每个小区都会有相似的门牌号)

如果电脑在公网IP上,相当于你家的房门开在大街上了 如果电脑在局域网IP上

相当于你的房门外还有个小区院子 小区的门禁已经把很多不速之客挡住了

  1. 局域网设备A访问公网设备B(NAT机制最核心的关键要点)

我的电脑(192.168.100.90) 通过运营商路由器 最终到了带有公网IP的路由器 进一步广域网

我的电脑想要访问墨嘟嘟服务器 (构造一个IP数据报最终发送给广域网)

我的IP数据报发送给服务器 经过带有公网IP的路由器 NAT机制的地址映射功能改变源IP

局域网中的若干个设备 共用一个公网IP 这样就够用了

现实中 一个公网IP背后代表着几千个 上万个局域网设备的~

公网返回给客户端的时候 借助五元组的里面的源端口、目的端口区分每一个客户端

(哈哈 如果端口刚好一样呢 小概率事件 nat设备进行替换的时候 端口号随意进行修改了 A端口8080和B端口8080的冲突就解决了 因为把B该为了8081)

路由器触发NAT地址替换的时候,自身维护一个"哈希表"结构 记录替换的映射关系~

5.如果公网设备 尝试访问局域网设备B 这样是不允许的 公网没局域网设备信息就去访问广域网 就算广域网返回信息 公网又发给谁呢?

如果你的设备想要访问外面的服务器(绕过公网) 需要适用 内网穿透技术或者发送VPN

内网穿透技术:相当于雇佣一个快递代收点 外面的服务器给了快递站 快递站发经过公网发送到你的手里 这样确实绕开了

VPN:相当于给客人发一把特殊的钥匙 客人用钥匙打开公寓侧门 这样能绕过公网门禁

32位目的IP地址: 是数据包再互联网中的"收件人地址" 决定数据包最终被送达的目标设备

(4)IP地址的其他规则

网段划分:组网是指组件网络环境

学校 企业 组织等 需要进行组网:成百上千个设备 网络结构非常复杂~

需要有专业人员负责搭建网络(网管 网络管理员 研究如何配置路由器交换机 来搭建网络环境)

192.168.100.98是一个IP地址 其中192.168.100是网络号 98是主机号9(哪个部分是主机号 哪个部分是网络号 都是可以配置的~)

同一个局域网中 网络号必须相同 主机号必须不同

两个相邻的局域网中 网络号必须不同 主机号无限制

上面这两个是相邻的局域网

如果你手动把IP的网络号设成一样的 也就会导致网络不通~

子网掩码:是一种网段划分的方式 是一个32位的整数 左半部分是都是1 右半部分都是0 不会出现01交错的情况 1的部分就表示了哪些bit位是网络号 例如255.255.255.0 表示前面24位都是1

(5)特殊的IP地址

//将IP地址的主机地址全为0 就成了网络号 表示这个是局域网 192.168.100.0

//将主机地址全部设为1 就成为了广播地址

用于给同一个链路中相互连接的所有主机发送数据包 192.168.100.255

在广播地址上发送数据包 就会被转发给局域网中的所有设备 这个和群聊形式上类似 技术上没有任何关系 群聊里面的用户都是不同局域网中的设备 广播只是局限于当前局域网 例如手机投屏 会自动搜索 这个过程就是)

//环回IP:127开头的ip的 表示本机 无论你本机真实的ip是多少 都可以写作127.0.0.1作为代表

//主机号为1的ip 192.168.100.1 在IP协议中 只是普通IP 在实际组网中 通常使用这个IP作为网关IP 网关是网络的入口 家庭的网络中网关一般就是路由器 在大型企业中 网关是单独的物理设备

(6)路由选择

通过IP协议 进行数据转发的过程 这个过程极其复杂 这里只讨论简化的模型

问路的方式 启发式/探索式

例子:

陕西科技大学 到 西安邮电大学 (假设没有手机导航 可以问路)

虽然不知道目标怎么走 但是可以走着看 先问A说坐公交到南面 到了南面 问B说大概坐地铁向南走 范围圈慢慢的缩小 越来越靠近.....

网络环境非常复杂,任何一个路由器,无法存储所有网络信息的 但是每个路由器,是可以知道附近的网络情况(至少知道谁和他相连)

当数据包到达某个路由器的时候 就会匹配这个路由器的"路由表"(路由表就记录了路由器周围的设备的IP是啥 以及也会记录每个设备要通过哪个路口转发过去)

如果目的IP刚好匹配到了路由表中的记录,直接按照当前对应的口转发过去就行了

如果没有匹配到 路由表就会有一个特殊的表项"下一跳" 指向设备,上一级路由器所在的位置

数据链路层

1.0以太网协议
(1)简介

简单过一下里面常识性的知识 就行了 这个不是程序员的重点

数据链路层的核心协议是以太网 以太网是数据链路层+物理层的协议

但凡你的电脑是通过 网线 这种方式上网 就是以太网

(2)以太网数据帧格式

描述网络上传输数据的单位: 包 IP 段TCO 报UDP 帧 以太网/数据链路层

目的地址、源地址:此处的地址 不是IP地址 而是mac地址(物理地址)

输入cmd 之后ipconfig/all 就可以看到啦

一台电脑上不止有一个网卡 除了有线网卡 无线网卡之外 还有虚拟的网卡

mac地址每个网卡 都会有一个唯一的mac地址 网卡出厂的时候 就写死了(mac地址可以作为电脑的一个身份标识 很多外挂通过mac地址绑定外挂)

IP地址和mac地址有啥区别呢? 为啥有了IP还要有mac呢?

其实理论上来说 网络通信有一组地址就够用了 但是最初构建网络层协议的大佬和构建数据链路层的大佬不是一伙人

IP是在网络层使用,关注整个网络路径的转发传输过程

Mac是在数据链路层使用 关注于转发的细节 两个相邻设备之间的转发~

源IP 目的IP始终是整个通信路线的起点和终点 而mac地址只是关注当前的这一段路 从哪到哪

网络传输的过程中,网络这一层 转发是要根据IP的 数据链路层这一层 是要根据mac

此时就需要根据下一个节点的ip 找到对应的mac 才能填写以太网的数据帧

(3) DNS

可以认为是一个应用层协议 也可以认为是一套系统

它是一个域名解析系统 网络上的服务器都是有IP地址的 但是这样比较难记 于是就有了域名这个好看版

域名是一串串单词(例如 sougou.com == 101.26.101.175) 计算机会把这些单词 翻译成IP地址

如果未来的服务器迁移了 域名没有变 用户感知不到(这样就很方便啊 改IP了但是域名还是原来那个)

最初的DNS是通过hosts文件实现映射的

把host文件中的内容 提取出来 单独放到一个服务器上 这样的服务器就称为DNS服务器

用户的电脑访问某个网站的时候 就会先查询DNS服务器 把域名对应的IP拿到 再真正的访问服务器 问题:全世界上网的设备那么多 如果每次发起网络请求 都需要先访问DNS服务器的话 DNS服务器就需要承担海量的并发量 这不就挂了吗?

解决方案:

缓存:你的电脑不会再每次请求服务器的时候都触发DNS请求 访问sougou.com 进行一次DNS之后,就把ip记录下来了 下次再访问搜狗 就不需要重新访问DNS 可能我一天访问了几百次 其实就访问了一次DNS

DNS服务器有很多:存储原始数据DNS服务器称为"DNS根服务器" 各种网路运营商,可以搭建DNS镜像服务器 全世界各地都有DNS服务器

//全世界只有11个根服务器 大部分在美国人手里

也可以手动设置

相关推荐
兮山与5 小时前
JavaEE初阶8.0
javaee
兮山与6 小时前
JavaEE初阶9.0
javaee
爱学习的小可爱卢3 天前
JavaEE进阶——SpringMVC响应处理详解
spring boot·postman·javaee
带刺的坐椅5 天前
Solon 不依赖 Java EE 是其最有价值的设计!
java·spring·web·solon·javaee
想不明白的过度思考者9 天前
基于 Spring Boot 的 Web 三大核心交互案例精讲
前端·spring boot·后端·交互·javaee
朝新_13 天前
【实战】博客系统:项目公共模块 + 博客列表的实现
数据库·笔记·sql·mybatis·交互·javaee
朝新_15 天前
Spring事务和事务传播机制
数据库·后端·sql·spring·javaee
朝新_16 天前
【统一功能处理】SpringBoot 统一功能专题:拦截器、数据封装、异常处理及 DispatcherServlet 源码初探
java·spring boot·后端·spring·javaee
朝新_20 天前
【统一功能处理】从入门到源码:拦截器学习指南(含适配器模式深度解读)
数据库·后端·mybatis·适配器模式·javaee