09.JAVAEE之网络初识

ops/2024/11/14 6:36:14/

1.网络

单机时代 =>局域网时代 =>广域网时代 =>移动互联网时代

1.1 局域网LAN

局域网,即 Local Area Network,简称LAN。

Local 即标识了局域网是本地,局部组建的一种私有网络

局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。

把几个电脑通过路由器(4个lan,1个wan)连接起来。

1.2 广域网WAN

广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

2.网络通信基础 

网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。 

2.1 IP地址

描述了一个设备,在网络上的地址.

计算机中: 使用一个 32 位,4 字节数字, 表示地址
一般来说, 会把IP 地址给表示成 4 个 0-255 之间的十进制数字, 并且使用 3 个点进行分隔.点分十进制。

特殊IP

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

2.2 端口号

区分一个主机上不同的应用程序的,
端口号也是一个整数.(2 个字节(2个字节65535),相对比较小的数字)

不同的程序,就可以关联/绑定到不同的端口号

要求同一个主机上的应用程序,不能关联到同一个端口号

(一个端口号只能被一个程序绑定,但是一个程序可以绑定多个端口)

0 一般不使用

1-1023这个范围的端口号,系统留作特殊用途(知名端口号),咱们写的程序不应该占用

在实际的通信过程中,IP 和 端口 往往是"一对”。 

2.3 认识协议

学习网络的时候,很多都在学习 协议(协议就是一种约定,约定了通信双方按照啥样的方式来传递数据~~)

网络上, 本质是通过 光/电 信号来传输数据(比如,低电平表示 1,高电平表示 0;高频光信号表示1,低频光信号表示 0)

2.3.1 五元组

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

1. 源IP:标识源主机

2. 源端口号:标识源主机中该次通信发送数据的进程

3. 目的IP:标识目的主机

4. 目的端口号:标识目的主机中该次通信接收数据的进程

5. 协议号:标识发送进程和接收进程双方约定的数据格式

一次通信过程中必不可少的信息~~

2.3.2 协议分层

平时写代码, 如果一个代码越写越多,越写越复杂,往往需要把代码,给拆分成多个部分

拆分之后,能够更好理解是基于 人脑 基本的认知规律.

网络通信的场景,可能会比较复杂,
有很多的问题需要通过协议来进行解决

如果搞一个大的协议来解决所有问题,此时这个协议就会非常庞大. 非常复杂就不利于人们去学习和理解.
相比之下,也可以把大的协议,拆分成多个小的协议,让每个小的协议只专注于做一小块事情~~
使每个小的协议,都不会太复杂.(化繁为简)

由于网络通信实在太复杂,拆分就拆出来太多的小的协议.这么多小的协议也就不好管理了.就需要对协议进行分层了(按照协议的定位/作用分类,并且约定了不同层次之间的"调用关系上层协议,调用下层协议""下层协议给上层协议提供支持"

好处:

1.协议分层之后,上层和下层 彼此之间就进行了封装,

使用上层协议,不必过多关注下层;

使用下层协议,也不必过多关注上层->降低使用者的成本

2.每一层协议都可以根据需要灵活替换

协议分层之后,好处多多.因此现在网络世界都是这种分层的结构

两种分层

  • OSI 七层网络模型(仅仅是出现在教科书中。)
  • TCP/IP 五层网络模型(是 OSI 七层模型的简化版本)

2.4 TCP/IP五层(或四层【说四层是不算物理层】)模型 

1)物理层: 描述的是网络通信的硬件设备好比 基础设施.公路,铁路...
比如使用的网线,光纤都应该是啥规格~

2)数据链路层:两个相邻节点之间的数据传输情况

3)网络层: 进行路径规划

4)传输层: 关注起点和终点

5)应用程序:如何使用这个数据(程序员最需要关注的一点)

上述的这套规则,其实是针对"传统的”"经典的"交换机和路由器来描述的。
实际上,现在的路由器和交换机功能都越来越强大了.(甚至说一些高端的交换机,也有路由功能另一方面,路由器交换机可能还会支持一些更复杂的操作,甚至可能会工作在传输层或者应用层

3.封装和分用 

描述了网络通信过程中,基本的数据传输流程

EG:
考虑 A 通过 QQ 把一个 hello 传递给 B 

1.应用层

就可以把应用层数据报,通过 操作系统的 api,把数据交给 传输层

2.传输层

就要对刚才的应用层数据,再进行打包,变成传输层的数据报~~

传输层数据报搞好了之后,这个数据又会进一步的交给网络

3.网络

网络层的数据打包好了之后,继续把数据交给"数据链路层"再来进一步打包

4.数据链路层

5.物理层

把上述数据,转换成 2 进制的 01序列.
通过光信号/电信号进行传输

数据发送出去之后,就会经过一系列的交换机和路由器进行转发,A 和 B一般来说不是直接网线连接的,中间还要经过很多的交换机/路由器设备进行转发
当数据到达 B 这边之后,B 就要针对上述数据进行"分用"(针对上述数据报进行层层的解析)

接收方

初心是为了传输 hello但是为了达成目的,就需要做很多额外的工作

从上层协议到下层协议,层层给数据报添加报头这个过程称为"封装"

数据报在网络中间还会经历一定的转发过程.
如果经过路由器: 就会封装分用到网络
路由器解析到网络层, 拿到 IP 地址,决定进一步如何传输.下一步传输的时候,又会重新经过网络层,数据链路层和物理层的封装
如果经过交换机: 就会封装分用到数据链路层

理解网络原理就是为了进行网络编程。 


http://www.ppmy.cn/ops/17404.html

相关文章

迭代器模式:顺序访问集合对象元素的桥梁

在软件开发中,我们经常需要访问集合对象中的元素,而无需暴露其底层表示。迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种按顺序访问聚合对象元素的方法,而不依赖于对象的底层实现。这种模…

postCss基本介绍

🌟什么是postCss? 我个人的理解postCss就是css界的babel,它提供一个过程,而在这个过程中,去干什么就是你自己的事情,所以很多人写插件,去做代码转换,或者兼容等等。 babel 提供过程 …

R可视化:绘制带有显著性标记的误差棒图

介绍 ggplot2绘制分组误差棒图加载R包 knitr::opts_chunk$set(message = FALSE, warning = FALSE) library(tidyverse) library(ggpubr) library(rstatix)# rm(list = ls()) options(stringsAsFactors = F) options(future.globals.maxSize = 10000 * 1024^2)Importing data …

C语言趣味代码(二)

1.珠玑妙算 1.1 介绍 《珠玑妙算》(Mastermind)是英国Invicta公司于1973年开始销售的一款益智游戏,据说迄今为止已经在全世界销售了5000万套。《珠玑妙算》于1974年获奖后,在1975年传入美国,1976年leslieH.Autl博士甚至还出版了一本名为The…

YOLOv8 实现车牌检测,生成可视化检测视频(20240424)

原项目源码地址:GitHub 我的源码地址:Gitee 环境搭建请参考:Win10 搭建 YOLOv8 运行环境(20240423)-CSDN博客 环境测试请参考:本地运行测试 YOLOv8(20240423)-CSDN博客 训练数据…

如何在PostgreSQL中使用索引覆盖扫描提高查询性能?

文章目录 解决方案1. 创建合适的索引2. 确保查询能够使用索引覆盖扫描3. 调整查询以利用索引覆盖扫描4. 监控和调优 示例代码1. 创建索引2. 编写查询3. 检查是否使用索引覆盖扫描4. 调整索引 总结 在PostgreSQL中,索引是提高查询性能的关键工具之一。索引允许数据库…

鼠标手辅助器

鼠标发生移动后 ,静止在某位置指定时间后即可触发点击事件 支持多种点击事件,支持快捷键触发,支持自定义配置 有其他更好的思路 ,支持有偿定制,留言留下联系方式,看到会加你 # !/usr/bin/python3 # -*- c…

laravel 使用微信的图片内容检测及文字内容检测

文字内容检测 const SEC_LABEL [100 > 正常,10001 > 广告,20001 > 时政,20002 > 色情,20003 > 辱骂,20006 > 违法犯罪,20008 > 欺诈,20012 > 低俗,20013 > 版权,21000 > 敏感,];/*** 检测文字安全* param $openid openid* param $content 检…