JavaEE 初阶篇-深入了解网络通信相关的基本概念(三次握手建立连接、四次挥手断开连接)

🔥博客主页: 【小扳_-CSDN博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 网络通信概述

        1.1 基本的通信架构

        2.0 网络通信三要素

        3.0 网络通信三要素 - IP 地址

        3.1 查询 IP 地址

        3.2 IP 地址由谁供应?

        3.3 IP 域名

        3.4 IP 分类

        3.5 IP 常用命令

        3.6 InetAddress 类

        4.0 网络通信三要素 - 端口

        4.1 分类

        5.0 网络通信三要素 - 协议

        5.1 OSI 网络参考模型

        5.2 TCP/IP 网络模型

        5.3 UDP 协议

        5.4 TCP 协议

        5.4.1 三次握手来确认双方建立连接

        5.4.2 传输数据可靠性

        5.4.3 四次挥手断开连接


        1.0 网络通信概述

        网络通信是指不同计算机之间通过网络传输数据和信息的过程。在网络通信中,数据可以通过各种协议和技术进行传输,例如 TCP、UDP、HTTP、FTP 等。

        1.1 基本的通信架构

        基本的通信架构有两种形式:CS 架构(Client 客户端/ Server 服务端)、BS 架构(Browser 浏览器/ Server 服务端)

        1)在 CS 架构中,客户端负责向服务器发送请求,并接收服务器的响应。服务器负责处理客户端的请求,执行相应的业务逻辑,并返回结果给客户端。与 BS 比较明显的比较。CS 模式下,客户端与服务端都需要程序员开发实现,用户端需要下载安装客户端软件。

        传统的桌面应用程序通常采用 CS 架构,如邮件客户端、文件传输工具等。

        2)在 BS 架构中,客户端通过 Web 浏览器访问 Web 应用程序,Web 服务器处理客户端的请求并返回 HTML、CSS、JavaScript 等前端资源,客户端在浏览器中渲染显示。与 CS 比较,BS 模式下的浏览器不需要程序员开发实现,程序员只需要开发实现服务端,而用户只用下载安装浏览器即可。

        BS 架构具有跨平台性和易于部署的特点,用户只需通过浏览器访问 Web 应用程序,无需安装额外的客户端软件。

        2.0 网络通信三要素

        1)IP:设备在网络中的地址,是唯一的标识。

        2)端口号:应用程序在设备中唯一的标识。

        3)协议:连接和数据在网络中传输的规则。

        3.0 网络通信三要素 - IP 地址

        IP 地址用于在网络中唯一标识设备,类似于世界上每个人都有唯一的身份证号码。IP 地址允许设备在互联网上相互通信和交换数据,实现数据的传输和网络连接。

        3.1 查询 IP 地址

在打开命令框:输出

ipconfig

        3.2 IP 地址由谁供应?

        IP 地址的供应主要由互联网服务提供商负责。ISPs 是连接用户到互联网的服务提供商,他们会从区域互联网注册管理机构或其他上级 ISP 处获取一定数量的公共 IP 地址资源,然后将这些 IP 地址分配给他们的客户。

        3.3 IP 域名

        IP 地址和 IP 域名是互联网中用于标识和定位网络资源的两种不同的标识方式。IP 地址是互联网上设备的唯一标识符,而 IP 域名是用于更方便地记忆和访问网络资源的人类可读标识。例如:example.com 是一个域名,www.example.com 是其子域名。

        IP 域名和 IP 地址之间存在映射关系,域名系统(DNS)负责将域名解析为对应的 IP 地址,从而实现互联网资源的访问。当用户在浏览器中输入一个域名时,浏览器会向 DNS 服务器发送请求,获取该域名对应的 IP 地址,然后通过 IP 地址找到并访问相应的网络资源。

        总的来说,IP 地址是互联网上设备的标识符,而域名是用来方便访问网络资源的人类可读标识,二者通过 DNS 进行映射和交换。

        3.4 IP 分类

        IPv4(Internet Protocol version 4)是目前广泛使用的 IP 地址标准,采用 32 位地址,通常以点分十进制表示,如 192.168.1.1。

        IPv6(Internet Protocol version 6)是下一代 IP 地址标准,采用 128 位地址,以冒号分隔的八组十六进制数表示,如 2001:0db8:85a3:0000:0000:8a2e:0370:7334 。(号称可以为地球每一粒沙子编号)

        公有 IP 地址(公网):公有 IP 地址是全球唯一的 IP 地址,用于在互联网上进行通信。公有 IP 地址由互联网服务提供商(ISP)分配。

        私有 IP 地址(内网):私有 IP 地址用于内部网络中,不直接暴露在互联网上,通常在局域网内部使用。私有 IP 地址范围包括 192.168.0.0/16 。192.168 开头的就是常见的局域网。

        特殊 IP 地址:127.0.0.1 代表本机 IP ,只会寻找当前所在的主机。

        3.5 IP 常用命令

ipconfig:查看本机 IP 地址。

ping IP 地址:检查网络是否连通。

查看本机 IP 地址:

结果:

检查网络是否连通:

        3.6 InetAddress 类

        代表 IP 地址。

InetAddress 的常用方法如下:

        1)public static InetAddress getLocalHost():是一个静态方法,通过类名直接获取本机 IP 对象,会以一个 InetAddress 的对象返回。

    public static void main(String[] args) throws UnknownHostException {
        //获取本机的 IP 对象
        InetAddress address = InetAddress.getLocalHost();
    }

        2)public static InetAddress getByName(String host):根据地址或者域名,返回 InetAddress 对象。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class demo2 {
    public static void main(String[] args) throws UnknownHostException {
        //根据IP或者域名来获取该IP地址的对象
        InetAddress address1 = InetAddress.getByName("127.0.0.1");
        InetAddress address2 = InetAddress.getByName("www.baibu.com");
    }
}

        3)public String getHostName():获取该 IP 地址对象对应主机名。

import java.net.InetAddress;
import java.net.UnknownHostException;
public class demo1 {
    public static void main(String[] args) throws UnknownHostException {
        //获取本机的 IP 对象
        InetAddress address = InetAddress.getLocalHost();
        //通过IP地址对象来获取到主机名称
        String name = address.getHostName();
        System.out.println(name);
    }
}

运行结果:

        4)public String getHostAddress():获取该 IP 地址对象中的 IP 地址信息。

        该操作与通过命令框中输入:ipconfig 来查找本机地址是一样的效果。

import java.net.InetAddress;
import java.net.UnknownHostException;

public class demo3 {
    public static void main(String[] args) throws UnknownHostException {
        InetAddress address = InetAddress.getLocalHost();
        String ip = address.getHostAddress();
        System.out.println(ip);
    }
}

运行结果:

        5)public boolean isReachable(int timeout):在指定毫秒内,判断主机与该 IP 对于的主机是否能连接。

        该操作与在命令框中输入:ping IP 地址是一样的效果。

import java.io.IOException;
import java.net.InetAddress;

public class demo4 {
    public static void main(String[] args) throws IOException {
        InetAddress address = InetAddress.getByName("www.baidu.com");
        //判断在8秒内是否与百度建立联系
        boolean b = address.isReachable(8000);
        System.out.println(b);
    }
}

运行结果:

        4.0 网络通信三要素 - 端口

        标记正在计算机设备上运行的应用程序的,被规定为一个 16 位的二进制,范围是 0~65535 。

        4.1 分类

        1)周知端口:0 - 1023,被预先定义的知名应用占用(如:HTTP 占用 80,FTP 占用 211)

        2)注册端口:1024 - 49151,分配给用户进程或某些应用程序。

        3)动态端口:49152 - 65535,之所以被称为动态端口,是因为它不一般固定分配某种进程,而是动态分配。

        注意:我们自己开发的程序一般选择使用注册端口,且是一个设备中不能出现两个程序的端口号一样,否则出错。

        5.0 网络通信三要素 - 协议

        网络上通信的设备,事先规定的连接规则,以及传输数据的规则被称为网络通信协议。

        5.1 OSI 网络参考模型

        网络参考模型是国际标准化组织制定的用于定义和标准化计算机网络体系结构的框架。该模型将计算机网络通信过程分解为七个不同的层次,每个层次负责特定的功能,并定义了各层之间的接口和通信方式,以促进不同厂商设备之间的互操作性。

以下是 OSI 网络参考模型的七个层次:

  1. 物理层(Physical Layer):负责定义传输介质的物理特性,如电压、频率等,以及数据的传输和接收方式。

  2. 数据链路层(Data Link Layer):负责在直接相连的节点之间传输数据,通过帧(Frame)来管理数据传输,检测和纠正传输错误。

  3. 网络层(Network Layer):负责在网络中寻址、路由和转发数据包,实现不同网络之间的通信。

  4. 传输层(Transport Layer):负责端到端的数据传输,提供可靠的数据传输服务,如错误检测、流量控制和拥塞控制。

  5. 会话层(Session Layer):负责建立、管理和终止会话(Session)连接,确保数据传输的顺序和完整性。

  6. 表示层(Presentation Layer):负责数据的格式转换、加密解密、压缩解压缩等,以确保不同系统之间的数据格式兼容性。

  7. 应用层(Application Layer):提供用户与网络应用之间的接口,包括各种网络服务和应用程序,如 HTTP、FTP、SMTP 等。

        每个层次都有特定的功能和责任,并通过定义标准接口和协议来实现不同层次之间的通信和协作。OSI 模型提供了一种通用的框架,帮助理解和设计计算机网络体系结构,促进不同厂商设备之间的互操作性。

大致流程:

        5.2 TCP/IP 网络模型

        事实上的国际标准。

        TCP/IP 网络模型是另一种常用的网络参考模型,由互联网工程任务组开发。它包含四个层次分别是:

  1. 应用层:与 OSI 模型的应用层类似,负责应用程序之间的通信和数据交换。在 TCP/IP 模型中,应用层包括各种应用层协议,如 HTTP、FTP、SMTP 等。

  2. 传输层:在 TCP/IP 模型中,传输层主要包括两个协议:传输控制协议(TCP)和用户数据报协议(UDP)。TCP 提供可靠的、面向连接的数据传输,而 UDP 提供无连接的数据传输。

  3. 网络层:网络层在 TCP/IP 模型中对应于 OSI 模型的网络层,负责数据包的路由和转发。在TCP/IP 模型中,主要使用 Internet 协议(IP)来实现网络层功能。

  4. 网络接口层:网络接口层对应于 OSI 模型的数据链路层和物理层,负责定义硬件设备与网络之间的接口标准,以及数据的传输和接收。

        5.3 UDP 协议

        用户数据报协议。

特点:

        1)无连接、不可靠通信

        不事先建立连接,数据按照数据包发出去,一包数据包含:自己的 IP 、程序端口号,目的地 IP 、程序端口和数据(限制在 64 KB内)等。

        发送对方不管对方是否在线,数据在中间丢失也不管,如果接收对方收到数据也不返回确认,故是不可靠的。

        2)通信效率高

        适合场所:语音通话、视频直播等等。

        3)全双工

        通信双方,收发消息都是正常无问题的。

        5.4 TCP 协议

特点:

        1)面向连接、可靠通信

        2)TCP 的最终目的:要保证在不可靠的信道上实现可靠的传输。

        3)TCP 主要有三个步骤实现可靠传输:三次握手建立连接,传输数据进行确认,四次挥手断开连接。

        4)全双工

        通信双方,收发消息都是正常无问题的。

        5.4.1 三次握手来确认双方建立连接

        第一次握手(SYN):客户端向服务器发送一个带有 SYN 标志的数据包,表示请求建立连接。此时客户端进入 SYN_SENT 状态。

        简单来说,第一次握手可以说明:客户端此时是否具备发消息的能力。

        第二次握手(SYN + ACK):服务器接收到客户端发送的 SYN 数据包后,向客户端发送一个带有 SYN 和 ACK 标志的数据包,表示确认收到请求,并同意建立连接。此时服务器进入 SYN_RECV 状态。

        简单来说,第二次握手可以说明:假设服务端收到了来自客户端的消息,此时说明服务端具备收到消息的能力,服务端响应回客户端,此时说明服务端具备发消息的能力。

        第三次握手(ACK):客户端接收到服务器发送的带有 SYN 和 ACK 标志的数据包后,向服务器发送一个带有 ACK 标志的数据包,表示确认收到服务器的确认,并同意建立连接。此时客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。

        简单来说,第三次握手可以说明:假设客户端收到了服务端的响应,接着客户端正式发送请求建立客户端与服务端的联系,此时说明客户端具备了发送消息的能力。

        通过三次握手,客户端和服务器能够确认彼此的通信状态,确保双方能够正常通信。如果在三次握手过程中出现任何问题,连接建立将失败,双方将重新发起连接请求。

        通过三次握手来判断双方是否都具备收发消息的能力。

        5.4.2 传输数据可靠性

        传输数据会进行确认,以保证数据传输的可靠性。

        连接建立之后,客户端给服务端发了消息,服务端收到消息后会回一个确认消息。客户端才会认为数据发成功了,假如服务端没有回确认消息,那么客户端认为该数据有问题,没有发送成功,则会重新再发一次。以保证数据传输的可靠性。

        5.4.3 四次挥手断开连接

        目的是确保双方数据的收发都已经完成。

        第一次挥手:客户端发送断开连接请求到服务器。客户端已经将全部消息发送完毕了,没有数据发送了。

        第二次挥手:服务端返回一个响应。此时可能服务器还没将数据接收完毕,所以发送稍等请求。

        第三次挥手:服务端再返回一个响应。服务器已经将全部数据接收完毕了,发送确认断开响应。

        第四次挥手:客户端收到服务端确认断开的响应。再发出正式确认断开连接请求。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大模型接口管理和分发系统One API

老苏就职于一家专注于音视频实时交互技术和智能算法的创新企业。公司通过提供全面的 SDK 和解决方案,助力用户轻松实现实时音视频通话和消息传递等功能。尽管公司网站上有详细的文档中心,但在实际开发中,仍面临大量咨询工作。 鉴于此&#x…

知识图谱嵌入领域的重要研究:编辑基于语言模型的知识图谱嵌入

今天,向大家介绍一篇在知识图谱嵌入领域具有重要意义的研究论文——Editing Language Model-based Knowledge Graph Embeddings。这项工作由浙江大学和腾讯公司的研究人员联合完成,为我们在动态更新知识图谱嵌入方面提供了新的视角和方法。 研究背景 在…

Linux安装MongoDB超详细

Linux端安装 我们从MonDB官网下载Linux端的安装包,建议下载4.0版本 打开虚拟机,在虚拟机上安装传输工具lrzsz,将下载好的.tgz包拖到虚拟机当中,拖到/usr/local/mongoDB目录下, [rootserver ~]# yum install -y lrzsz [rootser…

如何使用 Vercel 托管静态网站

今天向大家介绍 Vercel 托管静态网站的几种方式,不熟悉 Vercel 的伙伴可以看一下之前的文章:Vercel: 开发者免费的网站托管平台 Github 部署 打开 Vercel 登录界面,推荐使用 GitHub账号 授权登录。 来到控制台界面,点击 Add New …

四川古力未来科技抖音小店:科技新宠,购物新体验

在当下数字化、智能化的时代,电商平台如雨后春笋般涌现,其中不乏一些富有创新精神和实力雄厚的科技企业。四川古力未来科技有限公司就是其中的佼佼者,其抖音小店更是凭借其独特的魅力和优质的服务,赢得了广大消费者的青睐。 一、科…

6步教你APP广告高效变现,收益翻倍秘诀大揭秘!

移动应用广告变现最佳实践与策略指南 在移动应用市场中,广告变现已成为开发者和公司获取收益的重要途径。然而,如何在保证用户体验的同时,实现广告收入的最大化,成为了众多开发者和公司面临的挑战。本文将为您介绍一些最佳的实践…

Seal^_^【送书活动第2期】——《Flink入门与实战》

Seal^_^【送书活动第2期】——《Flink入门与实战》 一、参与方式二、本期推荐图书2.1 作者简介2.2 编辑推荐2.3 前 言2.4 本书特点2.5 内容简介2.6 本书适用读者2.7 书籍目录 三、正版购买 一、参与方式 评论:"掌握Flink,驭大数据,实战…

nginx配置https及wss

环境说明 服务器的是centos7 nginx版本nginx/1.20.1 springboot2.7.12 nginx安装教程点击这里 微信小程序wss配置 如果您的业务是开发微信小程序&#xff0c; 请先进行如下配置。 boot集成websocket maven <dependency><groupId>org.springframework.boot<…

APP UI自动化测试,思路全总结在这里了

首先想要说明一下&#xff0c;APP自动化测试可能很多公司不用&#xff0c;但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的&#xff0c;所以为了更好的待遇&#xff0c;我们还是需要花时间去掌握的&#xff0c;毕竟谁也不会跟钱过不去。 接下来&#xff0c…

Microsoft Edge:探索你可能未充分利用的8个实用功能

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

实时数据同步工具的真正作用和对应应用场景

在当今商业环境中&#xff0c;企业规模的不断扩大带来了对数据同步的更高要求。实时数据同步解决方案对于确保数据的一致性、提升业务灵活性以及增强决策的精准度具有关键作用。 本文将深入分析实时数据同步技术的关键优势&#xff0c;并探讨其在不同行业场景下的应用价值&…

复习python函数

复习python函数 1.对函数的理解函数的传递方式返回值 return可通过help()函数查看函数说明作用域 2.不定长参数3.递归4.高阶函数将函数作为参数传递将函数作为返回值返回 5.匿名函数6.装饰器 1.对函数的理解 函数可以用来保存一些可执行的代码&#xff0c;并且可以在需要时&am…

前端Vue中async/await、promise 和setTimeout工作原理和执行顺序

前端Vue中async/await、Promise 和 setTimeout 在 JavaScript 中都是处理异步操作的方法&#xff0c;但它们的工作原理和执行顺序有所不同。以下是它们的执行顺序和关系的简要说明&#xff1a; 同步代码执行&#xff1a;在任何异步操作开始之前&#xff0c;首先会执行所有的同步…

vr太阳光参数怎么设置,vr快速渲染方法

VR场景中实现逼真的光照效果&#xff0c;太阳光参数的设置尤为关键。真实的太阳光可提升效果图的质感&#xff0c;论VR太阳光参数的设置技巧&#xff0c;包括光源类型选择、光照强度调整、阴影效果优化等多个方面&#xff0c;喜爱一起来看看vr太阳光真实感设置参数吧。 vr太阳光…

大数据信用风险竟然是这样形成的!查询方法也很简单

在大数据时代背景下&#xff0c;大数据信用风险成为了众多机构关注的焦点。这类风险涵盖了多头借贷、履约行为、联系人以及司法等多个方面。本文将深入解析大数据信用风险的形成原因及其查询方法&#xff0c;让我们一起来探索一下。 大数据信用风险主要表现在以下几个方面&…

Python-GEE遥感云大数据分析、管理与可视化

原文链接&#xff1a;Python-GEE遥感云大数据分析、管理与可视化https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601238&idx2&sn6b0557cf61451eaff65f025d648da869&chksmfa820db1cdf584a76de953b96519704177e6206d4ecd47a2f2fabbcac2f7ea619b0bce184…

Ubuntu镜像下载与安装2024.4版本(超适合新手)

前言&#xff1a; 在VMware中安装Ubuntu镜像&#xff0c;首先需要去下载镜像&#xff0c;但是由于服务器在国外&#xff0c;下载速度相对较慢&#xff0c;国内也有镜像&#xff0c;较推荐在国内镜像站下载&#xff0c;例如阿里镜像和清华镜像。 官网&#xff1a;Ubuntu系统下…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套 部分题目分享&#xff0c;完整版带答案(有答案和解析&#xff0c;答案非官方&#xff0c;未仔细校正&#xff0c;仅供参考&#xff09;&#xff08;共十套&#xff09;获取&#xff08;WX:didadidadidida313&#xff0c…

hover显示播放遮罩层效果

我们都知道视频列表其实是一个封面列表,鼠标放上去时,有反馈:即hover时显示播放遮罩层,点击,跳转到对应的视频播放页。这是目前主流视频网站的一个通用效果。 我们在实现时应该理清思路: 1、每个视频位置处放的是封面图片 2、播放按钮遮罩层需完全覆盖封面图片,并且正…

vLLM-prefix浅析(System Prompt,大模型推理加速)

原文&#xff1a;vLLM-prefix浅析&#xff08;System Prompt&#xff0c;大模型推理加速&#xff09; 简介 本文浅析了在大模型推理加速方面一个非常优秀的项目 vLLM 的一个新特性 Prefix。在 Prompt 中有相同前缀时可以提高吞吐量降低延迟&#xff0c;换句话说可以省去这部分…