JavaEE(系列19) -- 计算机网络初识

news2024/11/17 17:22:53

目录

1. 网络发展史

2. IP地址和端口号

3. 协议 

4. 五元组

6. 协议分层 

6.1 OSI 七层模型

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

7. 协议分层(网络数据传输过程)

7.1 应用层

7.2 传输层(进入了操作系统内核) 

7.3 网络层

7.4 数据链路层

7.5 物理层


声明:本文内容以及图片借鉴博主 ,该内容仅仅是用来自己复习.

 

愿为梧桐木的博客_CSDN博客-JavaSE,起点, C语言学习,JavaWeb领域博主

1. 网络发展史

1. 独立模式(单机模式)

        我们最初的计算机是在单机模式下使用的, 此时的计算机是没有连接网络的, 也就是我们的计算机之间是相互独立, 是没有办法进行设备之间的通信的.

2. 网络互联

        随着时代的发展, 越来越需要计算机之间互相通信, 共享软件和数据, 即以多个计算机协同工作来完成业务, 就有了网络互连.

网络互连: 将多台计算机连接在一起, 完成数据共享, 数据共享本质是网络数据传输, 即计算机之间通过网络来传输数据, 也称为网络通信.根据网络互连的规模不同, 可以划分为局域网和广域网.局域网和广域网区分的主要网络的覆盖面, 广域网比比局域网的网络覆盖面更广泛, 比如全世界最大的广域网就是因特网, 再缩小范围, 只有一个城市组成的网络, 就是一个局域网, 网络的覆盖面是相对的, 其实这两者之间并没有一个明确的界限.

3. 局域网LAN 

局域网, 即 Local Area Network, 简称LAN, 局域网是本地, 局部组建的一种私有网络.

局域网把—些设备通过交换机和路由器连接到—起(设备之间不能离得太远), 使得局域网内的主机之间能方便的进行网络通信, 局域网又称为内网, 局域网和局域网之间在没有连接的情况下, 是无法通信的.

4. 广域网WAN 

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

5. 局域网组建网络的方式

 

 

2. IP地址和端口号

IP地址和和端口号在网络通信中用于标识不同的主机和同一主机下不同的进程.

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。

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


IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进
程来接收这个数据呢?这就需要端口号来标识。
 

2. 端口号 

        在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。


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

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

 

了解:
一个进程启动后,系统会随机分配一个端口(启动端口)程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。

3. 协议 

问题:
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?基于网络数据传输,需要使用协议来规定双方的数据格式。

协议

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

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

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

4. 五元组

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

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

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

6. 协议分层 

为什么需要网络协议的分层?
分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):

  • 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可
  • 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

6.1 OSI 七层模型

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

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

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

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

 img

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

7. 协议分层(网络数据传输过程)

7.1 应用层

应用层代码就是相当于QQ这个应用程序了, 首先应用层会将用户要发送的数据进构造成一个应用层数据报文, 本质上就是一个遵守了约定格式的字符串.QQ应用层的具体数据格式我们是不清楚的,

假设这里的应用层协议的格式是: 发送方QQ号, 发送时间, 接收方QQ号, 消息内容;

此时得到的应用层的报文如下:

然后, QQ程序会调用操作系统的API, 将这个应用层数据报文交给传输层. 

7.2 传输层(进入了操作系统内核) 

 传输层会基于应用层的数据来构造一个传输层的数据报文, 传输层常用的协议有UDP与TCP, 以UDP为例, 该报文由协议报头加上数据载荷构成, UDP报头中是另外一个特定格式的字符串(涉及源端口和目的端口), 这个的"报头"相当于是一个"标签", 通过标签可以表示出当前要把这个消息怎样进行传输.

7.3 网络层

网络层最常用的是IP协议, 会将TCP数据报继续封装成IP数据报, 也是在原来数据的基础上加上一个IP协议报头, 新的网络层IP数据报是由IP协议报头加上数据载荷组成, IP报头也是一个特定的字符串, 包含了另一组信息(核心是源IP和目的IP).

 然后网络层会将封装的数据交给数据链路层.

7.4 数据链路层

数据链路层最知名的协议是 “以太网”, 会基于IP协议数据报再加上帧头与帧尾, 封装构造成一个 “以太网数据帧”.

 

7.5 物理层

 物理层会将上述的 “以太网数据帧” 的二进制数据转换为高低电平电信号/光信号, 然后通过网线或者无线的形式发送出去

那么大家是否理解上面说到的传输过程为什么要加报头呢, 其实也好理解, 网络通信中需要知道到基础的五元组是源IP, 源端口, 目的IP, 目的端口, 协议类型(协议号, 标识发送进程和接收进程双方约定的数据格式 )

以上是怎么发数据到指定客户端

那么从接收方来看呢?

1. 物理层

网卡接收到的是光信号/电信号的信息, 接收方物理层会接收到这些信号转换回二进制数据, 转回的这个数据是一个 “以太网数据帧”.

物理层会把这个数据帧再交给数据链路层.

2. 数据链路层

img

 数据链路层把得到的这个数据进行解析, 然后去掉帧头帧尾, 取出中间的数据载荷, 再交给上层的网络层.

3. 网络层

img

 IP协议对这里的数据继续进行解析, 再去掉IP报头,取出数据载荷交给上层的传输层.

4. 传输层

img

 UDP继续进行解析, 去掉UDP报头, UDP报头里有一个目的端口, 这个目的端口是关联着着一个具体的应用程序的, 此时取出的数据载荷就可以交给对应的应用层程序.

5. 应用层.

img

上面从应用层到物理层(从上层至下层)数据层层加码的过程称为 “封装”, 当接收方收到数据时会将已经封装好的数据从下层至上层进行解析拆分, 这个过程叫做 “分用”; 通俗点理解, 封装就类似于包装快递, 分用就是拆快递了.  

在真实的网络环境中要经过很多节点的转发. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CSS3+HTML5+JQUERY】------ 实现环形进度条实例代码-(已简单封装)

1. JavaScript代码 circle.js文件: 简单的封装了一下 直接调用方法即可 (function ($$) {var lyCircle {};lyCircle.options{timer:20,circleLeft:.ly-circle-left,elements:"",circleRight:".ly-circle-right",percentSum:0,//百分比bgColor:#00a7ff,bor…

stable diffusion中的u net

Stable Diffusion 包含几个核心的组件: 一个文本编码器(在 Stable Diffusion 中使用 CLIP 的 ViT-L/14 的文本编码器),用于将用户输入的 Prompt 文本转化成 text embedding;一个 Image Auto Encoder-Decoder&#xff…

大模型核心技术原理: Transformer架构详解

在大模型发展历程中,有两个比较重要点:第一,Transformer 架构。它是模型的底座,但 Transformer 不等于大模型,但大模型的架构可以基于 Transformer;第二,GPT。严格意义上讲,GPT 可能…

【学习笔记】Python核心技术与实战-基础篇-03列表和元组,到底用哪个?

目录 列表和元组基础概念区别列表和元组的基础操作和注意事项列表和元组存储方式的差异列表和元组的性能列表和元组的使用场景总结思考题 列表和元组基础 概念 列表和元组,都是一个可以放置任意数据类型的有序集合。 在绝大多数编程语言中,集合的数据类…

C++算法:排序之二(归并、希尔、选择排序)

C算法:排序 排序之一(插入、冒泡、快速排序) 排序之二(归并、希尔、选择排序) 文章目录 C算法:排序二、比较排序算法实现4、归并排序5、希尔排序5、选择排序 原创文章,未经许可,严禁…

从vue2到vue3的生命周期

1.vue2 在vue2.x中的生命周期为 beforeCreate created beforeMount mounted beforeUpdate updated beforeDestroy destroyed activated deactivated errorCaptured 在vue3中,新增了一个setup生命周期函数,setup执行的时机是在beforeCreate生命函数之前…

count(0)、count(1)和count(*)、count(列名) 的区别

当我们对一张数据表中的记录进行统计的时候,习惯都会使用 count 函数来统计,但是 count 函数传入的参数有很多种,比如 count(1)、count(*)、count(字段) 等。 到底哪种效率是最好的呢?是不是 count(*) 效率最差? 一.…

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用

【Mysql数据库从0到1】-入门基础篇--sql语句简单使用 🔻一、数据库创建、删除、选择1.1 🍃 create database 创建数据库1.2 🍃 使用 mysqladmin 创建数据库1.3 🍃 drop 命令删除数据库--一般不建议在数据库执行delete、drop等命令…

公司招人面试了一个00后,绝对能称为是内卷届的天花板

公司前段缺人,也面了不少测试,结果竟然没有一个合适的。一开始瞄准的就是中级的水准,也没指望来大牛,提供的薪资也不低,面试的人很多,但平均水平很让人失望。令我印象最深的是一个00后测试员,他…

【商品页面详情页+商品评论】API接口技术交流,封装接口

商品详情API接口数据:提供了商品的基本信息,包括商品名称、描述、规格、价格、销量、库存等信息。此外,也可以通过提供的API接口来获取商品的图片、评价、物流信息等详细数据。 商品评论接口是消费者对商品所进行的客观评价 电商API的应用价…

使用geoserver发布shp和tiff数据

一、安装并启动geoserver服务 1.1 下载geoserver 进入官网下载 由于geoserver是使用Java语言开发的,所以运行需要java的环境,不同geoserver的版本号对java的版本要求不同,所以选择版本时需注意对应java的版本要求,由于我本地安…

Nginx配置域名证书

Nginx配置域名证书 1、证书存放路径 2、nginx.conf文件中增加以下配置,注意路径不一样,访问地址目录不一样 server {listen 443 ssl http2;server_name jistest.vwatj.ap.vwg;ssl_certificate D:/home/XXX/ssl/2023/XXX.cer; ssl_certificate_key D…

Spring Validation 接口入参校验

一、前言 JSR 是 Java Specification Requests 的缩写,含义为 JAVA 规范提案。 JSR 303 - Bean Validation 规范, 正是一套基于 JavaBean 参数校验的标准。 Hibernate Validator 是 JSR 303 的实现,它提供了 JSR 303 规范中所有约束(constrai…

泪崩!测试面试技术面过了却挂在了——“谈谈你的职业生涯规划”

前不久,软件测试交流群里面有一个成员吐槽,说今天的面试技术已经面过了,可HR却问了她“未来的职业发展目标是什么?”然后,挂了!这个问题我们平时在交流群里都有讲过,可是这丫头比较疯&#xff0…

级差制系统开发模式是怎么赚钱的?

级差制是直销所有模式中最受欢迎的模式之一,很多企业商家都会在级差制和双轨制中二选一,可见这个模式的优秀程度。下面就来简单分析一下,在级差制模式中是怎么赚钱的? 级差制最大的特点就是以卖货为主,它所有的奖金设置…

正规理财app软件有哪些?top5资质正规理财app软件最新排名

正规理财app软件有哪些?随着移动端理财的普及,越来越多的人开始使用理财app软件进行投资和资产管理。但是,市场上有很多理财软件,如何选择一款正规、安全的软件是关键。下面就为大家介绍一些选择理财app软件的建议。首先&#xff…

GDT陶瓷气体放电管串电容的5点作用

串电容,是指串联衔接于线路中,其主要目的是用来补偿电力线路感抗的电容器,电容器也是目前电力设备中必不可少的一环,其种类很多。下面优恩将为大家介绍一下GDT陶瓷气体放电管串电容的作用。 据小编了解,GDT陶瓷气体放电…

Bellhop 海底地形起伏条件下的传播特性

文章目录 前言一、预备内容二、水平海底波导(水平海底)1、海底水平的深海波导中的声线①、环境文件②、Matlab 命令③、执行结果 2、海底水平的深海波导中的本征声线①、环境文件②、Matlab 命令③、执行结果 3、海底水平的深海波导中的相干传播损失①、…

TDEngine3.0 环境安装、配置及使用经验总结

TDEngine3.0 环境安装、配置及使用经验总结 一、TDengine 介绍二、TDengine的下载三、TDengine Server安装及配置3.1 安装3.2 taos的参数配置3.3 启动3.4 taosAdapter 四、TDengine Client 安装4.1 linux客户端安装4.2 windows客户端安装 五、TDEngine3.x的使用总结 一、TDengi…

minhook探究

参考:https://github.com/TsudaKageyu/minhook minhook是windows平台上支持x86/x64的hook库,git上的自我介绍说是“mininalistic",其简约并不简单。在接口的设计,hook的兼容性等方面,还是值得我们初学者解决的。熟悉inline …