【javaEE】网络原理初识

前言:本篇将简单介绍一下网络通信相关的概念

一,网络通信的本质

网络通信的本质是通过网络传输数据

如果拿生活中的寄快递的例子来类比,发送数据好似寄快递,接受数据就好似收快递。网络通信描述了数据如何在网络上传输。

数据发送的主动和被动,决定的谁是客户端,谁是服务端

主动发送请求的是客户端,接收处理请求的是服务端

二,通信的三要素

正如生活中寄快递需要遵循一定的规则,填写寄件地址,电话号码等等,通信也是如此。网络通信需要遵循三要素,分别是IP地址,端口号以及协议。

(一)IP地址

IP地址标识着一台主机在互联网中所处的位置

IP又可以分为两大类

1.IPv4

IPv4 (Internet Protocol version 4) 是互联网协议的第四个版本,也是目前全球使用最广泛的协议。

  • 地址格式: 采用 32 位(bit)二进制地址,通常用"点分十进制"表示(例如:192.168.1.1)。

  • 地址空间: 理论上拥有 2^32 个地址,约 43 亿个

  • 局限性: 随着智能手机、物联网设备的普及,43 亿个地址早已分配殆尽。目前主要通过 NAT (网络地址转换) 技术,让多个设备共用一个公网 IP 来缓解枯竭问题。

2.IPv6

IPv6 (Internet Protocol version 6) 被设计用来彻底解决 IPv4 地址枯竭的问题,被称为"下一代互联网协议"。

  • 地址格式: 采用 128 位二进制地址,通常用"冒号十六进制"表示(例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334)。

  • 地址空间: 拥有 2^128 个地址。这个数字大到可以为地球上的每一粒沙子分配一个独立的 IP 地址。

  • 优势:

    • 无需 NAT: 每个设备都可以拥有唯一的全球公网 IP。

    • 更安全: 在设计之初就原生支持 IPsec 加密。

    • 更高效: 简化了数据包首部结构,提高了路由转发效率

(二)端口号

如果把IP地址类比于生活中的地址,那么端口号就好比门牌号。有了它数据才能知道要运输到哪一个应用程序。常见的端口号有mysql的3306(默认端口号,可以修改)以及web的80端口

可能有人对端口和IP的功能无法区分,以下为简单介绍。

IP地址描述的是一台主机在互联网中所处的位置,但是端口号决定了数据要发送给电脑上的哪一个应用程序。假如你通过QQ给朋友发送信息,由于端口号存在,你不可能把信息发送到对方的微信程序,音乐程序上。

可以说IP地址和端口号共同作用,好似寄快递时的寄件,收件地址,寄件人和收件人。确保了数据在网络上的正确传输

(三)协议

1.什么是协议

通俗来讲,协议可以视为一种约定。一套双方都需要遵守的规则。

2.协议的作用

数据在网络是二进制bit流的形式传输,本质不变,但是解析方式却由协议来决定。

协议就是一套约定bit流代表什么含义的规则

为什么还要有这规则?直接读取bit流不可以吗?

设想一种情况,我写了一个java程序,发送给对方,但是另一个人确尝试来使用C来解析,那自然会读取失败,(即使两者的代码都是由英文字母编写)在打电话的时候,我讲中文,你说日语,这样也无法做到顺利沟通。

在数据的传输中,需要经过多层协议,应用层->网络层->传输层->数据链路层->物理层,每一层都对应的一套协议。只有遵循协议,数据才能被识别,顺利传输

三,协议分层

(一)为什么要协议分层?

协议分层的目的是为了解耦合

协议分层,使得数据传输的流程之间互不干扰。使用一个整体的协议来约定整个传输流程过于复杂且难以维护。假如出了一点bug你不能知道是(物理层)网线断了还是(应用层)代码逻辑写错了。

(二)OSI七层模型

协议的种类很多,按照协议的功能可以划分为(开放系统互联)OSI七层模型

1. 物理层 (Physical Layer)

这是模型的最底层,处理物理介质上的比特流(0和1)。电信号的电压数值,依据波的频率对其做一个区域划分,不同的区域分别代表着0和1,这样就可以通过有线/无线设备来传输二进制bit流。

  • 功能:透明地传送比特流。

  • 物理设备:网线、中继器、集线器、光纤。

这一层负责在相邻节点 之间建立物理连接。它将比特组合成""(Frame),并通过 MAC 地址来寻址。

  • 功能:差错控制、流量控制、成帧。

  • 代表协议:以太网(Ethernet)、Wi-Fi (802.11)、PPP。

  • 物理设备:网桥、二层交换机。

3. 网络层 (Network Layer)

网络层决定了数据从发送端到接收端的路径选择 (路由)。它处理的是"数据包"(Packet),使用 IP 地址进行逻辑寻址。

  • 功能:路由选择、拥塞控制、网际互连。

  • 代表协议:IP、ICMP、ARP、IGMP。

  • 物理设备:路由器、三层交换机。

4. 传输层 (Transport Layer)

传输层是第一个端到端(主机到主机)的层次,负责确保数据完整、准确地到达目标。它处理的是""(Segment)。

  • 功能:提供可靠或不可靠的传输、端到端的错误恢复和流量控制。

  • 代表协议TCP (可靠、面向连接)、UDP(不可靠、无连接)。

5. 会话层 (Session Layer)

这一层负责建立、管理和终止应用程序之间的会话。它就像是通话中的"挂断"和"重拨"机制。

  • 功能:建立同步点,确保通信中断后可以从断点继续。

  • 代表协议:RPC、SQL、NFS。

6. 表示层 (Presentation Layer)

表示层处理数据的格式化、加密和压缩。它确保一个系统的应用层发出的信息能被另一个系统的应用层识别。

  • 功能:数据转换(如 EBCDIC 转 ASCII)、数据加密和解密、压缩和解压。

  • 代表格式:JPEG、ASCII、GIF、DES。

7. 应用层 (Application Layer)

这是直接面向用户的最高层,为应用程序提供网络服务接口。

  • 功能:直接为用户的应用进程提供服务。

  • 代表协议:HTTP、FTP、SMTP、DNS、Telnet。

(三)TCP/IP 五层模型

五层模型相对于OSI七层模型的最大特点是把上三层(会话层,表示层,应用层)合并为一个应用层。五层模型也是被广泛应用的模型

四,封装与分用

(一)封装

是指数据从应用层向下逐渐添加报头的过程。好比给快递包装的过程,也可以认为是一个在数据传递的过程中,数据不断变大的过程

要注意封装的过程中,不能跨层调用,比如应用层不能去调用网络层,需要先经过运输层这个中介来对数据封装处理。封装的过程是下层为上层提供服务,上层调用下层提供的服务。网络层到一下协议层未提供服务给应用层,所以不能直接调用,这一点有点类似于操作系统对API的封装

当数据从应用层发出,每一层都会给它加上一个"信封"(首部/Header),让数据承载更多的控制信息。这个过程就像俄罗斯套娃,一层套一层。

第一步:应用层(Application Layer)
  • 动作: 浏览器生成 HTTP 请求报文。

  • 数据状态: 原始数据(Payload)。

  • 关键信息: GET / HTTP/1.1 等内容。

第二步:传输层(Transport Layer)
  • 动作: 操作系统收到数据,根据应用层指定的协议(TCP),在数据前面加上 TCP 首部

  • 数据变身: 此时数据被称为 "段" (Segment)

  • 关键信息:

    • 源端口(比如 54321):标识发送数据的浏览器进程。

    • 目的端口(通常 80):标识服务器上的 Web 服务进程。

第三步:网络层(Network Layer)
  • 动作: IP 协议接手 TCP 段,在前面加上 IP 首部

  • 数据变身: 此时数据被称为 "数据报" (Datagram/Packet)

  • 关键信息:

    • 源 IP 地址: 用户 A 的地址。

    • 目的 IP 地址: 服务器 B 的地址。

    • 协议号: 标记里面包的是 TCP 数据(告诉接收方一会怎么拆)。

  • 动作: 网卡驱动程序在 IP 数据报的前面加上 以太网帧头 ,在后面加上 帧尾(FCS,用于校验数据是否损坏)

  • 数据变身: 此时数据被称为 "帧" (Frame)

  • 关键信息:

    • 源 MAC 地址: 自己网卡的物理地址。

    • 目的 MAC 地址: 下一跳设备(通常是路由器或网关)的 MAC 地址。

第五步:物理层(Physical Layer)
  • 动作: 将"帧"转换成光电信号(010101...),通过网线或无线电波发送出去。

以下是一个简化的不同协议层对传输数据的封装过程:

(二)分用

数据分用是对上述封装过程的逆向,当数据传输到服务器时,服务器需要对层层包装的数据来拆除报头,解析数据等操作,这一些列过程也就是分用,可以理解为一个拆快递的步骤

当数据到达服务器 B 后,是一个逆向过程。但分用不仅仅是"拆",更重要的是根据标识,决定把数据交给上一层的谁。

第一步:物理层 -> 数据链路层
  • 动作: 网卡还原电信号为数据。

  • 分用依据: 检查以太网帧头中的类型字段(Type)。如果是 0x0800,说明里面装的是 IPv4 数据,于是把数据剥去帧头帧尾,交给网络层处理。

第二步:网络层 -> 传输层
  • 动作: IP 协议解析 IP 首部。

  • 分用依据: 检查 IP 首部中的 "协议号" (Protocol) 字段。

    • 如果是 6,说明是 TCP,交给 TCP 协议处理。

    • 如果是 17,说明是 UDP,交给 UDP 协议处理。

    • (这里就是"分用"的关键:IP层通过协议号区分上层协议)。

  • 结果: 剥去 IP 首部,露出 TCP 段。

第三步:传输层 -> 应用层
  • 动作: TCP 协议解析 TCP 首部,进行确认应答、排序等操作。

  • 分用依据: 检查 TCP 首部中的 "目的端口号"

    • 发现端口是 80,操作系统查找哪个进程正在监听 80 端口(通常是 Tomcat/Nginx/Apache)。
  • 结果: 剥去 TCP 首部,将原始数据放入该进程的接收缓冲区。

第四步:应用层
  • 动作: Web 服务器程序从缓冲区读取数据,解析出 GET /index.html,开始处理业务逻辑。

在这一些列的封装和分用的过程中,也要注意上下层的传输逻辑

1.在封装的过程中,上层调用下层的服务,给数据头累积添加包装,数据体增大

2.分用是对数据包装的拆解,在拆解的过程中,通过拿到外层头部的信息标识。这个标识决定的数据之后要给哪一层的协议处理

以上就是对网络原理中的一些基本概念的简单介绍,如有纰漏还请指出

相关推荐
树℡独4 小时前
ns-3仿真之应用层(一)
网络·ns3
一起养小猫4 小时前
Flutter for OpenHarmony 实战:网络请求与JSON解析完全指南
网络·jvm·spring·flutter·json·harmonyos
爱吃大芒果4 小时前
Flutter for OpenHarmony实战 : mango_shop API 客户端的封装与鸿蒙网络权限适配
网络·flutter·harmonyos
吠品4 小时前
IP证书-SSL证书申请
网络·网络协议·tcp/ip
四月_h4 小时前
vue2项目集成websocket
网络·websocket·网络协议
相思难忘成疾4 小时前
华为HCIP:MPLS实验
网络·华为·智能路由器·hcip
CS创新实验室4 小时前
《计算机网络》深入学:IPv4 协议架构与演进
网络·计算机网络·架构·ipv4
坐怀不乱杯魂5 小时前
Linux网络 - UDP/TCP底层
linux·服务器·网络·c++·tcp/ip·udp
DevilSeagull5 小时前
HTTP/HTTPS数据包拓展
网络·网络协议·http·https·web渗透·we