JavaEE——网络原理(网络层 IP协议与数据链路层)

文章目录

  • 一、详细解释 IP协议
  • 二、解释 TCP 和 IP 之间的联系和区别。
  • 三、IP协议——地址管理
  • 四、数据链路层

一、详细解释 IP协议

注:在这里我向大家描述的 IP协议是 IPv4。
JavaEE——网络原理(网络层 IP协议与数据链路层)_第1张图片
如上图所示,这就是 IP 协议头的格式,下面我会分别解释他们其中每一个部位所包含的含义。

  • 4位版本
    这就是指定 IP 协议的版本,对于 IPv4 而言,就是4。
  • 4位首部长度
    描述了 IP 报头的长度。(IP 报头是一个变长的)
    报头中有一个选项部分,是边长的,可有可无。 此处的单位也是 4 字节。
  • 8 位服务类型
    这里看似说是 8 位,但是实际上只有 4 位是有效的。这 4 位中只有 1 位可以是 1,其余均是 0 。
    这 4 位就表示的是 IP 协议的 四种形态 / 四种工作模式

上述提到的四种形态分别是
最小延时,最大吞吐量,最高可靠性,最小成本
对于上面的 四种形态,实际开发中可以根据不同的需求来切换 IP 的模式,以达到最优效果。

  • 16位总长度(字节数)
    描述了一个 IP 数据报的长度。(头+载荷)
    这里的这个长度减去前面的 IP 报文长度,剩下的就是 载荷长度。(一个完整的 TCP / UDP 数据报长度)

16 位总长度,这是否就意味着一个 IP 数据报,最大只能支持 64kb?
这个限制确实是存在的,但是,IP自身就支持对包的拆分的组装。
简单举例:
发送方: 将 100kb 的数据,交给传输层(封装).网络层就把这个 100kb 的数据进行拆包,(假设拆成两份 64kb + 36kb)。
之后再将这两份数据交给数据链路层,由以太网封装成两个数据帧
接收方: 数据链路层,针对两个数据帧进行分用,得到两个 IP 数据报,交给网络层。网络层针对这两个 IP 数据报进行解析,将里面的载荷拼接成一个,再交给传输层。

  • 16位标识 / 3位标志 / 13位片偏移
    这三点分别表示的是:
    同一个数据拆开的多个包标识相同
    结束标志。
    标识了多个包的先后顺序。
    总的来讲,这里的三点都是辅助 拆包 / 组包。

  • 8 位生存时间(TTL)
    这各代表的是,一个数据报在网络上可以传输的最大时间。
    这里所说的时间单位不是 “秒” 而是 “次数”

当一个数据报被构造出来,就会有一个初始的 TTL 数值(比如 32 或者 64…) 这个数据报每一次经过路由器转发,TTL - 1
如果一直减少到 0 ,还没有到达目标,此时就认为这个包永远无法到达,可以丢弃了

  • 8 位协议
    这里存放的是当前载荷部分的内容是属于那个协议的。(TCP / UDP)

  • 16 位首部校验和
    此处只需要对首部进行校验,载荷部分(TCP / UDP 数据报)自身已经有校验和了。

假设,此处传过来的校验和不一致。
此时数据将会直接丢弃,IP 不负责重传。如果上层使用 TCP,TCP 会在没有收取到 ack 后进行重传。

  • 32 位源IP地址 / 32 位目的IP地址
    IP 地址,是IP协议中最重要的部分。
    这两个地址,分别表示的是发送端和接收端

在我们日常见到的 IP,就是一串数字。这里是将 32 位 4 个字节的数字给分割开来,分成四个部分。每个部分都分别使用 0~255
十进制整数进行表示。

二、解释 TCP 和 IP 之间的联系和区别。

在前面的文章中,我已经向大家解释了在网络传输中 TCP 的相关知识。我们知道,TCP 有一个特点:可靠传输。
呢么,这里就有一个问题,既然 TCP 是进行传输工作的。我们现在介绍的 IP协议,也是进行传输工作的
呢么,这两者之间有什么不一样的地方,这就很值得探讨一下。
区别:
首先,我们先来简单的了解 TCP 和 IP 的区别

  1. TCP:叫做 传输控制协议,面向连接的,端对端的,可靠的,基于IP的 传输层 协议
  2. IP:叫做 因特网协议,位于 网络层,IP 协议规定了数据传输时的基本单位和格式。

JavaEE——网络原理(网络层 IP协议与数据链路层)_第2张图片
如上图所示,这张图是我们在初次认识到网络时就见过的 五层网络模型

通过上面的解释,发现 TCP 和 IP 分别在两个不同的层级
联系:
对此,我们可以通过上面的信息得出两者之间的联系:IP 通过接受来自 (更低层级:数据链路层) 发送过来的数据报,并将该数据报发送到更高层(传输层)——TCP 层;反之,IP 层也可以将 TCP 层的数据报转发到更低层进行传输

总结:
总的来看,TCP 和 IP之间有着明确的分工
IP 提供无连接,不可靠,尽最大的可能将数据报交付的工作。进行主机间的通信。
TCP 则是对数据报进行更精细的加工,面向对应用层提供服务,确保传输的可靠性。

形象的来讲,这就像是我们在网上买快递。
这里的 TCP 就像是 “商家”,对我们的商品进行比较详细的包装 然后递交给 “快递员” ,也就是 IP
同样的,要将这个 “快递包裹”,发送到我们用户的手中,就只需要对上述操作进行反向即可。

UDP 和 TCP 之间的区别不是很大,如果还想要了解整体工作的性质,可以看看这篇文章: JavaEE 网络原理——TCP的工作机制(初篇 包含 UDP 协议的再次阐述)

三、IP协议——地址管理

将一个 IP 地址分为两部分,一个叫网络号,一个叫主机号

  • 网络号: 标识网段,保证相互连接的两个网段具有不同的标识。
  • 主机号: 标识主机,在同一个网段内,主机之间可以有相同的网络号,但是必须要有不同的主机号

简单举例:
如,192.168.0.10 这个 IP 地址。
网络号为:192.168.0
主机号为: 10
以这个 IP 地址组建一个 局域网,呢么,当前局域网下的设备,网络号都为 192.168.0

简单展现一个典型的局域网环境,如图:
JavaEE——网络原理(网络层 IP协议与数据链路层)_第3张图片

通过上图,简单明了的解释了在局域网中,网络号和主机号的用法。但是,在这里,我们又引入了一个新的信息——WAN口 和 LIN口

其实这也不难理解,下面我就简单的解释一下两者的功能。
如图,这就是路由器上的 WAN口 和 LIN口。
JavaEE——网络原理(网络层 IP协议与数据链路层)_第4张图片
WAN口: 主要是用来联系局域网。(往大了将就是连接互联网)
LIN口: 就是将多个用户主机连接到一个局域网中。

到这里,我们已经了解了什么是网络号,什么是主机号。但是还有一个问题,它们两个是怎么界定的?是依据什么来划分的?

其实这里还有一个单独概念——子网掩码
在这里插入图片描述
如图所示,这里的 255.255.255.0 就是子网掩码。将其以二进制的形式表述出来就如下图:
在这里插入图片描述
这里 1 的部分就描述了 IP 有多少位是网络号。
所以,也就是说,网络号不一定就是前三个字节,是可以调整变化的。

四、数据链路层

JavaEE——网络原理(网络层 IP协议与数据链路层)_第5张图片
如上图所示,数字链路层更加接近网络传输的底层逻辑。
明确的来讲,数据链路层所考虑的就是两个节点之间的传输。(也就是通过网线 / 光纤 / 无线,直接连接两个设备)

在这里的典型协议有很多,其中最知名的就是 “以太网协议”
这个协议规定了数据链路层,规定了物理层的内容。
我们日常生活中使用的网线,就叫做 “以太网线”。(就是遵守以太网协议的网线)

图示以太网数据帧,如下:
JavaEE——网络原理(网络层 IP协议与数据链路层)_第6张图片
如上图所示,我们可以得到一个以太网数据帧的格式:
以太网数据帧 = 帧头 + 载荷 + 帧尾

  • 帧头
    这里的帧头包含了三个要素,分别是:目的地址、原地址、类型(这里的类型有三种:IP、ARP、RARP)。

解释说明此处 目的地址、原地址
此处使用的 不是 IP 地址 表示,而是设置了一个 mac 地址

问题1: 这里的 mac 地址是什么?

解释:
这是一个物理地址,这个地址是完全独立的,是另外一套地址体系
大小为 6 字节(相较于 IPV4 地址大很多) 当前的每一个设备都会有一个唯一的 mac 地址
这个地址不是动态分配的,而是网卡在出厂时就已经被设置好了

问题2: 这里的 mac 和 IP 之间是如何相互配合的?

解释:
在这里,IP 地址和 mac 各司其职
IP 在这里宏观描述传输过程的起点和终点
mac 在这里详细描述两个相邻节点的起点和终点怎么走
假设从北京出发到南京
通过网络层(IP),规划出了如下图的路径,选择走那条更合适的路径:
JavaEE——网络原理(网络层 IP协议与数据链路层)_第7张图片
数据链路层(mac)中,就是考虑两个节点之间如何走。
这里我们假设选择
第二条路线
。如图:
JavaEE——网络原理(网络层 IP协议与数据链路层)_第8张图片

  • 载荷
    这里的载荷就是完整的 IP 数据报

  • 帧尾

  • 在这里不是很重要就不再多进行解释了。

你可能感兴趣的:(JavaEE,网络,java-ee,tcp/ip)