JavaEE中的网络原理 --网络层和数据链路层


网络原理

介绍TCP/IP协议中每一层里面的核心内容~

  • 应用层
  • 传输层
  • 网络层
  • 数据链路层
  • 物理层

一、网络层

接下来介绍网络层

网络层做的工作,就是在两点之间,规划处一个合理的路径~
同时也需要对主机所处的位置,进行定义~

这里网络层做的工作:

  1. 地址管理
  2. 路由选择

1.IP协议

IP复杂程度和TCP相比不遑多让

在这里插入图片描述
针对IP协议只介绍一些简单的原理~
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为啥就转发这几次就能到? 基于一个社会科学上的理论: 六度空间理论

每个路由器,都认识和他相邻的路由器 (它的朋友)~~
朋友进一步还有朋友~

在这里插入图片描述
在这里插入图片描述

源IP : 发件人地址
目的IP : 收件人地址

IP地址,本质上是32位的整数 ,4个字节,类似于一个int。

为了给人来看,通常就会把这个32位的整数,转成"点分十进制" 表示方式

🎑例如:

61.156.196.5 , 使用3个点,把IP地址分成4个部分,每个部分1个字节,每个部分的取值范围0-255

IP地址用来区分网络上唯一一台主机~

🎀一个IP地址,是4个字节,32个bit位,能表示的范围,0 - 42亿9千万
按照上述设定,IP地址最多只能表示不到43亿个不同的主机
但此时当前能够上网的设备早已超过了这个数值!

这就诞生了一个非常关键的问题,IP地址不太够用~

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都是外网IP
    但是在不同的局域网IP中,IP之间允许重复~
    比如我的电脑在我家的局域网里,IP唯一 。
    别人的电脑在别人家的局域网中,也可以和我有一样的IP 。
    如果在局域网内部,想访问某个外网的服务器,就会使用一个外网IP来代替一大波局域网中的设备(大大的节省了外网IP的个数了)

NAT机制图解:
在这里插入图片描述
返回:
在这里插入图片描述

IP一般来说不是固定的,有动态IP和静态IP之分 ~

运营商路由器还连接着很多很多千家万户的设备
一个外网IP就可以代替上万个设备

当前网络环境的现状,就是NAT + 动态地址分配

我这里启动的服务器(UDPEchoSever ),别人就访问不了~
为啥不行,就是因为NAT~
我的IP只是局域网内部能够使用的,我可以通过NAT 设备访问到 外网的IP ,但是我无法访问到其他的内网的设备~
如果你想在局域网里访问另一个局域网中的设备:

  • 内网穿透
  • vlan

简单介绍下内网穿透:
在这里插入图片描述
vlan也是借助一个外网IP服务器,然后把连着它的几个主机加到一个虚拟的局域网去,给它们重新分配一个虚拟的局域网IP

  1. 彻底解决IP地址不够用问题的方案:使用IPv6
    IPv4 4字节,32位来表示IP地址
    IPv6,16字节,128位表示IP地址(42亿 * 42亿 * 42亿 * 42亿)

IPv6已经提出很多年了,当前网络的现状仍然是 NAT+ 动态分配,为什么IPv6没有大规模普及呢?
因为IPv6和IPv4不兼容~
要想升级,就需要把路由器从IPv4升级到IPv6(花钱)!

在这里插入图片描述

关于IP地址具体的规则

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

  • 网络号 : 标识网段,局域网的身份标识
    在两个相邻的局域网中,要求网络号是不同的(同一个路由器连接的局域网),WAN口和LAN口得有不同的网络号
  • 主机号:标识主机
    同一个局域网中,主机之间的网络号是相同的,主机号必须不同

子网掩码: 划分出从哪里到哪里是一个网络号

子网掩码有32位,左半边都是1,右半边都是0(不会10 混着)
左半边有多少个1,就表示IP地址左侧的多少位是网络号
(把子网掩码和IP地址进行按位与运算,得到的结果是网络号)


在这里插入图片描述

255 => 0xFF => 11111111
也就是说左边24个1,后面8个0,所以前3个字节就是网络号


在这里插入图片描述

IP地址:
192.168.1 就是网络号,后面的180 就是主机号
我的局域网里,我的电脑,我的手机,其他的设备,只要是连到我这个路由器上,大家的网络号都是192.168.1 但是主机号是不同的~

我家的路由器又连着我家的光猫,我的路由器连接了两个局域网,这俩局域网的网络号是不同的

在这里插入图片描述

特殊的IP地址 :

  • 如果一个IP地址,主机号为0,此时这个IP就标识网络号,192,168.0.0 代表当前局域网
  • 如果一个IP地址,主机号为1,此时这个IP往往表示这个局域网的" 网关 ",192.168.0.1,代表局域网的网关(通常就是路由器的IP)

网关:
出入口,网关的角色一般就是路由器,把守着当前局域网和其他局域网之间的出入口(这个不是强制要求,只是习惯,可以手动改掉)

  • 如果一个IP地址,主机号为全1,此时这个IP表示广播IP,专门用于同时向网络中所有工作站进行发送的一个IP
    例:10.1.1.255255 即为2 进制的11111111
  • 127.* 开头,都是"环回IP"(表示自己的主机)
    典型的就是127.0.0.1
    实际上只要是127开头的都是环回IP

在这里插入图片描述

2.路由选择

就像地图导航一样,能够在两点之间规划出一个路线~
路由选择,是"启发式"的过程~
非常类似于"问路"

IP数据报中,就包含 目的IP
网络数据报到达路由器的时候,路由器自身有一个"路由表"数据结构(路由表就是这个路由器认识的路)
一个路由器无法认识到网络的全貌,但是可以认识附近的一部分~
如果当前的目的IP路由器认识,就会给出一个明确的路线~
如果当前的目的IP路由器不认识,路由器就会把数据报转发给一个"更见多识广"的路由器(在路由表里有个默认的选项,下一跳)

❓是否可能问了一大圈也没找到目的地呢?

有可能 ,比如IP地址不存在(或者不可达),此时就与TTL联系起来,TTL减到0,就不再转发了~

路由过程不光是找一条路,也需要筛选一条更好的路~

二、数据链路层

简单介绍数据链路层

以太网

以太网帧格式:
在这里插入图片描述

mac地址:标识主机的位置,和IP一样,是定位的作用。
mac地址通常使用16进制来表示~
在这里插入图片描述

mac设计的时候,6个字节~ 当下mac地址还是够用,是可以让每个主机都有独立的mac地址,这个地址是网卡出厂的时候就写好了~

正经的网卡,出厂的时候会被分配一个唯一的mac地址,但是也有一些山寨厂商,没有相关的资质,生产的网卡的mac地址可能和别人重复~
由于当前mac只是在数据链路层使用~
只要相邻区域内的设备mac地址不重复即可~
因此在网络上,mac地址也可以作为是主机身份标识的一种方式~

❔都有一套IP地址了,为啥还要在搞一套mac地址呢?

历史原因
设计IP地址的人和设计mac地址的人是两个团队~
两个团队各自独立的搞了一套地址体系~

💖举个例子:
有一个网络数据报,从A转发给B,转发过程中需要经过C D

在这里插入图片描述
源IP和目的IP始终都是起点和终点,但是源mac和目的mac是此时所处的位置和下一个位置
在这里插入图片描述

IP数据报传输过程:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

CRC: 校验和
UDP的时候就已经说了校验和了,UDP的校验和是通过软件来计算的~
CRC是交给硬件(网卡来算的)
软件是算不过硬件的~
很多硬件设备功能越来越复杂,也越来越丰富了

总结

☕面试题:
从浏览器这里输入一个URL到最终展示出页面,这里大概都会发生哪些事情?

从后端开发的角度:

  1. 进行DNS域名解析
    网络上的设备都是IP地址作为身份标识的,但是IP地址不好记,不好传播,此时就可以使用一串单词(域名),来表示这个IP地址
    DNS系统功能就是把域名自动转换成IP地址
    2.进行封装
    浏览器就可以构造出 HTTP 数据报(这个后面详细介绍)
    交给了传输层,TCP
    TCP就根据刚才的地址,先建立连接(三次握手)
    然后再发送刚才的HTTP请求
    数据交给了网络层,IP协议
    IP协议封装成IP数据报
    IP数据报再交给数据链路层,封装成对应的数据帧,最终通过网卡传输出去(物理层)~
    3.进行传输
    中间会经历一些交换机和路由器
    交换机会把数据分用到数据链路层(更上层的就不再进行解析了)
    再重新封装,继续转发,路由器会把数据分用到网络层(更上层就不解析了)
    路由表匹配过程~ 路由器根据数据报中的目的IP在路由表中匹配,找个合适的方向发出去,每次转发TTL-1
  2. 到达目标服务器之后,服务器进行层次分用~
    一直到HTTP这一层(HTTP具体解析过程后面再说)
    服务器就会找到你想访问的那个资源,把资源再进行构造成HTTP响应(根据请求计算响应)
  3. 服务器把响应数据重新封装
  4. 响应数据再中间进行转发,回到浏览器
  5. 客户端这里再针对数据进行解析~ (分用)
  6. 解析出一个网页,渲染到浏览器上

在这里插入图片描述

你可以叫我哒哒呀
本篇到此结束
“莫愁千里路,自有到来风。”
我们顶峰相见!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值