运行在多个端系统上的程序是如何互相通信的?

一、进程通信

1.首先搞清楚一点,对于操作系统而言,进行通信的实际上是进程,而不是程序

2.一个进程可以被认为是运行在端系统上的一个程序,当多个进程运行在相同的端系统上的时候,它们使用进程间通信机制相互通信。对于进程间的通信规则由端系统上的操作系统确定。(对于进程间通信的方式查阅历史博客)

3.在两个不同端系统上的进程,通过跨越计算机网络相互交换报文而相互通信,具体而言,这两个进程可以通过网络接口进行通信,例如以太网接口、无线局域网接口等。

1.1 客户和服务器进程

        在一组进程之间的通信会话场景中,发起通信的进程会被标识为客户(client),在会话开始时等待联系的进程被标识为服务器(server)。

1.2 进程与计算机网络之间的接口

        我们知道,对于一个端系统上的两个进程之间相互通信的话,有相应的进程间通信机制。但对于不同端系统上的进程实现相互通信的话就需要通过网络接口(套接字);

套接字:同一个主机内应用层与运输层之间的接口,由于套接字是建立在网络应用层的可编程接口,因此,套接字也被称为应用程序与网络之间的应用程序编程接口(API);

套接字提供了一系列方法,如bind、listen、accept、connect、send、receive等,用于实现网络通信。例如,bind方法用于将套接字绑定到一个地址和端口,listen方法用于监听来自客户端的连接请求,accept方法用于接受客户端的连接请求并返回一个新的套接字对象,用于与客户端进行通信。

 对于套接字而言,它是应用层与运输层之间的接口,而对于应用程序开发者而言,可以控制套接字在应用层端的一切,但对该套接字运输层端几乎没有控制权。那么应用程序开发者对于运输层的控制仅限于以下两点:(1)选择的运输协议;(2)运输的参数,如最大缓存、最大报文段的长度等

1.3进程寻址

        为了向特定目的地发送邮件,需要知道目的地的地址,那么进程间相互通信也是如此,需要两个信息:(1)主机的地址(IP地址);(2)在目的主机中指定接收进程的标识符(端口号);

IP地址和端口号的作用:

P地址和端口号是网络通信中用来标识网络连接的两个重要信息

  1. IP地址:IP地址用于标识网络上不同的计算机或设备,它是网络通信中确定主机位置的关键。IP地址由四个字节组成,通常表示为xxx.xxx.xxx.xxx的形式,如192.168.1.1。IP地址可以区分不同的子网,从而实现网络分段和隔离。
  2. 端口号:端口号用于标识网络连接中的不同应用程序,它是网络通信中确定通信目标的关键。端口号由两个字节组成,通常表示为xxxx的形式,如80(HTTP服务)或22(SSH服务)。端口号可以区分不同的应用程序和服务,从而实现网络通信的隔离和隔离。

二、可供应用程序使用的运输服务 

2.1可靠数据传输

可靠传输协议:可靠传输协议是一种更高级的数据传输方式,它通过定义一组标准的方法和协议来实现数据传输的可靠性和一致性。常见的可靠传输协议包括TCP、UDP、QUIC等。这些协议通过提供一系列可靠性功能,如重传、超时、流量控制等,来保证数据传输的可靠性和一致性。

2.1.1TCP

(1)TCP的原理:
  1. 建立连接:在TCP中,建立连接需要进行三次握手。首先,发送方会向接收方发送一个SYN(同步)报文,表示它要开始建立连接。接着,接收方会回复一个SYN-ACK(同步确认)报文,表示它已经收到了发送方的SYN报文,并且准备开始建立连接。最后,发送方会再次向接收方发送一个ACK(确认)报文,表示它已经收到了接收方的SYN-ACK报文,从而完成三次握手,建立了连接。
  2. 传输数据:在建立了连接后,发送方会向接收方发送数据包,数据包中包含应用程序的数据。接收方在收到数据包后,会将其添加到接收缓冲区中,并发送一个ACK报文给发送方,表示它已经接收到了数据包。发送方在收到ACK报文后,会将该数据包从发送缓冲区中移除,从而继续发送下一个数据包。
  3. 断开连接:在传输数据完成后,发送方会向接收方发送一个FIN(结束)报文,表示它要断开连接。接着,接收方会收到一个ACK报文,表示它已经收到了发送方的FIN报文,从而确认连接已经断开。最后,发送方会再次向接收方发送一个FIN报文,表示它也要断开连接。接收方在收到FIN报文后,会发送一个ACK报文给发送方,表示它已经接收到了FIN报文,从而完成断开连接的流程。
  4. 重传机制:在传输数据过程中,如果数据包出现问题时,TCP会使用重传机制来重新传输数据包。重传机制包括快速重传和慢启动重传两种方式。快速重传是指在数据包丢失后,发送方会立即发送一个ACK报文给接收方,表示它已经接收到了数据包。慢启动重传是指在数据包丢失后,发送方会根据网络拥塞情况来控制发送的数据量,从而避免发送方发送过多数据而导致的网络拥塞。
(2)TCP的优缺点

优点:

  1. 可靠传输:TCP通过提供数据包的确认、重传和超时机制,来保证数据包的可靠传输。当发送方发送一个数据包后,它会等待接收方的确认,如果接收方没有确认该数据包,发送方会重新发送该数据包。TCP还提供了一种窗口控制机制,它允许接收方在接收数据时暂缓接收,从而避免发送方过多发送数据而导致的网络拥塞。
  2. 流量控制:TCP通过提供窗口控制机制,来控制发送方的发送速度,从而避免网络拥塞。当接收方告诉发送方它的接收窗口大小后,发送方会根据这个大小来控制发送的数据量,从而避免发送方发送过多数据而导致的网络拥塞。
  3. 可靠排序:TCP通过使用一个序列号来标识数据包的顺序,来保证数据的可靠排序。当发送方发送一个数据包后,它会等待接收方的确认,如果接收方没有确认该数据包,发送方会重新发送该数据包。

缺点:

  1. 慢启动:TCP在传输数据时,会使用一个慢启动机制,来避免网络拥塞。在传输开始时,发送方会根据网络拥塞情况来控制发送的数据量,从而避免发送方发送过多数据而导致的网络拥塞。这种慢启动机制可能会导致数据传输速度相对较低。
  2. 数据重传:当数据包在传输过程中出现问题时,TCP会使用重传机制来重新传输数据包。这种重传机制可能会导致数据传输速度相对较低,并且可能会增加网络延迟。
  3. 数据排序:TCP通过使用一个序列号来标识数据包的顺序,来保证数据的可靠排序。但是,这种排序可能会导致数据传输速度相对较低,并且可能会增加网络延迟。

2.2.2 UDP 

UDP(用户数据报协议)是一种简单的不可靠传输协议,它不提供数据包的确认、重传和超时机制,因此它的可靠性相对较低。

(1)UDP的原理:
  1. 建立连接:在UDP中,不需要进行连接建立的过程,数据包可以直接发送。发送方会直接将数据包发送到接收方的地址和端口,而接收方则需要自己绑定一个端口来接收数据包。
  2. 传输数据:在建立了连接后,发送方会向接收方发送数据包,数据包中包含应用程序的数据。接收方在收到数据包后,会将该数据包添加到接收缓冲区中,并立即向发送方发送一个ACK报文,表示它已经接收到了数据包。发送方在收到ACK报文后,会将该数据包从发送缓冲区中移除,从而继续发送下一个数据包。
  3. 断开连接:在传输数据完成后,不需要进行连接的断开过程,数据包可以直接发送。发送方会继续向接收方发送数据包,而接收方则会根据自己缓冲区的大小来暂缓接收数据包,从而避免网络拥塞。
(2)优缺点 

优点:

  1. 简单易用:UDP不需要进行连接建立的过程,数据包可以直接发送,因此简单易用。
  2. 快速传输:UDP不提供重传机制,因此它的传输速度相对较快。
  3. 低延时:UDP不提供超时机制,因此它的网络延迟相对较低。

缺点:

  1. 可靠性低:UDP不提供数据包的确认、重传和超时机制,因此它的可靠性相对较低,可能会导致数据丢失。
  2. 无法保证数据顺序:UDP不提供数据包的顺序保证,因此它的数据顺序无法保证。
  3. 无法保证数据完整性:UDP不提供数据包的确认机制,因此它的数据完整性无法保证。

2.2.3 TCP与UDP的区别 

  1. 可靠性:TCP提供数据包的确认、重传和超时机制,因此它的可靠性相对较高,可以保证数据的完整性和一致性。而UDP不提供数据包的确认、重传和超时机制,因此它的可靠性相对较低。
  2. 传输速度:TCP提供窗口控制机制,可以控制发送方的发送速度,因此它的传输速度相对较低,但是可以保证数据的完整性和一致性。而UDP不提供窗口控制机制,因此它的传输速度相对较快,但是无法保证数据的完整性和一致性。
  3. 数据顺序:TCP提供数据包的顺序保证,因此它的数据顺序可以保证。而UDP不提供数据包的顺序保证,因此它的数据顺序无法保证。
  4. 数据完整性:TCP提供数据包的确认机制,因此它的数据完整性可以保证。而UDP不提供数据包的确认机制,因此它的数据完整性无法保证。

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

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

相关文章

深入Os--动态链接

1.动态链接库的使用 动态库支持以两种模式使用,一种模式下,在程序加载运行时,完成动态链接。一种模式下,在程序运行中,完成动态链接。 1.1.程序加载运行时完成动态链接 我们通过一个实例介绍程序加载运行时&#xff0c…

【Pandas思考记录】力扣181. 超过经理收入的员工

原题链接 Pandas 代码: import pandas as pddef find_employees(employee: pd.DataFrame) -> pd.DataFrame:merged_df pd.merge(employee, employee, left_onmanagerId, right_onid, howinner, suffixes(, _manager))print("merged_df", merged_df)#…

Socket.D 网络应用协议,首版发布!

有用户说,“Socket.D 之于 Socket,尤如 Vue 之于 Js、Mvc 之于 Http” 主要特性 基于事件,每个消息都可事件路由所谓语义,通过元信息进行语义描述流关联性,有相关的消息会串成一个流语言无关,使用二进制输…

【debug】Image 库 字体问题

可能的报错信息: from PIL import ImageFont, ImageDrawdraw ImageDraw.Draw(image)# use a bitmap font font ImageFont.load("arial.pil")draw.text((10, 10), "hello", fontfont)# use a truetype font font ImageFont.truetype("a…

4G基站BBU、RRU、核心网设备

目录 前言 基站 核心网 信号传输 前言 移动运营商在建设4G基站的时候,除了建设一座铁塔之外,更重要的是建设搭载铁塔之上的移动通信设备,这篇博客主要介绍BBU,RRU以及机房的核心网等设备。 基站 一个基站有BBU,…

代数学笔记7: 交换群结构定理,群在集合上的作用

交换群结构定理 G ≅ Z / d 1 Z Z / d 2 Z ⋯ Z / d n Z , d 1 ∣ d 2 , ⋯ , d n − 1 ∣ d n G\cong \mathbb{Z}/d_1\mathbb{Z}\times \mathbb{Z}/d_2\mathbb{Z}\times\cdots\times \mathbb{Z}/d_n\mathbb{Z}, \quad d_1|d_2,\cdots,d_{n-1}|d_n G≅Z/d1​ZZ/d2​Z⋯Z/dn​…

Liunx系统使用超详细(四)~文件/文本相关命令1

目录 一、mkdir命令 1.1基本语法 1.2常用示例 1.2.1创建目录 1.2.2创建多级目录 1.2.3设置权限 1.2.4递归修改权限 1.2.5显示帮助信息 二、touch命令 2.1基本语法 2.2常用示例 2.2.1创建新的空文件 2.2.2更新现有文件的访问和修改时间戳 2.2.3创建多个文件 2.2.…

【Midjourney实战】| 新年红包、元宝、灯笼、福袋生成

文章目录 1 红包生成2 灯笼生成3 福袋生成4 元宝生成 1 红包生成 之前我们生成了新年礼盒,这一期我们来生成一些过年时特有的元宝和红包 首先,最重要的是画面主体 red envelope(红包)颜色红色 黄色的 red and yellow 为了后期方…

跳水比赛(C++)

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

解决部署到k8s上的服务返回的msg乱码和控制台乱码的问题

解决部署到k8s上的服务返回的msg乱码和控制台乱码的问题 java -Dfile.encodingutf-8 -jar xxx.jar

Web漏洞分析-SQL注入XXE注入(下)

随着互联网的不断普及和Web应用的广泛应用,网络安全问题愈发引起广泛关注。在网络安全领域中,SQL注入和XXE注入是两个备受关注的话题,也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞,带您探寻背后的原…

Python中数组去重的方法汇总

Python中数组去重的方法汇总 1. 使用 set2. 使用列表推导式3. 使用 numpy 库4. 使用 pandas 库5. 使用 collections 库的 Counter6. 使用 functools 库的 reduce7. 使用 itertools 库的 groupby总结 在 Python 中,对数组进行去重是常见的操作,以确保数据…

Python 上下文管理器 with 相关用法

Python 上下文管理器 什么是上下文管理器? context manager一个上下文管理器是一个对象它定义了运行时的上下文使用 with 语句来执行 with 语句 with context as ctx:# 使用这个上下文对象 # 上下文对象已经被清除​ 这里我们使用 Python的文件操作 打开一个文…

GNSEC 2022年第8届全球下一代软件工程线上峰会-核心PPT资料下载

一、峰会简介 新一代软件工程是指利用新的理论、方法和技术,在软件开发、部署、运维等过程中,实现软件的可控、可预测、可维护的软件生产方式。它涵盖了多个领域,如软件开发、测试、部署、运维等,旨在提高软件生产效率和质量。 …

103.进程概述

目录 1.并行和并发 区别: 2.PCB 3.进程状态 4. 进程命令 从严格意义上来讲,程序和进程是两个不同的概念,他们的状态,占用的系统资源都是不同的。 程序:程序是一种静态实体,是存储在计算机存储介质上的…

排序算法之二:冒泡排序

冒泡排序的思路 冒泡排序是交换排序 基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动…

判断三角形-第11届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第12讲。 判断三角形&#…

AOC computer monitor

【窗口增亮】关闭就没掉了

Java异常讲解

🐵本篇文章将对异常相关知识进行讲解 一、异常的结构 在程序执行的过程中出现的一些问题叫做异常,异常其实是一个一个类,每一种异常都代表一个类 1.1 几种常见的异常 System.out.println(10/0); //算数异常 //Exception in thread "m…

LDAP协议和AD活动目录的讲解

目录 LDAP协议 LDAP基本概念 LDAP目录的数据结构 LDAP交互过程以及相关报文 AD(Active Directory) AD基本概念 AD域与工作组、本地组的区别 AD DS(AD域服务) 信任关系 组策略和安全组 LDAP协议 LDAP基本概念 LDAP&…