分布式技术专题 | 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.mfbz.cn/a/764739.html

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

相关文章

解决Python用xpath爬取不到数据的一个思路

前言 最近在学习Python爬虫的知识,既然眼睛会了难免忍不住要实践一把。 不废话直接上主题 代码不复杂,简单的例子奉上: import requests from lxml import etreecookie 浏览器F12网络请求标头里有 user_agent 浏览器F12网络请求标头里有…

Facebook助力中东地区博弈游戏广告营销新视界

Facebook助力中东地区博弈游戏广告营销新视界 中东地区,作为世界上充满活力和潜力的游戏市场之一,近年来,Slots游戏在该地区的热度持续攀升。众多游戏开发商和广告主纷纷寻求有效的推广方式,以吸引更多的潜在用户。在这个过程中&…

Python--进程基础

创建进程 os.fork() 该方法只能在linux和mac os中使用,因为其主要基于系统的fork来实现。window中没有这个方法。 通过os.fork()方法会创建一个子进程,子进程的程序集为该语句下方的所有语句。 import os​​print("主进程的PID为:" , os.g…

如何利用GPT-4o生成有趣的梗图

文章目录 如何利用GPT-4o生成有趣的梗图一、引言二、使用GPT-4o生成梗图1. 提供主题2. 调用工具3. 获取图片实际案例输入输出 三、更多功能1. 创意和灵感2. 梗图知识 四、总结 如何利用GPT-4o生成有趣的梗图 梗图,作为互联网文化的一部分,已经成为了我们…

【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 《号称最强轻量化网络》

论文地址:https://arxiv.org/pdf/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 文章速览 文章摘要 MobileNetV4引入了一个名为Universal Inverted Bottleneck (UIB) 的新搜索模块,这个模块融合…

MCU 是什么?一文了解MCU 产业

MCU(Microcontroller Unit),中文名为“微控制器单元”、“单片微型计算机”。MCU 将中央处理器(CPU)、内存(RAM)、输入 / 输出界面(I/O)等等一大堆东西,全部整…

kafka的架构

一、架构图 Broker:一台 kafka 服务器就是一个 broker。一个kakfa集群由多个 broker 组成。一个 broker 可以容纳多个 topic。 Producer:消息生产者,就是向 kafka broker 发消息的客户端 Consumer:消息消费者,向 kafk…

Charles抓包工具踩坑记录

请添加图片描述 Charles抓包工具 证书问题 输入网址:chls.pro/ssl 第一个下载证书网址,会出现一直加载不出来,无法下载证书的情况 解决:选择下面save Charles Root。。。 2 证书在mac中禁止修改问题 解决也很简单,按照…

基于ESP32 IDF的WebServer实现以及OTA固件升级实现记录(三)

经过前面两篇的前序铺垫,对webserver以及restful api架构有了大体了解后本篇描述下最终的ota实现的代码以及调试中遇到的诡异bug。 eps32的实际ota实现过程其实esp32官方都已经基本实现好了,我们要做到无非就是把要升级的固件搬运到对应ota flash分区里面…

自定义动态数据源+事务控制

1:首先yml配置两个数据库的链接 spring:application:name: xxxxmain:banner-mode: OFFdatasource: # 默认数据源 datamarkdruid: # 关闭数据库的 web 访问stat-view-servlet:enabled: falseweb-stat-filter:enabled: falsefilt…

巴比达内网穿透:深度剖析其在解决远程连接挑战中的技术优势

在信息技术日新月异的今天,远程协作与管理的需求日益增长,但内网环境的隔离性一直是横亘在高效远程操作面前的一道坎。本文将深入探讨一款专为打破此壁垒而生的工具——巴比达内网穿透,如何以其技术创新和高效性能,成为解决远程连…

electron-builder 打包过慢解决

报错内容如下 > 6-241.0.0 build > electron-builder • electron-builder version24.13.3 os10.0.22631 • loaded configuration filepackage.json ("build" field) • writing effective config filedist\builder-effective-config.yaml • pack…

【Linux详解】进程地址空间

目录 研究背景 验证地址空间 实验一:父子进程变量地址一致性 实验二:变量值修改后父子进程的差异 分析与结论 实验三:进程地址空间验证 理解进程地址空间 区域与页表 写时拷贝机制 进程地址空间的意义 文章手稿: xmind…

7月信用卡新规下:信用卡欠的钱不用还了?

说到信用卡,现在基本上人手一张,大家都有使用过。但你知道吗,使用信用卡不是这么简单容易的事,比如会对你的贷款有影响,透支不还逾期对生活的影响,信用卡新规对持卡人和银行那边的影响。 一、只要不逾期&am…

hamibot 学习

1.参考文档: https://blog.csdn.net/zxl0428/article/details/1285318731.参考官网 快速入手步骤:注册,安装客户端,添加设备,开发脚本,运行脚本 https://hamibot.com/guide1.安装客户端 2.添加设备 …

高通骁龙(Qualcomm Snapdragon)CDSP HVX HTP 芯片简介与开发入门

1. Hexagon DSP/HVX/HTP 硬件演进 说到高通骁龙芯片大家应该不会陌生,其作为最为广泛的移动处理器之一,几乎每一个品牌的智能手机都会使用高通骁龙的处理器。 高通提供了一系列骁龙芯片解决方案。根据性能强弱分为了5个产品系列:从最高端的…

【neo4j图数据库】入门实践篇

探索数据之间的奥秘:Neo4j图数据库引领新纪元 在数字化浪潮汹涌的今天,数据已成为企业最宝贵的资产之一。然而,随着数据量的爆炸性增长和数据关系的日益复杂,传统的关系型数据库在处理诸如社交网络、推荐系统、生物信息学等高度互…

OPCUA相关概念和KepServer OPCUA连接PLC

文章背景 项目中需要使用OPC UA 来读取PLC的点位。本文简单介绍了OPC UA和使用KepServer软件连接PLC并读点。OPC相关概念 OPC之前,软件开发需要写大量驱动程序去连接设备,设备上的一个硬件改变,应用程序都有可能需要重写,不同设备…

水经微图Web版1.9.0发布

水经微图(简称“微图”)新版已上线,在该版本中主要新增了对WGS84图源加载、火星坐标图源加载和大字体图源加载功能,以及多面要素的加载功能。 现在,为你分享一下本轮迭代的主要新增功能,以及部分功能的效果…

STL空间配置器

空间配置器(allocator)(重点) 背景需求:在底层默默的实现空间的分配 问题:空间的申请与对象的创建两者分开,因为不断创建的时候可能会频繁的申请空间扩容。 类似操作:reserve函数…