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

JavaEE——网络通信基础

JavaEE传送门

JavaEE

线程安全的集合类

JavaEE——死锁(看图轻松理解哲学家就餐问题)


目录

  • 网络通信基础
    • IP 地址
    • 端口号
    • 认识协议
      • 协议分层
      • 封装和分用
        • 封装
        • 分用


网络通信基础

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

  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

  • 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。


端口号

概念

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

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

格式

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

# 注意 #

两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。

了解:

  • 一个进程启动后,系统会随机分配一个端口(启动端口)

  • 程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。

  • 进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号.


认识协议

概念

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

  1. 语法:即数据与控制信息的结构或格式;
  2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
  3. 时序,即事件实现顺序的详细说明。

网络通信中, 主机之间, 传输的数据本质上是 光信号电信号.

比如:

可以约定, 低电平为 1, 高电平为 0

只要通信双方都遵守这个约定, 就可以进行数据传输了.

网络通信中, 中间的过程是非常复杂的, 要进行的约定的协议, 也就要考虑到很多的细节了, 就会导致协议变的非常复杂.

我们通常把功能大的复杂的协议, 拆分成功能单一的小的协议. (由于太复杂了, 导致拆分出来的协议太多了)

这时, 我们把这些小的协议, 按照所对应的功能, 进行分类, 把功能类似的协议, 分成一类.


协议分层

我们将这些协议分成很多层, 同时我们规定:

  • 上层协议调用下层协议
  • 下层协议给上层协议提供服务
  • 不能隔层调用

分层就是加上了限定条件, 就是为了这些协议之间不要太灵活.

协议分层的好处

  1. 封装. 学习理解的成本更低.
  2. 方便维护. 尤其是可以针对某层协议进行替换.

当前网络分层, 有两种典型的分法:

  1. OSI 七层模型
  2. TCP/ IP 五层(四层) 模型

摘自: 《计算机网络(第7版)》-谢希仁

TCP/ IP 五层(四层) 模型

  • 应用层: 应用程序. 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。

  • 传输层: 端到端的传输. 负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。

  • 网络层: 点到点的传输. 负责地址管理和路由选择。 例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。

  • 数据链路层: 相邻节点之间的传输. 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。

  • 物理层: 底层基础设施. 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。

  • 数据链路层和物理层, 是硬件和驱动实现的
  • 运输层和网络层, 是操作系统内核实现的
  • 应用层, 是我们自己代码写的

封装和分用

假设如下场景: 主机 A 通过 QQ 给主机 B 发送 “Hello Gujiu! !”

封装

主机 A 的发送过程

  • 应用层 (QQ 应用程序)

    QQ应用程序会把用户输入的字符串构造成约定好的应用层协议的报文.QQ 应用程序就会把这个应用数据报, 交给传输层协议, 来进一步处理.

  • 传输层 (传输层是操作系统内核实现的, 操作系统就会提供一些 API 给应用程序, 代码里调用系统的 API , 就可以把应用层的数据交给传输层[交给了操作系统内核])

    传输层这里可能有很多协议, 其中最典型的就是 TCP 协议. (此处以 TCP 为例)

    TCP 协议要在之前数据的基础上, 加上一个 TCP 协议的报头.

  • 网络层 网络层中最典型的就是 IP 协议 (构造好 IP 数据报之后, IP 协议继续吧整个数据交给数据链路层)

  • 数据链路层 其中的协议也有很多, 其中最典型的就是 “以太网”(电脑上插网线, 这个网线也叫做"以太网线", 对应的网线也就是遵守这个协议).

  • 物理层 数据已经组织好, 就通过物理层的设备 (网卡) 就把上述数据的二进制 bit 流, 转换成 光信号/ 电信号 并进行传输.

# 注意 # 上述, 数据从上到下, 层次添加信息的过程, 就成为 “封装”.

小知识: API (application programming interface)

应用程序编程接口. API 就是一组类/ 方法, 别人写好, 咱们直接调用

  • 像集合类, Random, Scanner, IO流 都是 Java 标准库给咱们提供的 API
  • 像 JDBC , 则是 mysql 给咱们提供的 API
  • 操作系统也会给咱们提供 API.

分用

分用就是封装的逆过程

此时省略中间的传输过程, 假定, 数据已经到达了接收端主机.

主机 B 的接收过程

  • 物理层 接收方的网卡这样的硬件设备就收到了 光信号/ 电信号 , 就把这个信号转成了二进制的 bit 数据. 接下来这个数据就被交给数据链路层, 由以太网协议负责解析.

  • 数据链路层 当前拿到了一个以太网数据帧, 由以太网协议, 去掉帧头和帧尾, 取出载荷部分. 把取出的载荷交给网络层.

  • 网络层 IP 协议针对刚才得到的 IP 数据报再进行解析, 去掉 IP 报头, 得到载荷部分, 交给传输层.

  • 传输层 TCP 协议针对刚才得到的载荷数据进行解析, 去掉 TCP 报头, 得到载荷部分, 再交给应用层.

  • 应用层 QQ 应用和层序, 就会把应用层数据包再进行解析, 取出里面的信息显示在界面上.

# 注意 #

上述过程主要是描述了发送方和接收方之间的封装和分用的过程. 实际上传输还有很多中间的过程, 实际真实的过程更加复杂.


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
在这里插入图片描述
加粗样式

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

相关文章:

  • 详解爬虫基本知识及入门案列(爬取豆瓣电影《热辣滚烫》的短评 详细讲解代码实现)
  • 开发一个农场小游戏需要多少钱
  • 机器学习笔记 - 使用 OpenCV 的结构化森林进行边缘检测
  • vue3 文件分片上传
  • 009、Python+fastapi,第一个后台管理项目走向第9步:ubutun 20.04下安装vscode+git环境配置
  • 存储人视角:人工智能AI + 大模型
  • 图神经网络实战——图论
  • 【二】【SQL】去重表数据及分组聚合查询
  • win32com打开带密码excel
  • 019 Spring Boot+Vue 电影院会员管理系统(源代码+数据库+文档)
  • 网络工程师笔记2
  • 安装 docker 可视化工具 portainer
  • Odoo | 页面视图的跳转逻辑
  • tf.name_scope
  • 【让你从0到1学会c语言】程序环境和预处理指令
  • 什么是CMMI能力成熟度模型?企业为什么要做?
  • 嵌入式 Linux 入门(十、Linux 下的 C 编程)
  • 【附源码】计算机毕业设计SSM培训中心管理系统
  • S2B2C模式有何优势?S2B2C电商系统赋能皮革企业渠道,提升供应链管理效率
  • cdq分治 学习笔记
  • MES是生产成功的因素
  • 通过ssh远程登录linux的原理过程和配置免密登录
  • 软考:信息安全工程师4(系统安全)
  • Hadoop中的Yarn的Tool接口案例、Yarn 案例实操(四)
  • 【C++】STL——string(两万字详解)
  • 浅谈Linux下的redis攻击
  • 【C++】类和对象(中)(万字详解)
  • CockroachDB架构-存储层
  • 【DDR3 控制器设计】(1)MIG IP 核的详解与配置
  • 牛客网专项练习30天Pytnon篇第26天
  • 【Golang开发面经】得物(两轮技术面)
  • Linux vmalloc原理与实现