【JavaEE】网络原理:网络中的一些基本概念

目录

[1. 网络通信基础](#1. 网络通信基础)

[1.1 IP地址](#1.1 IP地址)

[1.2 端口号](#1.2 端口号)

[1.3 认识协议](#1.3 认识协议)

[1.4 五元组](#1.4 五元组)

[1.5 协议分层](#1.5 协议分层)

什么是协议分层

分层的作用

OSI七层模型

TCP/IP五层(或四层)模型

网络设备所在分层

网络分层对应

封装和分用


1. 网络通信基础

1.1 IP地址

概念: 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.2 端口号

概念: 在网络通信中,IP地址用于标识主机的网络地址,而端口号用于标识主机中发送数据、接收数据的进程。

简单说,端口号用于定位主机中的进程。IP地址可以看作是主机的地址,而端口号可以看作是进程的门牌号。通过IP地址可以找到目标主机,通过端口号可以找到目标主机中的具体进程,从而实现数据的发送和接收。

**格式:**端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收网络数据。

问题:

有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串"你好!"; 如何标识发送的数据是文本类型,及文本的编码格式呢?

基于网络数据传输,需要使用协议来规定双方的数据格式。

1.3 认识协议

概念

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵

从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

协议(protocol)最终体现为在网络上传输的数据包的格式.

作用

计算机之间的传输媒介是光信号和电信号。通过"频率"和"强弱"来表示0和1这样的信息。要想传递

各种不同的信息,就需要约定好双方的数据格式。

  • 计算机生产厂商有很多;
  • 计算机操作系统,也有很多;
  • 计算机网络硬件设备,还是有很多;

如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?

就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是网络协议;

网络协议是网络通信中的基础,它定义了网络中数据的传输方式和规则,确保数据能够安全、可靠地在网络中传输和交换。

1.4 五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

  1. 源IP: 标识源主机
  2. 源端口号: 标识源主机中该次通信发送数据的进程
  3. 目的IP: 标识目的主机
  4. 目的端口号: 标识目的主机中该次通信接收数据的进程
  5. 协议号: 标识发送进程和接收进程双方约定的数据格式

五元组在网络通信中的作用,类似于发送快递:

可以在cmd中,输⼊ netstat -ano 查看网络数据传输中的五元组信息:

1.5 协议分层

对于网络协议来说,往往分成几个层次进行定义。

什么是协议分层

协议分层是将网络协议按照不同的功能和层次进行分组和组织的一种方式。它将复杂的网络通信过程划分为多个层次,每个层次负责特定的功能和任务。每个层次都建立在下一层的基础上,并为上一层提供服务。这种分层的结构使得网络协议的设计、实现和维护更加灵活和可扩展。

分层的作用

为什么需要网络协议的分层?

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用

类(使用方,使用服务) :

●对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可

●对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可

这样能更好的扩展和维护,如下图:

OSI七层模型

OSI(Open Systems Interconnection)七层模型是一种标准的网络协议分层模型,用于描述计算机网络中不同层次的功能和任务,是一个理论上的框架,用于指导和标准化网络协议的设计和实现。

以下是OSI七层模型的各个层次及其功能:

  1. 物理层(Physical Layer):负责传输比特流,将数据从源设备传输到目标设备,包括传输媒介、电压等物理特性。

  2. 数据链路层(Data Link Layer):提供可靠的数据传输,负责将比特流划分为数据帧,进行错误检测和纠正,并控制数据在物理媒介上的访问。

  3. 网络层(Network Layer):负责数据包的路由选择和转发,实现数据在不同网络之间的传输,包括寻址、路由和拥塞控制等功能。

  4. 传输层(Transport Layer):提供端到端的可靠数据传输,负责分段和重组数据,确保数据的完整性和顺序性,包括流量控制和差错恢复等功能。

  5. 会话层(Session Layer):管理和协调应用程序之间的会话,负责建立、维护和终止会话连接,包括对话控制和同步等功能。

  6. 表示层(Presentation Layer):负责数据的格式化和编码,实现不同设备和系统之间的数据转换和兼容性,包括数据加密和压缩等功能。

  7. 应用层(Application Layer):提供网络服务和应用程序的接口,负责处理特定的应用协议和数据,包括电子邮件、文件传输和远程登录等功能。

每个层次都建立在下一层的基础上,并为上一层提供服务。通过这种分层的设计,OSI模型实现了网络协议的模块化和可管理性,使得不同厂商和组织可以根据这个模型进行协议的设计和实现,实现互操作性和可扩展性。

OSI七层模型既复杂又不实用: 所以OSI七层模型没有落地、实现。

实际组建网络时,只是以OSI七层模型设计中的部分分层,也即是以下TCP/IP五层(或四层)模型来实现。

TCP/IP五层(或四层)模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

  • **应用层:**负责应用程序间沟通,如简单电子邮件传输(SMTP) 、文件传输协议(FTP) 、网络远程访问协议(Telnet) 等。我们的网络编程主要就是针对应用层。
  • **传输层:**负责两台主机之间的数据传输。如传输控制协议(TCP), 能够确保数据可靠的从源主机发送到目标主机。
  • **网络层:**负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由) 。路由器(Router) 工作在网路层。
  • **数据链路层:**负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch) 工作在数据链路层。
  • 物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub) 工作在物理层。

物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。

网络设备所在分层

  • 对于一台主机 ,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;
  • 对于一台路由器 ,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
  • 对于一台交换机 ,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
  • 对于集线器 ,它只实现了物理层 ;

注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两层)、三层路由器(工作在TCP/IP五层模型的下三层)。

随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机, 4层路由器。我们以下说的网络设备都是传统意义上的交换机和路由器。

网络分层对应

网络数据传输时,经过不同的网络节点(主机、路由器)时,网络分层需要对应。

封装和分用

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有 多长,上层协议是什么等信息。
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理。

下图为数据封装的过程

下图为数据分用的过程

下面示对封装和分用过程的一个举例:

分用

相关推荐
初九之潜龙勿用几秒前
C#校验画布签名图片是否为空白
开发语言·ui·c#·.net
爪哇学长14 分钟前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法
Dola_Pan17 分钟前
C语言:数组转换指针的时机
c语言·开发语言·算法
ExiFengs18 分钟前
实际项目Java1.8流处理, Optional常见用法
java·开发语言·spring
paj12345678919 分钟前
JDK1.8新增特性
java·开发语言
IT古董26 分钟前
【人工智能】Python在机器学习与人工智能中的应用
开发语言·人工智能·python·机器学习
繁依Fanyi30 分钟前
简易安卓句分器实现
java·服务器·开发语言·算法·eclipse
慧都小妮子41 分钟前
Spire.PDF for .NET【页面设置】演示:打开 PDF 时自动显示书签或缩略图
java·pdf·.net
m51271 小时前
LinuxC语言
java·服务器·前端
IU宝1 小时前
C/C++内存管理
java·c语言·c++