javaEE -9(7000字详解TCP/IP协议)

一: IP 地址

IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。

IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110,通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

1.1 IPv4和IPv6

IP协议有两个版本,IPv4和IPv6。此后,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。对于全世界计算机来说,这个数量是不够的,所以后来推出了IPv6(长度128位,是IPv4的4倍)。但因为目前IPv4还广泛的使用,且可以使用其他技术来解决IP地址不足的问题,所以IPv6也就没有普及。

1.2 IP地址的组成

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

  • 网络号:标识网段(标识一个局域网),保证相互连接的两个网段具有不同的标识;
  • 主机号:标识主机(标识了一个局域网内的主机),同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号;

通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的,那么,我们该如何划分网络号和主机号呢?

过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示:
在这里插入图片描述

类别范围适用网络网络数量主机最大连接数
A0.0.0.0 ~ 127.255.255.255大型网络12616,777,214 (224-2)
B128.0.0.0 ~ 191.255.255.255中等规模网络约16,00065,534 (216-2)
C192.0.0.0 ~ 223.255.255.255小型网络-254 (28-2)
D224.0.0.0 ~ 239.255.255.255---
E240.0.0.0 ~ 247.255.255.255---

请注意,类别 D 和 E 用于特殊用途,不分配给实际的网络和主机,主机最大连接数减去2,是扣除主机号为全0和全1的特殊IP地址。

特殊的IP地址:

  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常127.0.0.1
  • 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

在上述的分类中,存在IP地址浪费的问题:

  1. 单位一般会申请B类网络(C类连接主机数量有限),但实际网络架设时,连接的主机数量又常远小于65534(B类连接主机数),造成IP地址浪费;同理,A类网络的IP地址也会造成大量的浪费。

2.当一个单位申请了一个网络号,并且想将该网络中的IP地址再分给它下属的几个小单位时,那么这将导致IP地址资源的浪费,因为每个下属单位都需要一个独立的网络号,那么这将导致IP地址资源的浪费。

为了解决以上问题,引入子网掩码来进行子网划分。

1.3 子网掩码

子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。

子网掩码的作用:

  1. 划分A,B,C三类 IP 地址子网,

如一个B类IP地址:191.100.0.0,按A ~ E类分类来说,网络号二进制数为16位网络号+16位主机号。

假设使用子网掩码 255.255.128.0(即17) 来划分子网,意味着划分子网后,高17位都是网络位/网络号,也就是将原来16位主机号,划分为1位子网号+15位主机号。

此时,IP地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识(划分子网后的网络号/网段)

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

  1. 网络通信时,子网掩码结合IP地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分子网后的主机号)。一般用于判断目的IP与本IP是否为同一个网段。

对于网络通信来说,发送数据报时,目的主机与发送端主机是否在同一个网段,流程是不一样的。

1.4通过IP地址和子网掩码计算主机号

将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号,IP地址减去网络号,剩下的就是主机号

让我们以一个例子来说明。假设有一个IP地址是192.168.0.100(以点分十进制表示),并且子网掩码是255.255.255.0。我们将它们转换为二进制形式:

通过使用子网掩码进行逻辑运算,我们可以将给定的IP地址分为网络部分和主机部分。以下是具体的步骤:

  1. 将IP地址和子网掩码都转换为二进制形式。

    IP地址:192.168.0.100
    子网掩码:255.255.255.0

    转换为二进制:
    IP地址:11000000.10101000.00000000.01100100
    子网掩码:11111111.11111111.11111111.00000000

子网掩码11111111.11111111.11111111.00000000 意味着划分子网后,高24位都是网络位/网络号,剩下的8为是主机号

  1. 进行逻辑运算(按位与)。

    将IP地址的每一位与子网掩码的对应位进行逻辑与运算。

    IP地址:11000000.10101000.00000000.01100100
    子网掩码:11111111.11111111.11111111.00000000

    网络部分:11000000.10101000.00000000.00000000

  2. 得到网络部分和主机部分的二进制值后,可以将它们转换回十进制形式。

    网络部分:11000000.10101000.00000000.00000000
    主机部分:00000000.00000000.00000000.01100100

    转换为十进制形式:
    网络部分:192.168.0.0
    主机部分:0.0.0.100

通过子网掩码可以将一个IP地址空间划分成多个子网。子网掩码是一个32位的二进制数字,其作用是指示哪些位是网络部分,哪些位是主机部分。

通过使用子网掩码进行地址划分,可以将一个IP地址空间合理地分配给不同的网络和主机。这样就避免了IP地址的浪费,因为每个子网都可以被包含在一个更大的地址范围内,而不需要使用单独的IP地址。

例如,如果我们有一个IP地址段为10.0.0.0/24(子网掩码为255.255.255.0,/24代表子网掩码的长度),这意味着有256个可用的IP地址(从10.0.0.0到10.0.0.255)。如果我们将这个地址空间划分为4个子网,每个子网有64个可用IP地址,那么我们可以使用10.0.0.0/26、10.0.0.64/26、10.0.0.128/26和10.0.0.192/26。

这对于大规模的网络环境尤为重要,因为IP地址是有限的资源,通过子网划分,我们可以更有效地利用IP地址,避免浪费。

二: MAC地址

MAC地址,即 Media Access Control Address,用于标识网络设备的硬件物理地址。

  • 主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址。
  • 网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或从网卡接收数据。
  • 硬件层面,只能基于MAC地址识别网络设备的网络物理地址。

MAC地址用来识别数据链路层中相连的节点,长度为48位,即6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)

MAC地址在网卡出厂时就确定了,不能修改。虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址。

广播数据报:发送一个广播数据报,表示对同网段所有主机发送数据报。广播数据报有一个特殊的MAC地址:FF:FF:FF:FF:FF:FF

2.1 网络数据传输

以下为主机B传输数据到主机C经过的网络设备:
在这里插入图片描述
对于以上经过的网络设备:

  • 主机:配有IP地址,但是不进行路由控制的设备;
  • 路由器:即配有IP地址,又能进行路由控制;
  • 节点:主机和路由器的统称;

集线器和二层交换机不会对数据报封装和分用,不算在下一跳设备。

对于网络数据传输,不是想象中那样,数据直接从源主机到达目的主机,而是类似在地图中,从A到B的过程:

就好比唐僧去西天取经,行程为长安、五指山、黑风山、女儿国……大雷音寺。

IP地址描述的是路途总体的起点和终点:

  • 源IP就是整个行程的起点:长安;
  • 目的IP对应为整个行程的终点:大雷音寺

而行进也必须一个地点一个地点的前进,由MAC地址来描述路途上每一个区间的起点和终点:

  • 从长安到五指山,为一跳的区间,源MAC为长安,目的MAC为五指山;
  • 从五指山到黑风山,为下一跳的区间,源MAC为五指山,目的MAC为黑风山。

2.2 总结IP地址和MAC地址

  • IP地址描述的是路途总体的起点和终点;是给人使用的网络逻辑地址。
  • MAC地址描述的是路途上的每一个区间的起点和终点,即每一跳的起点和终点;是给网络硬件设备使用的网络物理地址。

三:网络设备及相关技术

3.1 集线器:转发所有端口

在这里插入图片描述
集线器是工作在物理层的网络设备,发送到集线器的任何数据,都只是简单的将数据复制并转发到其他所有端口。(端口指集线器后边的物理端口)

在这里插入图片描述

3.2 交换机:MAC地址转换表+转发对应端口

在这里插入图片描述
交换机工作在数据链路层,交换机内部会记录并维护一张MAC地址转换表:

  1. MAC地址转换表主要记录MAC地址与端口之间的映射。(端口指交换机后边的物理端口)
  2. 主机连接到交换机,及主机发送数据的时候,交换机可以学习并记录该主机MAC地址与端口信
    息。
  3. 交换机接收到数据报以后,在MAC地址转换表中,通过目的MAC查找到对应的端口,则目的主机为该端口相连接的主机。只需要将数据报转发到对应端口上即可。

在这里插入图片描述
4. 以上是使用MAC地址转换表,通过目的MAC能找到对应端口的情况;如果找不到,交换机设置数据报目的MAC为广播地址FF:FF:FF:FF:FF:FF,发送到其他所有端口,目的主机返回响应后,交换机再记录该主机MAC与端口的映射信息。

3.3 主机:网络分层从上到下封装

发送数据报时,发送端主机都需要先根据网络分层从上到下封装:
在这里插入图片描述

  • 源IP与目的IP标识整个路途的起点和终点;
  • 源MAC与目的MAC标识了每一跳的起点和终点;

此时还需要根据发送端主机(源主机)与接收端主机(目的主机)是否在同一网段,来设置下一跳设备:

  • 源主机和目的主机在同一个网段时,下一跳设备就是目的主机;
  • 发送端主机和接收端主机在不同网段时,发送端主机是无法知道目的主机在哪,此时会设置下一跳设备为网关设备;

所谓网关,我们这里可以简单理解为,不同网段的网络互连时,需要使用网关设备。

通常的网关设备是路由器,可以划分公网和局域网(内网),同时还可以把局域网划分为多个子网(不同网段),Windows中可以在网络设置中,更改适配器设置查看网关IP:

在这里插入图片描述
以上两种情况,下一跳设备IP地址都可以获取到,但该设备的MAC地址(即目的MAC)可能不知道,就需要使用以下ARP寻址:

3.4 主机&路由器:ARP缓存表+ARP寻址

首先,ARP是一个介于数据链路层和网络层之间的协议;ARP协议建立了IP地址与MAC地址的映射关系,在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址:

  1. 主机和路由器中都保存了一张ARP缓存表:通过IP地址可以找到对应的MAC地址。
  2. 根据下一跳设备的IP地址,在ARP缓存表中能找到对应的MAC地址,则可以设置目的MAC并发送
    数据报。
  3. 如果找不到,则发送ARP广播数据报:目的MAC为广播地址,询问下一跳设备的MAC地址。

这个过程类似于QQ群喊话:张三(下一跳设备IP地址),我要给你发快递(发送数据报),请告诉我你的收货地址(MAC地址)。参见以下流程:
在这里插入图片描述

3.5 路由器:路由+NAPT

路由器主要有两个作用:

  1. 网关

公网是指连接全球范围的互联网,它由各种网络设备和基础设施组成,用于在全球范围内实现信息传输和数据交换。公网可以被任何人访问和使用,例如访问网站、发送电子邮件、视频通话等。

子网是指在一个大的网络中划分出来的较小网络。一个IP地址由两部分组成:网络部分和主机部分。子网允许对大型网络进行细分管理,并提供更高效的数据传输和资源分配。通过在网络中定义子网掩码,可以确定IP地址的网络部分和主机部分。

路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网(不同网段,家庭用的路由器不能划分局域网子网,企业级专业路由器才能划分。)

公网端口即WAN口,为单独的网卡,具有公网IP地址和公网MAC地址。划分的多个子网,是由局域网端口即LAN口划分,每个端口都有单独的网卡,具有该网段IP地址和MAC地址。
在这里插入图片描述
路由器作为网关:

  1. 划分局域网多个子网时,可以直接通过ARP寻址找到局域网任意主机。(这里的局域网就是路由器下的多个子网组成的局域网)。
  2. 划分公网和局域网时,局域网内主机发送数据报到公网主机时,需要基于NAPT协议,将局域网主机的IP地址和端口号,转换为路由器公网IP和端口号(指路由器中运行的程序的端口)。

局域网IP+端口需要转换为公网IP+端口,原因是接收端返回的响应数据报,目的IP和目的端口无法使用局域网IP和端口。

  1. 路由

所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。

3.6 冲突域

主机之间通过网络设备(集线器、交换机)的物理端口、网线相连时,两个主机在同一时刻同时发送数据报,如果存在冲突,则该网络范围为一个冲突域(Collision Domain)。

冲突域是基于第一层物理层,又称为碰撞域。

  • 所谓的冲突,类似两个人(主机)在一个房间(网络范围)同时说话,导致房间内其他人无法听清讲话的内容,即产生了冲突。

  • 冲突域中的网络通信,要解决冲突,就得按时间顺序来发送多个数据报:同一时刻,网络设备只能接收并转发一个数据报,多余的会丢弃,让发送端主机重新发送。

集线器接收到数据报后,是将数据报简单的复制、转发到其他所有端口,如果有两个数据报要同时转发,就会出现冲突。整个集线器,即集线器的所有端口为一个冲突域。

在这里插入图片描述
交换机接收到数据报后,是将数据报转发到对应的一个端口:两个数据报同时转发到不同端口不存在冲突,但同时转发到一个端口就出现冲突。即交换机可以分割冲突域,分割后,一个端口为一个冲突域。
在这里插入图片描述

3.7 广播域

广播是指某个网络中的主机同时向网络中其它所有主机发送数据(IP、MAC地址设置为广播地址),这个数据所能传播到的范围即为广播域(Broadcast Domain)。

广播域基于第二层数据链路层。

  • 集线器接收到广播数据报,仍是简单的复制、转发到其他所有端口,所以集线器的所有端口为一个广播域。
    在这里插入图片描述
  • 交换机接收到广播数据报,会转发到其他所有端口;而路由器可以隔离广播域

路由器某个LAN口网卡接收到广播数据报,如果发现是同网段,则丢弃,即广播数据不会扩散到路由器以外。

在这里插入图片描述

3.8 网络数据传输流程

3.8.1 局域网传输流程:集线器

使用集线器网络互联的情况下,发送端主机发送数据包时,需要先从上到下封装数据报。但封装时,目的MAC可能并不知道,需要先进行ARP寻址:

  1. 发送端在本机ARP缓存表中,根据目的IP查找对应的MAC地址
  2. 如果找到,则可以在数据链路层以太网帧头中,设置目的MAC并发送数据包
  3. 如果没有找到,需要先发送ARP广播请求,让接收端,即目的主机告诉自己,目的MAC是多少
  4. 发送端更新本机ARP缓存表:保存目的IP与目的MAC的映射
  5. 有了目的MAC,就可以按照第(2)个步骤发送数据了。

在这里插入图片描述
如果本机ARP缓存表中找不到目的MAC,则需要先发送广播请求:
在这里插入图片描述

3.8.2 局域网传输流程:交换机

在这里插入图片描述

3.8.3 局域网传输流程:交换机+路由器

在这里插入图片描述

3.8.4 广域网数据传输流程

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/121388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用pycharm远程连接到Linux服务器进行开发

预计达到的效果 本地的 PyCharm 能达到和远程服务器之间的文件同步;本地的 PyCharm 能够使用远程服务器的开发环境; 环境配置 PyCharm:PyCharm 2021.3 (Professional Edition)Linux服务器:Ubuntu20.04 步骤 1.进入配置项 配…

Python 算法高级篇:桶排序与基数排序

Python 算法高级篇:桶排序与基数排序 引言什么是桶排序?桶排序的基本步骤桶排序的示例 什么是基数排序?基数排序的基本步骤基数排序的示例 桶排序与基数排序的应用桶排序的应用基数排序的应用 Python 示例代码总结 引言 在算法高级篇的课程中…

从设计、制造到封测,XSKY 智能存储助力半导体行业数字化转型

近日,ECS2023 第五届中国电子通信与半导体 CIO 峰会在深圳召开,峰会以“数字科技与业务重塑”为主题,汇聚了 300来自电子通信与半导体行业知名企业高管、CIO、信息化与数字化负责人,交流电子通信与半导体行业的创新的产品和解决方…

【排序】js简单实现前端数组排序,多字段数组对象排序,字符串排序,数字排序等

数组对象排序(多字段排序) 排序前: 排序后: data() {return {list: [{ks: 外科,child_ks: 泌尿外科,xz: 外科一组,doctor: 小明,num: 18,num2: 19,num3: 20},{ks: 中医科,child_ks: 中医男科,xz: 外科一组,doctor: 小红,num: …

Hadoop、Hive安装

一、 工具 Linux系统:Centos,版本7.0及以上 JDK:jdk1.8 Hadoop:3.1.3 Hive:3.1.2 虚拟机:VMware mysql:5.7.11 工具下载地址: https://pan.baidu.com/s/1JYtUVf2aYl5–i7xO6LOAQ 提取码: xavd…

ORACLE-递归查询、树操作

1. 数据准备 -- 测试数据准备 DROP TABLE untifa_test;CREATE TABLE untifa_test(child_id NUMBER(10) NOT NULL, --子idtitle VARCHAR2(50), --标题relation_type VARCHAR(10) --关系,parent_id NUMBER(10) --父id );insert into untifa_test (CHILD_ID, TITLE, RELATION_TYP…

SpringBoot整合Gateway 的Demo(附源码)

源码&#xff0c;可直接下载 Gateway模块 Gateway 的父pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sc…

vue核心面试题汇总【查缺补漏】

给大家推荐一个实用面试题库 1、前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;web前端面试题库 很喜欢‘万变不离其宗’这句话&#xff0c;希望在不断的思考和总结中找到Vue中的宗&#xff0c;来解答面试官抛出的…

2023MathorCup(妈妈杯) 数学建模挑战赛 解题思路

云顶数模最新解题思路免费分享~~ 2023妈妈杯数学建模A题B题思路&#xff0c;供大家参考~~ A题 B题

对mysql的联合索引的深刻理解

背景 对mysql的联合索引的考察是Java程序员面试高频考点&#xff01;必须深刻理解掌握否则容易丢分非常可惜。 技术难点 考察对最左侧匹配原理理解。 原理 暂且不表。网上讲这非常多。我理解就是&#xff0c;B树每个非叶子节点的值都是有序存放索引的值。 比如对A、B、C …

物联网和互联网医院小程序:如何实现医疗设备的远程监测和管理?

物联网&#xff08;IoT&#xff09;技术的发展为医疗设备的远程监测和管理提供了巨大的机会。结合互联网医院小程序&#xff0c;我们可以实现对医疗设备的远程访问、监控和管理&#xff0c;从而提高医疗服务的质量和效率。本文将介绍如何实现医疗设备的远程监测和管理&#xff…

appium操控微信小程序的坑

appium操控微信小程序的坑 打不开启动页面driver的context只有NATIVE_APP小程序上元素找不到 我打算使用appium操控微信小程序&#xff0c;只要能够获取到小程序的页面元素就算成功。下面都是我遇到的问题。 打不开启动页面 以下是我的appium的配置参数和代码&#xff1a; de…

Hyperledger Fabric搭建测试网络

本文使用的Fabric版本&#xff1a;V2.5.4 Ubuntu系统&#xff1a;16.04LTS 前序文章已经详细介绍了如何安装部署Hyperledger Fabric系统&#xff0c;这里不再赘述。本篇文章主要介绍如何使用Fabric的测试网络。在正式开始之前&#xff0c;有一点需要说明&#xff1a; Hyperled…

24 行为型模式-访问者模式

1 访问者模式介绍 访问者模式在实际开发中使用的非常少,因为它比较难以实现并且应用该模式肯能会导致代码的可读性变差,可维护性变差,在没有特别必要的情况下,不建议使用访问者模式。 2 访问者模式原理 3 访问者模式实现 我们以超市购物为例,假设超市中的三类商品: 水果,糖…

JVM(二)

一,运行时数据区 Java虚拟机在运行Java程序过程中管理的内存区域,称之为运行时数据区。 1.1 程序计数器 程序计数器(Program Counter Register)也叫PC寄存器,每个线程会通过程序计数器记录当前要执行的的字节码指令的地址。 在加载阶段,虚拟机将字节码文件中的指令读取…

多线程面试相关知识点

文章目录 (一) 进程线程和协程的区别创建线程的4种方式1. 继承Thread类2. 实现runnable接口3. 实现Callable接口4. 线程池创建 runnable 和 callable 有什么区别线程的 run()和 start()有什么区别&#xff1f;线程之间的状态变化notify()和 notifyAll()有什么区别&#xff1f;j…

HPV感染的风险:闫会宁主任分析酒店环境中的常见因素

人类乳头瘤病毒(HPV)是一种普遍存在的病毒&#xff0c;其存在和传播方式多种多样。近年来&#xff0c;人们对于HPV的认识不断深入&#xff0c;知道其在酒店环境中的传播风险。本文将探讨哪些情况下在酒店可能感染HPV。 一、HPV的传播方式 HPV主要通过直接接触传播&#xff0c…

数据湖Iceberg介绍和使用(集成Hive、SparkSQL、FlinkSQL)

文章目录 简介概述作用特性数据存储、计算引擎插件化实时流批一体数据表演化&#xff08;Table Evolution&#xff09;模式演化&#xff08;Schema Evolution&#xff09;分区演化&#xff08;Partition Evolution&#xff09;列顺序演化&#xff08;Sort Order Evolution&…

python:使用Scikit-image对遥感影像进行梯度特征提取(gradient)

作者:CSDN @ _养乐多_ 在本博客中,我们将介绍如何使用Scikit-Image来进行梯度特征提取(gradient),并且提供一个示例代码,演示了如何在单波段遥感图像上应用这些方法。 梯度特征是指用于表示图像中亮度或颜色变化的特征。它包括两个关键成分:梯度幅值和梯度方向。梯度幅…

RabbitMQ (4)

RabbitMQ (4) 文章目录 1. 死信的概念2. 死信的来源3. 死信代码案例3.1 TTL 过期时间3.2 超过队列最大长度3.3 拒绝消息 前言   上文我们已经学习完 交换机 &#xff0c;知道了几个交换机的使用 &#xff0c;下面我们来学习一下 死信队列 1. 死信的概念 先从概念解释上搞清楚这…