Java开发需要的网络基础知识,搞清楚计算机网络底层原理

作者:逍遥Sean
简介:一个主修Java的Web网站\游戏服务器后端开发者
主页:https://blog.csdn.net/Ureliable
觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言!

前言

计算机基础是软件开发的基础,它是软件开发人员必须掌握的一些基本知识和技能,包括计算机体系结构、数据结构、算法、操作系统、计算机网络、数据库等方面的基础知识。这些知识和技能的掌握可以提高软件开发人员的开发效率和质量,这对软件开发至关重要。
在软件开发中,计算机基础知识可以帮助开发人员更好地理解开发平台和工具,更好地编写高效、可维护的代码。例如,了解数据结构和算法可以帮助开发人员设计和实现高效的程序;了解操作系统和计算机网络可以帮助开发人员充分利用计算机资源和网络资源;了解数据库可以帮助开发人员有效地管理数据。

有扎实的计算机基础对于软件开发的效率和质量有着重要的影响,本文从几个问题里面搞清楚Java开发需要的一些计算机网络底层原理,深入浅出打下网络知识基础!

Java网络基础知识,从几个问题里面搞清楚计算机网络底层原理

  • 一、从HTTP请求理解网络分层原理
    • 网络通讯流程
    • 分层
  • 二、TCP协议底层知识
  • 三、三次握手四次挥手
  • 四、粘包拆包
  • 五、连接与可靠性传输
  • 六、加密算法
  • 七、HTTPS加密原理

一、从HTTP请求理解网络分层原理

网络通讯流程

在这里插入图片描述

分层

为了简化网络的复杂度,网络通讯的不同方面被分解为多个层次结构,每一层只跟紧挨着的的上层或者下层进行交互,将网络分层,这样可以修改,甚至替换某一层的软件,只要层与层之间的接口保持不变,就不会影响到其它层。

OSI七层模型:
在这里插入图片描述

一个HTTP请求的分层解析:

  1. 应用层:HTTP协议属于应用层协议,因此HTTP请求的第一层是应用层。在这一层,客户端发起HTTP请求,请求中包含:请求方法、请求URL、HTTP协议版本、请求头部等信息。
  2. 传输层:HTTP请求通过TCP传输协议进行传输,因此传输层是HTTP请求的第二层。在这一层,TCP协议提供了可靠的数据传输,并对数据进行分段
  3. 网络层:在网络层,对TCP数据进行封装为IP数据包,并在网络中传递
  4. 数据链路层:在数据链路层,将IP数据包转换为数据帧,并在物理媒介上传输。
  5. 物理层:在物理层,数据被转换为电子信号,通过介质传输至接收方

当HTTP请求到达服务端后,通过相同的方式逆向传输。
在这里插入图片描述

二、TCP协议底层知识

TCP(Transmission Control Protocol)是一种面向连接、可靠的传输层协议,主要用于在网络上的不同主机之间传输数据。TCP协议在 OSI 网络模型的传输层中,负责通过网络传输应用层数据,并通过一些机制保证数据可靠到达。以下是TCP协议底层知识的介绍:

  1. TCP三次握手
    TCP连接的建立采用三次握手的方式,即发送方发送SYN,接收方发送SYN/ACK,发送方再发送ACK,建立连接。三次握手的目的是确保双方都能收到对方的信息,以便在之后的通信中能够可靠地传输数据。

  2. TCP数据传输
    TCP是面向流的协议,将应用层数据分割成适当的大小的数据块,称为 TCP段,每个 TCP 段都有一个序列号,接收方按照序列号的顺序重新组合数据。TCP通过拥塞控制、流量控制等机制保证数据可靠到达。

  3. TCP四次挥手
    TCP连接的关闭采用四次挥手的方式,即发送方发送FIN,接收方发送ACK,接收方再发送FIN,发送方发送ACK,关闭连接。四次挥手的目的是确保双方都能正常关闭连接,避免出现数据丢失或重复的情况。

  4. TCP拥塞控制
    TCP通过拥塞控制来避免网络拥塞和丢包。TCP会根据网络的负载情况来调整自己的发送速率,避免发送过多的数据导致网络拥堵和数据丢失。

  5. TCP流量控制
    TCP通过流量控制来避免发送方发送过多的数据,导致接收方缓冲区溢出。TCP接收方会向发送方发送窗口大小信息,告诉发送方可以发送的数据量。发送方会根据接收方的窗口大小来控制发送速率,避免数据堆积。

总之,TCP协议是互联网传输中最常用的协议之一,因为其可靠性和流控制等机制使其适用于各种应用场景。

三、三次握手四次挥手

三次握手和四次挥手是TCP协议中用于建立和终止连接的过程。
三次握手指的是在建立TCP连接时,客户端和服务端之间需要进行三次数据交互。

  1. 客户端发送一个SYN(同步)数据包给服务端,表示客户端想要与服务端建立连接。
  2. 服务端接收到SYN数据包后,向客户端发送一个SYN/ACK(同步/确认)数据包,表示服务端同意连接请求并准备建立连接。
  3. 客户端接收到SYN/ACK数据包后,向服务端发送一个ACK(确认)数据包,表示客户端也准备好了,并且至此建立了TCP连接,可以进行数据传输了。

四次挥手指的是在终止TCP连接时,客户端和服务端之间需要进行四次数据交互。

  1. 客户端发送一个FIN(结束)数据包给服务端,表示客户端想要终止连接。
  2. 服务端接收到FIN数据包后,向客户端发送一个ACK数据包,表示服务端已经收到了客户端的请求,并且准备好了。
  3. 服务端发送一个FIN数据包给客户端,表示服务端也准备好了,并且请求客户端也关闭连接。
  4. 客户端接收到FIN数据包后,向服务端发送一个ACK数据包,表示客户端已经收到了服务端的请求,确认关闭连接。此时TCP连接已经完全关闭。

四、粘包拆包

粘包和拆包是在计算机网络中出现的两种常见问题。
粘包是当发送方连续发送多个数据包时,由于网络传输的不确定性,这些数据包可能会在接收方处合并成一个大的数据包,导致接收方无法正确解析,从而出现粘包现象
拆包则是相反的情况,当发送方发送的数据包过大时,在传输过程中会被拆分成多个小的数据包进行传输,但是接收方可能会在接收时只收到了部分数据包,导致无法正确解析,出现拆包现象。
为了解决粘包和拆包问题,通常采用以下两种方式:

  1. 基于消息边界的通信协议,例如 HTTP、SMTP 等,这些协议都是基于消息边界的协议,即每个消息之间使用特定的分隔符或长度字段来分隔
  2. 使用协议报文长度标识,例如 TCP 协议中的 MSS 和 IP 协议中的 MTU,发送方在发送数据时需要根据协议规定的报文长度标识来分割数据,并在数据头部携带数据长度信息,接收方在接收数据时根据数据长度信息来分割数据包。

五、连接与可靠性传输

连接是指建立两个或多个设备之间的物理或逻辑连接,以便它们之间可以进行通信。在互联网中,连接通常是通过TCP/IP协议建立的。

可靠性传输是指确保数据在传输过程中不会丢失、损坏或重复。为了实现可靠性传输,TCP协议使用了多种技术,如数据分段、确认、重传和流控制。这些技术能够保证数据的准确传输,并且保证了数据的可靠性。

当一个设备想要向另一个设备发送数据时,它们需要建立一个连接。在连接建立后,它们可以进行通信,而且这个连接可以保持一段时间。如果数据在传输过程中发生了错误,则TCP协议会使用一些技术来确保数据的准确传输,并且在必要时重发数据,确保数据的可靠性。

三次握手和四次挥手也是可靠性连接的技术之一

六、加密算法

加密算法是指将明文经过一定方式处理后,转换为密文的过程。常见的加密算法有对称加密算法和非对称加密算法。

对称加密算法是指加密和解密使用的密钥是相同的,常见的有 DES、3DES、AES 等。

非对称加密算法则是使用公钥和私钥两个不同的密钥进行加密和解密,公钥可以公开,用于加密数据;而私钥只有密钥持有人可以使用,用于解密数据和数字签名等操作。常见的非对称加密算法有 RSA、DSA、ECC 等。

七、HTTPS加密原理

HTTPS(Hypertext Transfer Protocol Secure)是一种通过加密技术保证通信安全的HTTP协议。其加密原理主要包括三个部分:密钥交换、加密算法和数字证书验证。

  1. 密钥交换
    客户端通过与服务器端进行密钥交换,双方生成一个共享的加密密钥,用于后续的加密和解密过程。密钥交换一般通过公钥加密技术实现,即服务器端通过公钥将密钥发送到客户端,客户端再通过私钥将密钥解密出来。

  2. 加密算法
    在密钥交换完成后,双方使用共享密钥对通信内容进行加密。HTTPS采用的加密算法主要有对称加密算法和非对称加密算法。对称加密算法一般速度较快,但是密钥需要在通信双方之间共享,容易被窃取。非对称加密算法则采用公钥加密和私钥解密的方式,安全性较高,但是速度较慢。

  3. 数字证书验证
    为了保证通信双方的身份真实可信,HTTPS通常采用数字证书进行身份验证。数字证书中包含了服务器端的公钥和对应的身份信息,客户端通过验证证书的真实性和合法性可以确定通信方的身份,并避免被假冒者攻击。数字证书的验证一般是通过数字证书颁发机构(CA)进行,CA会对证书申请者的身份进行核实,保证证书的真实性和合法性。

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

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

相关文章

变电站运维服务方案

一、背景与目标 随着电力行业的快速发展,变电站的数量和规模不断扩大,运维服务的需求也日益增长。为了确保变电站的安全、稳定、高效运行,提高运维服务质量,本文档旨在提供一套全面的变电站运维服务方案。 二、服务范围 …

lv5 嵌入式开发-6 线程的取消和互斥

目录 1 线程通信 – 互斥 2 互斥锁初始化 – pthread_mutex_init 3 互斥锁销毁 pthread_mutex_destroy 4 申请锁 – pthread_mutex_lock 5 释放锁 – pthread_mutex_unlock 6 读写锁 7 死锁的避免 8 条件变量(信号量) 9 线程池概念和实现 9.1 …

CCS介绍

CCS介绍 设置主体颜色 修改字体的颜色和大小 安装一些插件 CCS中的App中心 切换工作空间 导入工程

el-table-column默认选中一个复选框和只能单选事件

表格代码 <el-table ref"contractTable" v-loading"loading" :data"contractList" selection-change"contractSelectionChange" style"margin-top: 10%;"><el-table-column type"selection" width"…

【分享】Word文档如何批量转换成PDF?

Word格式比较容易编辑&#xff0c;是工作中经常用到的文档工具&#xff0c;有时候为了避免文档在传送中出现乱码&#xff0c;或者防止被随意更改&#xff0c;很多人会把Word文档转换成PDF&#xff0c;那Word文档要怎样转成PDF呢&#xff1f;如果Word文档很多&#xff0c;有没有…

uniapp获取一周日期和星期

UniApp可以使用JavaScript中的Date对象来获取当前日期和星期几。以下是一个示例代码&#xff0c;可以获取当前日期和星期几&#xff0c;并输出在一周内的每天早上和晚上&#xff1a; // 获取当前日期和星期 let date new Date(); let weekdays ["Sunday", "M…

云安全【阿里云ECS攻防】

关于VPC的概念还请看&#xff1a;记录一下弹性计算云服务的一些词汇概念 - 火线 Zone-安全攻防社区 一、初始化访问 1、元数据 1.1、SSRF导致读取元数据 如果管理员给ECS配置了RAM角色&#xff0c;那么就可以获得临时凭证 如果配置RAM角色 在获取ram临时凭证的时候&#xff…

Three.js后期处理简明教程

后期处理&#xff08;Post Processing&#xff09;通常是指对 2D 图像应用某种效果或滤镜。 在 THREE.js 中我们有一个包含一堆网格物体的场景。 我们将该场景渲染为 2D 图像。 通常&#xff0c;该图像会直接渲染到画布中并显示在浏览器中&#xff0c;但我们可以将其渲染到渲染…

人机逻辑中的家族相似性与非家族相似性

维特根斯坦的家族相似性理论是他在《哲学研究》中提出的一个重要概念。他认为&#xff0c;语言游戏是一种人们使用语言的方式&#xff0c;不同的语言游戏之间可能存在相似性&#xff0c;就像一个家族的成员之间存在相似性一样。维特根斯坦认为&#xff0c;相似性不是通过一个共…

Quartz 体系结构

Quartz的体系结构 Quartz的重要组件 Scheduler 用于与调度程序交互的主程序接口。 Scheduler调度程序-任务执行计划表&#xff0c;只有安排进执行计划的任务Job&#xff08;通过scheduler.scheduleJob方法安排进执行计划&#xff09;&#xff0c;当它预先定义的执行时间到了的时…

mac 解决 vscode 权限不足问题,Insufficient permissions

commod 空格&#xff0c;输入终端并打开写入指令 sudo chown -R xxxxxx1 xxxxx2&#xff08;例如我的sudo chown -R admin Desktop&#xff0c;具体参数查看下方&#xff09; x1: 用户名&#xff0c;可通过左上角查看 x2: 目标文件夹。可以另起一个终端&#xff0c;用cd 和 l…

Unity当中的灯光类型

文章目录 前言一、Directional平行光二、Point点灯三、Spot 聚光灯四、Area面光灯&#xff0c;只用于烘培 前言 Unity当中的灯光类型 一、Directional平行光 Unity当中最重要的灯管类型&#xff0c;类似现实中的太阳光 二、Point点灯 类似现实中的灯泡&#xff0c;萤火虫&a…

内存对齐--面试常问问题和笔试常考问题

1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点&#xff1a; 提高访问效率&#xff1a;内存对齐可以使数据在内存中以更加紧凑的方式存储&#xff0c;从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据&#xff0c;而不需要额外的字节偏移计…

oracle

title: “Oracle” createTime: 2021-12-13T16:35:4108:00 updateTime: 2021-12-13T16:35:4108:00 draft: false author: “name” tags: [“oracle”] categories: [“db”] description: “测试的” 时间字段分析 timestamp 精确到秒后面6位 createTime: 2021-12-13T16:35:…

vue3基础

141.用vite创建vue3项目 142.项目目录 vue3中&#xff0c;直接导入组件就能用 不再要求唯一根元素 //createApp(App)是创建实例&#xff0c;.mount(#app)是在将实例往id为app的盒子上挂载 createApp(App).mount(#app)//挂载就是让实例接管一片区域 assets是存放图片或样式的…

uniapp——实现二维码生成+保存二维码图片——基础积累

最近在做二维码推广功能&#xff0c;自从2020年下半年到今天&#xff0c;大概有三年没有用过uniapp了&#xff0c;而且我之前用uniapp开发的程序还比较少&#xff0c;因此很多功能都浪费了很多时间去查资料&#xff0c;现在把功能记录一下。 这里写目录标题 效果图1.根据接口返…

Vue Mock.js介绍和使用与首页导航栏左侧菜单搭建

前言&#xff1a; 因为使用Vue开发&#xff0c;组件写的太多&#xff0c;组件与组件之间的传递数据复杂&#xff0c;所以要用到Mock和Bus事件 一&#xff0c;关于Mock 1.1.什么是Mock.js Mock.js是一个模拟数据的生成器&#xff0c;用来帮助前端调试开发、进行前后端的原型分离…

ctfshow 命令执行 (29-39)

学习参考的 https://www.cnblogs.com/NPFS/p/13279815.html 说的很全面 web29 命令执行&#xff0c;需要严格的过滤 源码 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__); } …

深入浅出Java的多线程编程——第一篇

目录 1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1.1.1 线程是什么 1.1.2 为啥需要线程 1.1.3 进程和线程的区别 1.1.4 Java的线程和操作系统线程的关系 1.2 第一个多线程程序 1.3 创建线程的方式&#xff08;5种&#xff09; 1.3.1 继承Thread类 1.3.2 实现…

Spring面试题21:说一说Spring的@Required注解和@Qualifier注解

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的@Required注解 @Required ,用于标记在注入的属性上。它表示被注解的属性在配置 Bean 的时候是必需的,如果没有正确配置,则会抛出…