分布式技术专题 | TCP在分布式网络中的通信机制与底层实现

深入解析分布式网络中的TCP通信协议实现

  • 跨地域通信与资源共享
    • 网络节点与主机的定义
    • 网络技术通信机制
      • TCP/IP协议模型
        • TCP/IP分层机制
          • TCP的Socket链接处理控制
          • TCP的优势和特性
            • 自动差错控制
            • 正确性和有序性
          • TCP的Socket使用端口在应用程序间通信
            • TCP的Socket使用端口
            • 套接字操作

跨地域通信与资源共享

计算机网络,作为现代通信技术与计算机技术融合的杰出产物,它通过各类通信线路将遍布全球的计算机紧密相连,构建成一个功能强大的网络系统。在这个网络中,计算机可以轻松地相互通信,实现硬件、软件和数据资源的共享。简而言之,计算机网络就是通过各种有线或无线设施连接起来的计算机集合。
在这里插入图片描述

网络节点与主机的定义

在计算机网络中,每一个连接的设备都被称为节点。这些节点不仅包括计算机,还涵盖了打印机、路由器、网桥、网关和哑终端等多种设备。为便于区分,本书将网络中的计算机节点特别称为“主机”,而将其他设备统称为“节点”。
在这里插入图片描述

网络技术通信机制

人们早已习惯了一个简单的动作——打开浏览器,输入URL地址,随后,远程Web服务器上的网页内容便如魔法般呈现在我们眼前。这一过程的背后,其实蕴含着网络编程的精髓。网络编程的核心任务之一,便是开发类似于浏览器的客户端程序和Web服务器这样的服务器端程序,确保两者能够高效、有序地交换数据,这一切所实现的基础就是TCP/IP协议,接下来我们要针对性分析

TCP/IP协议模型

传输控制协议(TCP)作为一种基于流的网络通信方式,TCP/IP模型的发展可追溯至美国国防部高级研究计划局(ARPANET)及后续的Internet。ARPANET最初仅连接了美国境内的四所大学,随后迅速扩展,通过租用电话线连接了数百所大学和政府部门。最终,它发展成为全球最具影响力的互联网——Internet。

TCP/IP模型在保持网络分层思想的基础上,进行了层次简化,并在除主机-网络层外的各层提供了全面的协议支持,形成了TCP/IP协议集。这一协议集凭借其高效性和实用性,已成为当前最受欢迎的商业化协议,并在全球范围内确立了其工业标准或“事实标准”的地位。

TCP/IP分层机制

TCP通过确保可靠递交和定序,为支持双向通信的客户与服务器之间提供了稳定的字节流通信,进而减轻了额外的操作负担。该协议在两台设备间构建了一个“虚拟连接”,使得数据流能够顺畅地通过这个连接进行传输。
在这里插入图片描述TCP利用低级的通信协议(即IP协议)在设备间建立连接。这种连接为字节流的发送和接收提供了接口,同时能够透明地将数据转换为IP数据报包。当然,网络故障仍有可能影响数据的递交,但TCP通过处理重发包等问题来应对这一挑战,并且仅在出现严重情况,如无法路由到网络主机或连接丢失时,才会通知程序员。

TCP的Socket链接处理控制

两台机器之间的TCP连接是通过套接字来表示的。TCP套接字是与特定的一台机器建立的连接,而UDP套接字则可以从多台机器发送或接收数据。
在这里插入图片描述
其次,UDP套接字仅限于发送和接收数据包,而TCP则允许通过字节流(由InputStream和OutputStream表示)来传输数据。这些数据流在网络中传输时会被转换为数据报包,而这一过程并不需要程序员的直接干预。

TCP的优势和特性

TCP流上的数据传输相较于UDP信息包传输,具有更高的可靠性。TCP通过虚拟连接发送数据,这些数据包含校验和,以确保数据的完整性,这一点与UDP相似。但TCP的优越之处在于,它提供了数据递交的保证:若在传输过程中数据包丢失,TCP会进行重传,从而确保数据的准确送达。这种机制使得TCP在数据传输的可靠性方面显著优于UDP。

自动差错控制

当TCP通过数据报发送数据集时,会自动启动一个定时器。在TCP协议中,一旦接收方发出确认信息,该定时器就会停止。

如果在定时器设定的时间内没有收到确认,数据包将会被重新发送。这确保了通过TCP套接字写入的数据,在无需程序员进一步干预的情况下(除非遇到使整个网络瘫痪的极端情况),能够可靠地到达通信的另一端。此外,所有用于差错控制的代码处理都由TCP协议自动完成。

正确性和有序性

由于TCP连接中的数据传输是通过IP数据报实现的,这可能导致数据报包在两台通信的机器之间以乱序到达。对于从TCP套接字读取信息的程序而言,这种乱序到达可能会造成困扰,因为字节流的原本顺序可能被打乱,从而影响数据的可靠性。

TCP协议能够处理这类定序问题。每个数据报包都附带一个序列号,这个序列号用于对数据进行排序。如果后发送的数据在先发送的数据之前到达,它们将被暂时存放在队列中,直到可以确保数据的顺序性。只有当数据可以按照正确的顺序排列时,才会通过套接字接口传递给应用程序。这一机制确保了数据的正确性和有序性。

TCP的Socket使用端口在应用程序间通信

TCP这采用了通信端口的概念来区分不同的应用程序。许多服务和客户端在同一端口上运行,如果没有端口号进行区分,我们将无法识别它们。
在这里插入图片描述当TCP套接字与另一台机器建立连接时,它需要两个关键信息来连接到远程终端:机器的IP地址和端口号。此外,TCP套接字还会绑定一个本地IP地址和端口号,以便远程机器能够识别是哪个应用程序建立了连接。

TCP的Socket使用端口

在TCP中,端口的概念与UDP中的端口相似,均由1至65536之间的数字来表示。其中,小于1024的端口被预留给诸如HTTP、FTP、SMTP、POP3和telnet等广为人知的服务使用。下图详细列出了一些这样的知名服务及其对应的端口号。
在这里插入图片描述

套接字操作

客户端 - TCP套接字具备多种功能,包括:与远程主机建立连接、向远程主机发送数据、从远程主机接收数据,以及关闭连接。
在这里插入图片描述服务端 - TCP套接字还可以执行以下操作:绑定至本地端口,以接受来自远程主机的连接请求;并在完成任务后,从本地端口解除绑定。同时,它还能够接受和处理远程主机的传入连接。

这两种套接字被归入不同的类别,供客户端或服务器使用(尽管某些客户端也可以作为服务器,某些服务器也可作为客户端)。但通常的做法是将客户端和服务器进行区分。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp封装虚拟列表滚动组件

uniapp封装虚拟列表滚动组件 这里用到一个列表&#xff0c;然后数据可能有很多很多…&#xff0c;一次性全部渲染到dom上会卡顿&#xff0c;很废性能&#xff0c;于是用了这个虚拟列表就变丝滑很多很多。 组件mosoweInventedList 代码&#xff1a; <!-- 虚拟滚动列表组件&a…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench&#xff1f; 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术&#xff0c;一个新问题摆在眼前&#xff1a;缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此&#xff0c;来自清华大…

mysql主键自增连续新增时报错主键重复-Duplicate entry “x” for key PRIMARY

mysql主键自增连续新增时报错主键重复 1、mysql数据库设置数据库主键自增的规律 id -- AUTO_INCREMENT2、可视化工具查看自增没问题 3、问题描述 新增第一个时操作成功&#xff0c;新增第二个时候操作失败报错&#xff1a; Duplicate entry “x” for key PRIMARY4、分析&a…

千益畅行,旅游卡,如何赚钱?

​ 赚钱这件事情&#xff0c;只有自己努力执行才会有结果。生活中没有幸运二字&#xff0c;每个光鲜亮丽的背后&#xff0c;都是不为人知的付出&#xff01; #旅游卡服务#

简过网:考公务员难度大吗,一般考几年才上岸!

先调查一下&#xff0c;大家考公务员都是几年才上岸的&#xff1f; 最近有网友私信小编&#xff0c;普通人考公要准备多久才能上岸&#xff0c;其实对于多久能上岸这个问题&#xff0c;并没有一个准确的数字&#xff0c;众所周知&#xff0c;公务员考试是有一定难度的&#xf…

Git入门 本地仓库 远端仓库 多分支

Git入门 Git入门本地git初始化git仓库初始化 创建远端仓库githubgitee 指定远端仓库推送至远端多分支将feature分支合并至dev分支 其他开发者 Git入门 本地git初始化 git仓库初始化 mkdir myrepo # 创建仓库文件夹 cd myrepo/ # 进入目录 git init # 初始化git仓库 (创建.g…

C - Popcorn(abs358)

题意&#xff1a;有n个摊子&#xff0c;m个爆米花&#xff0c;想花费最少去的店铺买到所有的口味的爆米花&#xff0c;找到每一列都为‘o’的最少行数。 分析&#xff1a;用dfs寻找最少路径 #include<bits/stdc.h> using namespace std; typedef long long ll; char x;…

CAN通信波形【示波器抓取】

在测试bms系统过程中&#xff0c;在上位机发现无法读取CAN通信&#xff0c;尝试使用示波器抓取CAN通信波形&#xff0c;&#xff0c;去确定CAN通信是否正常。 做一想要从车上测出can总线上的数据还不太容易。 于是我首先使用示波器&#xff08;我使用的示波器型号是TDS 220&am…

第十四届蓝桥杯省赛C++B组E题【接龙数列】题解(AC)

需求分析 题目要求最少删掉多少个数后&#xff0c;使得数列变为接龙数列。 相当于题目要求求出数组中的最长接龙子序列。 题目分析 对于一个数能不能放到接龙数列中&#xff0c;只关系到这个数的第一位和最后一位&#xff0c;所以我们可以先对数组进行预处理&#xff0c;将…

opencascade AIS_InteractiveContext源码学习7 debug visualization

AIS_InteractiveContext 前言 交互上下文&#xff08;Interactive Context&#xff09;允许您在一个或多个视图器中管理交互对象的图形行为和选择。类方法使这一操作非常透明。需要记住的是&#xff0c;对于已经被交互上下文识别的交互对象&#xff0c;必须使用上下文方法进行…

JVM专题十一:JVM 中的收集器一

上一篇JVM专题十&#xff1a;JVM中的垃圾回收机制专题中&#xff0c;我们主要介绍了Java的垃圾机制&#xff0c;包括垃圾回收基本概念&#xff0c;重点介绍了垃圾回收机制中自动内存管理与垃圾收集算法。如果说收集算法是内存回收的方法论&#xff0c;那么垃圾收集器就是内存回…

OBS 免费的录屏软件

一、下载 obs 【OBS】OBS Studio 的安装、参数设置和录屏、摄像头使用教程-CSDN博客 二、使用 obs & 输出无黑屏 【OBS任意指定区域录屏的方法-哔哩哔哩】 https://b23.tv/aM0hj8A OBS任意指定区域录屏的方法_哔哩哔哩_bilibili 步骤&#xff1a; 1&#xff09;获取区域…

【智能算法】目标检测算法

目录 一、目标检测算法分类 二、 常见目标检测算法及matlab代码实现 2.1 R-CNN 2.1.1 定义 2.1.2 matlab代码实现 2.2 Fast R-CNN 2.2.1 定义 2.2.2 matlab代码实现 2.3 Faster R-CNN 2.3.1 定义 2.3.2 matlab代码实现 2.4 YOLO 2.4.1 定义 2.4.2 matlab代码实现…

[开源软件] 支持链接汇总

“Common rules: 1- If the repo is on github, the support/bug link is also on the github with issues”" label; 2- Could ask questions by email list;" 3rd party software support link Note gcc https://gcc.gnu.org openssh https://bugzilla.mindrot.o…

作业7.2

用结构体数组以及函数完成: 录入你要增加的几个学生&#xff0c;之后输出所有的学生信息 删除你要删除的第几个学生&#xff0c;并打印所有的学生信息 修改你要修改的第几个学生&#xff0c;并打印所有的学生信息 查找你要查找的第几个学生&#xff0c;并打印该的学生信息 1 /*…

WSL2安装ContOS7并更新gcc

目录 WSL2安装CentOS7下载安装包安装启动CentOS7 CentOS7更换国内源gcc从源码安装gcc卸载gcc CMake中使用gcc关于linux配置文件参考 WSL2安装CentOS7 Windows11官方WSL2已经支持Ubuntu、Open SUSE、Debian。但是没有centos&#xff0c;所以centos的安装方式略有不同。 下载安…

VehicleSPY的安装与使用

VehicleSPY介绍 Vehicle Spy 是美国英特佩斯公司的一款集成了诊断、节点/ECU仿真、数据获取、自动测试和车内通信网络监控等功能的工具&#xff0c;Vehicle Spy软件支持的应用场景很多&#xff0c;无法一一列举&#xff0c;以下是一些常见的应用&#xff1a; 总线监控&#x…

解锁IDEA中Git/SVN Issue Navigation功能:80%程序员都不懂的秘密武器~

文章目录 前言什么是 Git Issue Navigation&#xff1f;配置 Git Issue Navigation1. 打开设置2. 导航到 Issue Navigation 设置3. 添加新的 Issue Navigation 规则具体示例配置 使用 Git Issue Navigation在提交信息中使用 Issue ID实际导航到连接 优点1. 快速定位问题2. 提高…

低代码+定制:优化项目管理的新方案

引言 在当今快速变化的商业环境中&#xff0c;企业需要更加灵活、高效的项目管理工具。低代码平台作为一种新的开发方式&#xff0c;因其能够快速构建应用程序而受到广泛关注。与此同时&#xff0c;软件定制开发仍然是满足特定复杂需求的重要手段。在项目管理中&#xff0c;低代…

javaEE——Servlet

1.web开发概述 所谓web开发,指的是从网页中向后端程序发送请求,与后端程序进行交互 2.java后端开发环境搭建 web后端(javaEE)程序需要运行在服务器中的&#xff0c;这样前端才可以访问得到 3.服务器是什么&#xff1f; ①服务器就是一款软件&#xff0c;可以向其发送请求&#…