JAVAEE之网络原理

news2024/11/27 10:39:35

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。

特殊IP

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

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

2.端口号

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

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

格式

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

注意事项

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

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

一个进程一个端口号

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

3.认识协议

概念

协议,网络协议的简称,

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。

只有遵守这个约定,计算机之间才能相互通信交流。通常由三要素组成:

1. 语法:即数据与控制信息的结构或格式;

类似打电话时,双方要使用同样的语言:普通话

2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;

语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。

类似打电话时,说话的内容。一方道:你瞅啥?另一方就得有对应的响应:瞅你咋的!

3. 时序,即事件实现顺序的详细说明。

时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。
女生和男生的通话,总是由男生主动发起通话,而总是在男生恋恋不舍的时候,由女生要求结束通话。

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

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

计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。

要想传递各种不同的信息,就需要约定好双方的数据格式。 

计算机生产厂商有很多;
计算机操作系统,也有很多;
计算机网络硬件设备,还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议;

知名协议的默认端口

系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,如: 

22端口:预留给SSH服务器绑定SSH协议
21端口:预留给FTP服务器绑定FTP协议
23端口:预留给Telnet服务器绑定Telnet协议
80端口:预留给HTTP服务器绑定HTTP协议
443端口:预留给HTTPS服务器绑定HTTPS协议

需要补充的是:
以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。 

4.五元组

如今互联网大部分请求都承载与tcp/ip之上,IP属于网络层协议,TCP属于传输层协议,每个请求主要通过ip数据包来进行传输和交互。

在ip数据包头中会包含连接相关的信息,ip数据包头参数较多,通常难以表达。为了方便不同场景下的使用,将常用的一些ip数据包头字段组合在一起,形成元组,以便使大家更了解。

在TCP/IP协议中,用五元组来标识一个网络通信:
1. 源IP:标识源主机
2. 源端口号:标识源主机中该次通信发送数据的进程
3. 目的IP:标识目的主机
4. 目的端口号:标识目的主机中该次通信接收数据的进程
5. 协议号:标识发送进程和接收进程双方约定的数据格式

5.协议分层

对于网络协议来说,往往分成几个层次进行定义。
什么是协议分层
协议分层类似于打电话时,定义不同的层次的协议:

5.1 分层的作用

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

分层最大的好处,类似于面向接口编程:

定义好两层间的接口规范,让双方遵循这个规范来对接。

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

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

对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

5.2 OSI七层模型

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

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

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

它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通
过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

 

 

OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。

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

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

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

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

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

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

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

 

 

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

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

相关文章

用户登录.java

分析: 1,用String来定义两个变量,记录正确的用户名和密码----->直接赋值得来 2,键盘录入用户名和密码------>new开辟空间得来,存的是地址值 他们直接用比较大小,必定不相同,需要用到String里面的方…

STM32CubeIDE基础学习-USART串口通信实验(中断方式)

STM32CubeIDE基础学习-USART串口通信实验(中断方式) 文章目录 STM32CubeIDE基础学习-USART串口通信实验(中断方式)前言第1章 硬件介绍第2章 工程配置2.1 工程外设配置部分2.2 生成工程代码部分 第3章 代码编写第4章 实验现象总结 …

python--os和os.path模块

>>> import os >>> #curdir #获取当前脚本的绝对路径 >>> os.curdir . >>> import os.path >>> #获取绝对路径 >>> os.path.abspath(os.curdir) C:\\Users\\GUOGUO>>> #chdir #修改当前目录 >&g…

【Python使用】python高级进阶知识md总结第6篇:线程执行带有参数的任务,1. 线程执行带有参数的任务的介绍【附代码文档】

python高级进阶全知识知识笔记总结完整教程(附代码资料)主要内容讲述:操作系统,虚拟机软件。ls命令选项,mkdir和rm命令选项。压缩和解压缩命令,文件权限命令。编辑器 vim,软件安装。获取进程编号…

MATLAB 自定义均值滤波 (53)

MATLAB 自定义均值滤波 (53) 一、算法介绍二、算法实现1.原理2.代码一、算法介绍 均值滤波,是一种常见的点云平滑算法,改善原始点云的数据质量问题,MATLAB自带的工具似乎不太友好,这里提供自定义实现的点云均值滤波算法,具体效果如下所示: 均值滤波前: 均值滤波后:…

[OAuth2]authorization_request_not_found

最近在写一套OAuth2s授权认证,当在oauth2-client调用oauth2-server,并且在点击授权以后,oauth2-client却显示【authorization_request_not_found】,并跳到了登陆页面。 经过调试发现,【authorization_request_not_fou…

Linux:TCP协议的三次握手和四次挥手

文章目录 三次握手四次挥手为什么要进行三次握手?三次握手也不安全 本篇解析的主要是TCP的三次握手和四次挥手的过程 三次握手 如图所示,在TCP要进行链接的时候,其实是要进行三次握手的 第一次握手是指,此时客户端要给服务器发送…

启信宝商业大数据助力全国经济普查

近日,合合信息旗下启信宝收到中国青年创业就业基金会感谢信,对启信宝协同助力全国经济普查和服务青年创业就业研究表达感谢。 第五次全国经济普查是新时代新征程上一次重大国情国力调查,是对国民经济“全面体检”和“集中盘点”,…

Solo 开发者周刊 (第9期):Dawwin首位人工智能编程师或将改变未来?

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿,每周五发布。在这期周刊中,我们将深入探讨开源软件产品的开发旅程,分享来自一线独立开发者的经验和见解。本杂志开源,欢迎投稿。 好文推荐 Dawwin首位人工智能编程师&#…

综合实验配置

1,配置IP地址 R1: [R1]dis ip interface brief Interface IP Address/Mask Physical Protocol GigabitEthernet0/0/0 192.168.1.254/24 up up Serial4/0/0 15.1.1…

OpenHarmony OpenCV应用样例开发

背景 OpenCV 介绍 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它由一系列的 C 函数和少量 C 类构成,同时提供 Python、Java 和 MATLAB 等语言的接口,实现了图像处理和计算机视觉方面…

四轴飞行器玩具软件技术服务

广东四轴飞行器玩具软件技术服务。 东莞市酷得智能科技有限公司成立于广东省东莞市松山湖高新产业园区,我们专注于电子类方案开发设计,提供多类型的IC采购服务。 酷得的益智玩具软件方案定制服务旨在为客户提供一站式的解决方案,帮助其在竞争…

【AcWing】蓝桥杯集训每日一题Day9|区间合并|1343.挤牛奶(C++)

1343.挤牛奶 1343. 挤牛奶 - AcWing题库难度:简单时/空限制:1s / 64MB总通过数:4627总尝试数:13242来源:usaco training 1.3算法标签区间合并差分 题目内容 每天早上 5 点,三名农夫去牛场给奶牛们挤奶。 …

ROS 2边学边练(6)-- 何为参数(parameters)

概念 这一知识点,应该很好理解,参数就是节点的属性,比如猫科动物,它所拥有的属性(参数)有胡子、能伸缩的爪子、随光线缩放自如的瞳孔、夜视能力、优秀的弹跳力、萌等等。ROS节点中参数支持的数据类型有整型…

分治实现快速排序和归并排序

本文用于记录个人算法竞赛学习,仅供参考 一.快速排序(升序为例) 思想:确定分界点x,将小于分界点的值放在分界点的左边,将大于分界定的值放在分界点的右边,再递归处理两边的左右区间。 步骤&am…

1、Cocos Creator 基础入门

目录 Cocos Creator 是什么? 语言支持 功能特性 工作流程 功能模块 相关游戏 参考 Cocos Creator 是什么? Cocos Creator 既是一款高效、轻量、免费开源的跨平台 2D&3D 图形引擎,也是一个实时 2D&3D 数字内容创作平台。拥有…

Java研学-SpringBoot(四)

六 SpringBoot 项目搭建 1 创建项目 spring2.X版本在2023年11月24日停止维护&#xff0c;而Spring3.X版本不支持JDK8&#xff0c;JDK11&#xff0c;最低支持JDK17&#xff0c;目前阿里云还是支持创建Spring2.X版本的项目 2 修改所需依赖版本 – pom <?xml version&quo…

从0开始打架基于VUE的前端项目

准备与版本 安装nodejs(v20.11.1)安装vue脚手架(@vue/cli 5.0.8) ,参考(https://cli.vuejs.org/zh/)vue版本(2.7.16),vue2的最后一个版本初始化项目 创建一个git项目(可以去gitee/github上创建),注意创建一个空项目创建项目vue create mvp-admin-vue-ui删除自己创建的gi…

如何制作Word模板并用Java导出自定义的内容

1前言 在做项目时会按照指定模板导出word文档,本文讲解分析需求后,制作word模板、修改模板内容,最终通过Java代码实现按照模板自定义内容的导出。 2制作word模板 2.1 新建word文档 新建word文档,根据需求进行编写模板内容,调整行间距和段落格式后将指定替换位置留空。…

50 基于 provide/inject 属性的模型视图不同步问题

前言 这是一个之前 2023年12月月底碰到的一个问题 这个问题还是 比较复杂, 呵呵 这个在当时 看来 我甚至觉得 我可能搞不定这个问题 但是 当时出现了一些 其他的可以临时解决这个问题的方式, 因此 当时就没有深究 然后 过了两天 重新复现了一下 问题, 重新看了一下 这个问题…