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

news2024/12/22 23:55:22

深入解析分布式网络中的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.coloradmin.cn/o/1887870.html

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

相关文章

5G(NR) NTN 卫星组网架构

5G(NR) NTN 卫星组网架构 参考 3GPP TR 38.821 5G NTN 技术适用于高轨、低轨等多种星座部署场景,是实现星地网络融合发展的可行技术路线。5G NTN 网络分为用户段、空间段和地面段三部分。其中用户段由各种用户终端组成,包括手持、便携站、嵌入式终端、车…

鸿蒙应用开发-时间屏幕

点击下载源码: https://download.csdn.net/download/liuhaikang/89509449 做一个时间屏幕,可以点击切换白色和黑色,有渐变效果,使用到了鸿蒙的动画效果。 在这个设计中,我们首先引入了通用能力包,以实现功…

uniapp做小程序内打开地图展示位置信息

使用场景&#xff1a;项目中需要通过位置信息打开地图查看当前位置信息在地图那个位置&#xff0c;每个酒店有自己的经纬度和详细地址&#xff0c;点击地图按钮打开内置地图如图 方法如下&#xff1a; <view class"dttu" click"openMap(info.locationY,info.…

24/07/02数据结构(1.1201)算法效率顺序表

数据结构基本内容:1.时间复杂度 空间复杂度2.顺序表链表3.栈 队列4.二叉树5.排序 数据结构是存储,组织数据的方式.指相互之间存在一种或多种特定关系的数据元素的集合 算法是定义良好的计算过程.取一个或一组值为输入并产生一个或一组值为输出. 需要知道虽然选择题有20-30个…

什么是Java泛型擦除?

JDK1.5之后引入泛型擦除的概念。 目录 验证逻辑 实际编译后的结果&#xff1a; 验证例子&#xff1a; 两个类型相同&#xff0c;表面泛型都被擦出了&#xff0c;都是Arraylist。 List<String> list1 new Arraylist<>(); List<Integer> list2 new Arrayli…

自动化一些操作

下拉选择框 from selenium import webdriver from time import sleep # 导包 from selenium.webdriver.support.select import Select driver webdriver.Edge() driver.get(r"D:\WORK\ww\web自动化_day01_课件笔记资料代码\web自动化_day01_课件笔记资料代码\02_其他资料…

配置windows环境下独立浏览器爬虫方案【不依赖系统环境与chrome】

引言 由于部署浏览器爬虫的机器浏览器版本不同&#xff0c;同时也不想因为部署了爬虫导致影响系统浏览器数据&#xff0c;以及避免爬虫过程中遇到的chrome与webdriver版本冲突。我决定将特定版本的chrome浏览器与webdriver下载到项目目录内&#xff0c;同时chrome_driver在初始…

【车载开发系列】SPI总线通信技术

【车载开发系列】SPI总线通信技术 【车载开发系列】SPI总线通信技术 【车载开发系列】SPI总线通信技术一. 什么是SPI二. 应用范围三. 协议特点1&#xff09;传输速率2&#xff09;主要功能3&#xff09;拓扑结构4&#xff09;接口配置 四. SPI总线原理五. 信号列表六. SPI传输时…

攻防世界-WEB-catcat-new

前言 .................. 开干 正文 信息收集 有意思 估计是权限不够导致无法访问 我们点击几只小猫看看有什么东西 好的,?File 试试看是否存在任意文件读取 思路 成功,接下来我们尝试获取历史记录 这里补充一下知识点 /proc/self proc是一个伪文件系统&#xff0c;它提…

PDF文档如何统计字数,统计PDF文档字数的方法有哪些?

在平时使用pdf阅读或者是处理文档的时候&#xff0c;常常需要统计文档的字数。pdf在查看文字时其实很简单。 PDF文档是一种常见的电子文档格式&#xff0c;如果需要对PDF文档中的字数进行统计&#xff0c;可以使用以下方法&#xff1a; Adobe Acrobat DC&#xff1a;Adobe Ac…

Linux 防火墙开放端口

启动防火墙服务&#xff1a;systemctl start firewalld 查看防火墙开放端口 &#xff1a;firewall-cmd --list-ports 开放3306端口&#xff1a;firewall-cmd --zonepublic --add-port2375/tcp --permanent 防火墙重启&#xff1a;firewall-cmd --reload

html+css+js气球消除小游戏

气球消除小游戏 消除15个就成功 源码在图片后 点赞加关注&#xff0c;谢谢 左上角的数字显示消除气球的数量 定时随机生成气球 &#x1f388;&#x1f388;&#x1f388; 图片 源代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset&…

2.3.2 主程序和外部IO交互 (文件映射方式)----IO Client实现

2.3.2 主程序和外部IO交互 &#xff08;文件映射方式&#xff09;----IO Client C实现 和IOServer主要差别&#xff1a; 1 使用Open_Client 连接 2 一定要先打开IOServer&#xff0c;再打开IO_Client 效果显示 1 C 代码实现 1.1 shareddataClient.h 头文件中引用 和sharedd…

0 TMS320F28379D 开坑

开坑原因 最近开始做实验&#xff0c;实验室的主控采用的是F2812FPGA&#xff0c;属于够用但不好用的状态。FPGA用于生成调制信号&#xff0c;DSP完成采样和控制。师兄师姐研究拓扑及调制策略&#xff0c;对驱动数量以及驱动逻辑有比较高的要求&#xff0c;因此不好脱离FPGA&a…

机器学习原理之 -- 支持向量机分类:由来及原理详解

支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是统计学习理论的一个重要成果&#xff0c;广泛应用于分类和回归问题。SVM以其高效的分类性能和良好的泛化能力在机器学习领域中占据重要地位。本文将详细介绍支持向量机的由来、基本原理、构建过程及其优缺点。…

【Excel操作】Python Pandas判断Excel单元格中数值是否为空

判断Excel单元格中数值是为空&#xff0c;主要有下面两种方法&#xff1a; 1. pandas.isnull 2. pandas.isna判断Excel不为空&#xff0c;也有下面两种方法&#xff1a; 1. pandas.notna 2. pandas.notnull假设有这样一张Excel的表格 我们来识别出为空的单元格 import panda…

基于Hadoop平台的电信客服数据的处理与分析①项目准备阶段---项目技术预研(技术架构)

任务描述 掌握项目的总体功能&#xff0c;及实现流程。预习项目中所使用到的技术和知识点。 任务指导 一、项目效果展示 二、项目架构 1、总体架构&#xff1a; 2、技术架构 技术清单&#xff1a; 功能 组件 说明 消息中间件Kafka消息队列数据采集Flume日志采集工具存储…

js获取当前浏览器地址,ip,端口号等等

前言&#xff1a; js获取当前浏览器地址&#xff0c;ip&#xff0c;端口号等等 window.location属性查询 具体属性&#xff1a; 1、获取他的ip地址 window.location.hostname 2、获取他的端口号 window.location.port 3、获取他的全路径 window.location.origin 4、获取…

机器学习 C++ 的opencv实现SVM图像二分类的测试 (三)【附源码】

机器学习 C 的opencv实现SVM图像二分类的测试 (三) 数据集合下载地址&#xff1a;https://download.csdn.net/download/hgaohr1021/89506900 根据上节得到的svm.xml&#xff0c;测试结果为&#xff1a; #include <stdio.h> #include <time.h> #include <o…

25.labview数据采集中的读取和写入文本文件和Excel表格文件

①本文将会讲解labview读取和写入文本文件和Excel文件的几种不同方式&#xff0c;讲解程序的基本原理&#xff0c;并提出具体的实施方案&#xff0c;本文内容如下所示。 ②本文文章结束会提供大家 文本和表格读取写入的源程序 &#xff0c;以便于大家学习和使用。 本文中可能用…