当前位置: 首页 > news >正文

【Java ee初阶】初始网络

一、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。

二、端口号

概念

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

简单说:端口号用于定位主机中的进程。

类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式

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

三、协议

概念

协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵守的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。

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

作用

为什么需要协议?

就好比见网友,彼此协商胸口插支玫瑰花见面,这就是一种提前的约定,也可以称之为协议。

计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。

1、计算机生产商有很多;

2、计算机操作系统,也有很多;

3、计算机网络硬件设备,还是有很多;

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

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

五元组

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

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

协议分层

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

什么是协议分层?

协议分层类似于打电话时,定义不同的层次的协议:

分层的作用

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

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

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

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

•对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。这样能更好的扩展和维护。

OSI七层模型

OSI:即Open System Interconnection,开放系统互连

OSI七层网络模型是⼀个逻辑上的定义和规范:把网络从逻辑上分为了7层。

OSI七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传输;

OSI七层模型划分为以下七层:

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

TCP/IP通讯协议采用5层的层级结构,每一层通过调用下一层提供的网络功能完成自身需求。各层功能及特点如下:

应用层

掌握在程序员手中,数据如何使用,由程序员说了算

传输层

不关心中间的传输过程,只关心传输的起点和终点

网络层

负责任意两个节点之间的路径规划

数据链路层

负责两个相邻节点之间的通信,通过网线、光纤、无线信号直接相连的两个设备

物理层

网络通信中以来的硬件设施,网线,光纤,天线等,和程序员的关系不大

网络设备在TCP/IP五层模型中的分层

主机:其操作系统内核实现了从传输层到物理层的内容(TCP/IP五层模型的下四层),考虑应用程序的话,五层都会涉及到;

路由器:实现了从网络层到物理层(TCP/IP五层模型的下三层);

交换机:实现了从数据链路层到物理层(TCP/IP五层模型的下两层);

四、封装

封装和分用

是网络通信中非常关键的环节。

比如,通过qq,发送一个hello给别人:

发送方

1、应用层

用户输入hello,点击“发送按钮”

QQ应用程序能获取到hello字符串

把这个hello构造成“应用层数据包”(按照一定的应用层协议来构造)

应用层协议由很多,每个产品的程序员都是可以“自定义”应用层新协议的。

假设按照下列格式:

发送者的用户id,接受者的用户id,消息的发送时间,消息的正文;

1234,5678,2025-04-13 11:06:00,hello;

实际上过程就是拼接字符串

通过操作系统的API,把这个数据包交给下一层传输层(操作系统内部/内核)

2、传输层(系统内核)

按照传输层的协议,构造出“传输层”数据包

传输层涉及到的协议,主要是TCP和UDP,此处以UDP为例

UDP报头包含源端口和目的端口(还有其他的一些东西)

UDP数据包,包含报头+载荷(应用层数据包)

拼接UDP报头,就类似于快递小哥,包装快递,并且贴标签。

传输层把构造好的传输层的数据包,调用对应的api,交给网络层
*网络协议分层之后,一定是上层调用下层,下层给上层提供服务。不能“乱调”"或者“跨层”调用。

3、网络层
网络层最主要的是“IP协议”
IP协议也会在传输层数据报基础上,填上IP报头

IP报头包括源IP、目的IP。

UDP报头包括源端口、目的端口。

把这个IP数据报,进一步的往下传输给数据链路层

  1. 数据链路层

数据链路层最主要的协议就是“以太网”(插网线/光纤通信的网络),

(wifi 802.11,5G信号,是用的另外一套)

以太网协议,在IP数据报的基础上,拼接上信息

5、物理层需要把上述0101这样的数据,转换成光信号/电信号/电磁波,通过物理介质,传输出去。

从应用层->物理层,整个过程,“封装”把要传输的hello,一层一层的套上很多辅助信息。

五、分用

接收方

1、物理层收到光电信号,把光电信号转换成0101数字信号,交给数据链路层

2、数据链路层

根据以太网协议,就会进行解析

去掉帧头帧尾,取出载荷 进一步的交给网络层

3. 网络层

IP协议 也会进行解析

也会取出载荷,进一步的交给传输层

4. 传输层

UDP协议,再进行解析

也会取出载荷,进一步交给应用层

5. 应用层

QQ的应用层协议进行解析

把这里的信息提取出来,显示到界面上

小结:封装就像是包装快递,分用就像是拆快递

*关于 “协议类型”
传输层报头中,通过端口号,决定数据交给哪个应用程序 (应用层协议类型就确定了)
网络层报头中,有一个字段描述传输层是使用 TCP 还是 UDP

六、两台主机之间的网络通信流程

交换机从物理层到数据链路层进行分用
解析到数据之后,会对数据重新封装,再次发送出去

举个例子,你快递交给快递小哥
快递小哥需要先把快递拿回公司 (往快递上打标签)
快递公司,把这个快递送到下一个 “中转站”
到了中转站,需要卸货,再装上 (也需要重新打标签)

中间的任意一个 “路由器”“交换机” 都是给很多的主机提供服务
转发的数据也是来自于很多主机的。
由于各个主机使用网络存在随机性,可能导致某个时刻,某个设备,需要传输的数据量就特别大

中间的任意一个 “路由器”“交换机” 都是给很多的主机提供服务

转发的数据也是来自于很多主机的。
由于各个主机使用网络存在随机性,可能导致某个时刻,某个设备,需要传输的数据量就特别大

如果转发的数据量
超出了设备能够转发的速度 “上限”,此时就会产生丢包

类似于堵车?
忙不过来了
此时这样的数据包就会被直接丢弃

堵车,多等一会,最终还是能到达的.
网络数据包,就不一定了,具有时效性的

七、网络编程

网络通信数据 报 / 包 / 帧 / 段
会混着用

实现跨主机通信
了解 网络通信 API
主要关心的是 “传输层” 提供的 API

网络传输数据的基本单位
段 (segment) TCP 协议
报 (datagram) UDP 协议
包 (packet) IP 协议
帧 (frame) 数据链路层的协议

咱们写的程序处于应用层。
传输层 => 物理层 都是由操作系统 / 驱动 / 硬件 已经实现好的。
编写网络程序,咱们做的最主要的工作,调用系统 api 把数据交给传输层

传输层提供的 网络通信的 API,也称为 socket api (网络编程套接字)
原义 指的是 “插槽”
最开始是主板上的特殊的组件
通过这个组件,插上线就能网络通信。

关于TCP和UDP,后面详细章节展开讨论。

 TCP: 有连接,可靠传输,面向字节流,全双工。

UDP: 无连接,不可靠传输,面向数据报,全双工。

连接: 网络上的连接,是“虚拟的”“抽象的”  

TCP的通信双方就会保存对方的信息

UDP的通信双方不保存对方的信息(如果需要保存,需要应用层自己写代码实现) 丢包,客观存在 可靠传输就是在对抗丢包

可靠传输 TCP会尽可能保证数据报能够被对端收到

 “可靠不可靠”和“安全不安全”没关系. 不可靠传输 UDP把数据包发出去之后,就不管了

 “TCP不是安全传输” 安全: 数据不容易被黑客截获/破解....

面向字节流 TCP读写数据的基本单位,就是字节(类似于文件操作)

面向数据报 UDP读写数据的基本单位,是一个“数据报”(若干字节构成的结构化数据)

TCP/UDP 全双工 一个信道,双向通信;

半双工 一个信道,单向通信;

相关文章:

  • 接口-DAO模式
  • AI Agent开发之门:微软官方课程全面解析
  • SpringBoot整合PDF导出功能
  • 机器人领域和心理学领域 恐怖谷 是什么
  • WSL部署CosyVoice
  • 零基础入门Hadoop:IntelliJ IDEA远程连接服务器中Hadoop运行WordCount
  • Redis协议与异步方式
  • 编写大模型Prompt提示词方法
  • 问题 | 当前计算机视觉迫切解决的问题
  • LangChain框架-PromptTemplate 详解
  • 2025.5.8总结(中期审视)
  • 关于MySQL 数据库故障排查指南
  • uniapp|获取当前用户定位、与系统设定位置计算相隔米数、实现打卡签到(可自定义设定位置、位置有效范围米数)
  • #define ccw (0)和#define ccw 0什么区别
  • javaer快速从idea转战vscode
  • SpringBoot应急知识学习系统开发实现
  • AI CUBE 使用指南 目标检测格式范例 AI cube 报错数据集不合规范,请清洗数据集
  • 简易的考试系统设计(Web实验)
  • 差分OPA verilogaA 模型
  • uniapp自定义步骤条(可二开进行调试)
  • 马云再次现身阿里打卡创业公寓“湖畔小屋”,鼓励员工坚持创业精神
  • 央行:货币与物价的关系受多重因素影响,提振物价的关键在于扩大有效需求
  • 新华时评:直播间里“家人”成“韭菜”,得好好管!
  • 上交现场配乐4K修复版《神女》:默片巅峰有了新的打开方式
  • 习近平致电祝贺默茨当选德国联邦总理
  • A股高开高走,三大股指涨超1.1%:两市成交1.3万亿元,近5000股收涨