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

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


前言

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

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(了解)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

'Dream是普通小孩耶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值