|
JavaEE
网络原理——No.3 传输层_TCP的滑动窗口, 流量控制与拥塞控制
网络原理——No.4 传输层_TCP协议中的延迟应答, 捎带应答, 面向字节流与TCP的异常处理
目录
- 网络层
- IP 协议
- IP 地址
- 路由选择
- 数据链路层
- 以太网
网络层
网络层做的工作, 就是两点之间, 规划出一个合理的路径. 同时也需要对主机所处的位置, 进行定义.
网络层做的工作
- 地址管理
- 路由选择
IP 协议
注:
本篇文章讲解的 IP 默认都是指 IPv4
IP 协议的报文格式
网络上可能会有很多的数据报在传输, 有的数据报可以顺利发到对面, 有的可能是永远也发不过去(收件人地址写错了)
永远也发不过去的数据报, 不可能无限的转发下去, 转发到一定程度, 发现还是没到, 就会被丢弃.
TTL 单位是 “次数” 是一个整数. 一般是 32/ 64/ 128这样的整数.
数据报传输时, 每经过一个路由器转发, TTL
就 -1
, 如果减到 0 了, 此时就要把包丢弃了,
(预期正常情况下,数据报是可以在很短的次数内就能传输到世界上的任何一个主机上的)
为什么转发几次就能到呢?
基于一个社会科学上的假设: 六度空间理论.
IP
地址本质上是一个 32 位的整数(四个字节, 类似于一个int
)
为了给人来看, 通常就会把这个32位整数, 转成 "点分十进制
"表示方式 (类似192.168.1.101)
使用三个点, 把 IP 地址分成 4 个部分, 每个部分 1 个字节 (每个部分的取值范围 0-255)
IP 地址是用来区分网络上的唯一一台主机的
一个 IP
地址, 是 4 个字节, 32 个 bit 位, 能表示的范围 0->42亿9千万
按照上述设定, IP
地址最多只能表示不到 43亿 个不同的主机
此时当时能够上网的设备早以超过
了这个数值.
IP 地址不太够用, 应该怎么办呢?
-
动态分配
IP
地址设备上网的时候, 才分配
IP
地址, 不上网的时候, 就把 IP 回收, 给别人用(治标不治本, 这种方案, 并没有增加
IP
地址的数量, 只是提高了利用率) -
NAT
机制(主流机制)不再强制要求每个主机都有独立的
IP
把 IP 地址分为两大类
1)外网 IP/ 公网 IP
2)内网 IP/ 私网 IP / 局域网 IP
-
约定,
10.*, 172.16-172.31*, 192.168.*
都是局域网 IP -
约定, 在同一个局域网内部, IP 不能重复
-
在不同的局域网中, IP 之间允许重复
-
如果我们在局域网内部想访问某个外网的服务器, 就会使用一个外网 IP 来代替一大波局域网中的设备(大大节省了, 外网 IP 的个数)
-
举个例子:
现在我想通过我的电脑, 发送一个数据报给 xxx 服务器, 会经历一个什么样的过程呢.
返回响应时, 按原路返回, 路由器记录了映射关系(记住了是谁替换了谁), 方便还原.
运营商路由器, 还连接着很多很多, 千家万户的设备
一个 外网 IP
就可以代替上万个设备
当前网络环境的现状, 就是 NAT + 动态地址分配
NAT核心: 用一个 IP 地址代替很多设备, 这样就节省了 IP地址 的个数
小知识:
IPv6
可以彻底解决 IP 地址不够用问题.
IPv4 4字节, 32位来表示 IP 地址.
IPv6 16字节, 128位表示 IP 地址, 扩大的远远不止4倍(42亿 * 42亿 * 42亿 * 42亿) 给地球的每一粒沙子都分配一个 IP 地址, 也是够用的.
为什么 IPv6 没有大规模普及呢?
IPv6 最大的问题就是, IPv6 和 IPv4 不兼容
比如: 现在有个 IPv4 的路由器, 这个路由器已经用了很多年了. 要想升级, 就要换设备, 要换设备就要花钱, 企业中如果换设备, 就是一笔不小的开销.
但是在国内, IPv6 的普及还是很好的, 目前70% 的家用宽带已经能支持 IPv6 了. (默认都是未开启的状态). 当前看到的各种常见的用用程序也都支持 IPv6 了.
IP 地址
组成
IP
地址分为两个部分, 网络号和主机号
- 网络号:标识网段,保证相互连接的两个网段具有不同的标识;(网段: 网络号, 局域网的身份标识)
- 主机号:标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;
- 同一个局域网中, 主机之间的网络号是相同的, 主机号必须不同
- 两个相邻的局域网中, 要求网络号是不同的 (同一个路由器连接的局域网,
WAN
口和LAN
口要是不同的网络号)
子网掩码 (划分出哪里到哪里是一个网络号)
32位的整数, 左半边都是 1, 右半边都是 0. (不会1, 0 混着)
左半边有多少个 1 就表示 IP
地址左侧的多少位是网络号. (把子网掩码和 IP 地址进行按位与运算, 得到的结果就是网络号)
在我的局域网里, 我的电脑, 我的手机, 其他的设备, 只要是连在我这个路由器上, 大家的网络号都是 “192.168.1”, 但主机号不同.
如果我家的路由器又连着我家的光猫. 我的路由器连接了两个局域网, 这两个局域网的网络号是不同的.
分类
过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示(该图出 自 [TCPIP] ).
# 注意 #
- 这种网络划分方式已经消失在历史长河中了
- 这种分配方式比较浪费, 且比较死板
特殊的 IP 地址
-
如果一个
IP
地址, 主机号为 0, 此时这个 IP 就表示网络号. 代表当前局域网 -
如果一个
IP
地址, 主机号为 1, 此时这个 IP 往往表示这个局域网的 “网关”, 代表局域网的网关(通常就是路由器的 IP) [注:
不是强制要求, 可以手动设置 ]网关: 出入口. 网关的角色一般就是路由器, 把守着当前局域网和其他局域网之间的出入口
-
如果一个 IP 地址, 主机号 全为 1, 此时这个 IP 表示广播
IP
-
127.*开头都是 “
环回IP
”, 典型的是 “127.0.0.1”, 实际上, 只要是 127 开头的都是环回 IP
路由选择
就像地图导航一样, 能够在两点之间规划出一个路线.
路由选择, 是 “启发式” 的过程, 非常类似于"问路".
比如: 你在 A 地, 你想去 D 地.
- 在 A 地有一个人说, 好像在 E 地附近, 你先往 B 那边走.
- 你到了 B 地, 一个人说, 好像在 E 地附近, 你先往 C 那边走
- 你到了 C 地, 终于有人知道了, 说你往前走, 就到 D 了
IP 数据包中, 就包含 目的 IP
网络数据包到达路由器的时候, 路由器自身有一个 “路由表” 数据结构, (路由表就是这个路由器认识的路)
一个路由器无法认识到网路的全貌, 但是可以认识附近的一部分
-
如果当前的目的 IP 路由器认识, 就会给出一个明确的路线
-
如果当前目的 IP 路由器不认识, 路由器就会把数据包转发给一个 “更多见多识广” 的路由器(在路由表里有一个默认的选项, 下一跳)
是否可能问了一大圈, 也没找到目的地呢?
- 也是有可能的, 比如 IP 地址不存在,(或者不可达)
# 注意 #
路由过程不光是找一条路, 也需要筛选一条更好的路.
最关键的是路由表数据结构是什么样的, 以及路由表是怎么来的.
数据链路层
以太网
- “以太网” 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等;
- 例如以太网中的网线必须使用双绞线;传输速率有10M,100M,1000M等;
- 以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
以太网帧格式
都有一套 IP 地址, 为什么还需要一套 MAC 地址呢?
- 历史原因, 设计 IP 地址的人 和设计 MAC 地址的人, 是两个团队, 是他们各自独自搞的一套地址体系.
MAC
地址设计的时候, 6 个字节, 当下 MAC 地址还是够用的, 可以让每个主机都有独立的 MAC
地址. (这个地址是网卡出厂的时候就写好了)
MAC 地址一定是唯一的吗?
- 正经网卡, 出场时会被分配一个唯一的 MAC 地铁
- 但是有一些山寨厂商, 生产的网卡的 MAC 地址可能和别人重复
- 由于当前 MAC 地址只是在数据链路层使用, 只要相邻区域内的设备 MAC 地址不重复即可.
因此在网络上, MAC 地址也可以作为是主机身份标识的一种方式.
比如: 有一个网络数据包, 从 A 转发给 B, 转发过程中需要经过 CD
MTU 一个以太网数据帧最大值
以太网, 就属于传输过程中的基础设施.
把物理层比喻成公路, 数据链路层就相当于泡在公路上的卡车,
数据链路层里有很多协议, 不同的协议,相当于不同型号的卡车, 有的卡车载重量大, 有的卡车载重量小, 以太网就属于载重量比较小的(1500
单位是字节)
此时如果想要运输更多的数据,就需要分多个卡车来拉货(IP
协议分包保证)
|
以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!