2分钟了解什么是socket?

文章目录

    • 概念
    • 比喻
    • 类型
    • Socket 与 TCP、UDP的关系

请添加图片描述

概念

Socket 是提供网络通信功能的编程接口(API),提供了网络通信的基本操作,允许程序或进程之间进行数据交换。是传输层协议的具体软件实现,它封装了协议底层的复杂实现方法,为开发人员提供了便利的网络连接。

请添加图片描述

比喻

我们可以通过一个比喻来理解它。
想象两座城市,每座城市都有一个邮局。在这个比喻中,每个邮局就像一个“Socket”。当一个城市(即一个程序或进程)想要发送信息到另一个城市时,它会将这个信息(数据包)发送到自己的邮局邮局负责将信息发送到目的地城市的邮局。收信人从他们的邮局收取这个信息。这就像两个程序通过 Socket 发送和接收数据。

为什么要通过邮局(socket)通信?

  1. 封装复杂性:邮局负责处理所有关于邮件发送的复杂细节(如邮件分类、路线规划、交付等)。同样地,Socket 负责封装底层网络协议的复杂性(如 TCP/IP),使得程序员可以不必深入了解这些复杂的细节,而是通过一组相对简单的接口来进行网络通信。
  2. 标准化接口:每座城市的邮局提供标准化服务,不论邮件从哪里来到哪里去,处理方式都是相似的。在网络通信中,Socket 提供一个标准化的方式来发送和接收数据,无论底层使用的是哪种网络协议。
  3. 确保数据传输的可靠性和顺序:邮局保证邮件的递送可靠性和顺序。在网络通信中,特别是使用 TCP 协议的 Socket,也确保了数据的可靠传输和按序到达。
  4. 支持不同的通信方式:正如邮局可以处理不同类型的邮件(如普通信件、包裹等),Socket 也支持不同的通信协议和模式,如 TCP(面向连接的可靠传输)和 UDP(无连接的不可靠传输)。

总结:Socket 提供了一个易于使用和开发的标准化接口,确保数据的可靠性,同时支持多样化的通信方式。

类型

在技术上,Socket 主要分为两种类型:

流式Socket(Stream Sockets):也称为 TCP Sockets,它们提供了一种可靠的数据流服务。就像打电话一样,你先建立连接,然后开始通信,直到通话结束。
数据报Socket(Datagram Sockets):也称为 UDP Sockets,它们允许程序发送或接收独立的消息(数据报)。这就像发短信,每条信息独立发送,不保证顺序或可靠性。
例子:
一个网页服务器和浏览器之间的通信就是通过 Socket 实现的。浏览器(客户端)通过 Socket 请求网页,服务器通过另一个 Socket 响应这个请求,并发送网页数据。这个过程类似于客户端通过电话(Socket)呼叫服务中心(服务器)并请求特定服务(网页),服务中心响应请求并提供所需信息。

Socket 与 TCP、UDP的关系

Socket 和 TCP、UDP 协议之间的关系可以理解为工具和具体实施方法的关系。Socket 是网络通信的一种工具或接口,而 TCP 和 UDP 是通过这个工具实现通信的两种不同方式或协议。

Socket:
Socket 是提供网络通信功能的编程接口(API),它允许程序创建通信通道。
它是在应用层与网络层之间的一个抽象层,允许应用程序不考虑具体的网络细节就能进行网络通信。
TCP(传输控制协议):
TCP 是一种面向连接的协议,提供可靠的、有序的和错误检测机制的数据传输。
在传输数据前,TCP 需要先在两个通信端点之间建立连接。
TCP 通常用于需要高可靠性的应用,如网页浏览、电子邮件、文件传输等。
UDP(用户数据报协议):
UDP 是一种无连接的协议,它不保证消息的可靠传递,没有建立连接的过程。
数据包(称为数据报)可能会丢失或顺序错乱。
UDP 用于那些对实时性要求高但可以容忍一定丢包的应用,如视频会议、在线游戏等。

总结来说,Socket 是实现网络通信的具体手段,而 TCP 和 UDP 是通过 Socket 实现的两种不同的数据传输方式。你可以将 Socket 看作是一辆车,而 TCP 和 UDP 则是驾驶这辆车的两种不同驾驶风格:一种是稳重可靠但相对较慢(TCP),另一种是快速但可能不那么可靠的(UDP)。

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

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

相关文章

构建高效数据中台:集群规划与搭建的最佳实践指南

架构设计 Rack(机架)配置建议 大数据集群规划 安装细节见配套文档 两地三中心 两地三中心是一种信息技术架构模式,通常用于灾难恢复和业务连续性计划。这种模式设计有两个物理位置(两地),在这两个位置上部署了三个数据中心(三中心):一个主数据中心和两个备份数据中心…

docker 安装可视化工具 Portainer 以及 汉化

安装portainer是最新版本,汉化指定版本2.9.1 。如果要安装汉化版,可直接跳转步骤四 一、拉去镜像 安装网址:Install Portainer BE with Docker on Linux - Portainer Documentation docker pull portainer/portainer二、根据portainer镜像创建…

React Admin 前端脚手架之ant-design-pro

文章目录 一、React Admin 前端脚手架选型二、React Admin 前端脚手架之ant-design-pro三、ant-design-pro使用步骤四、常用总结(持续更新)EditableProTable组件 常用组件EditableProTable组件 编辑某行后,保存时候触发发送请求EditableProTa…

代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列

代码随想录 (programmercarl.com) 392.判断子序列 可以不连续 类似LC1143-求最长公共子序列 1.dp数组及下标含义 dp[i][j]:表示以下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]。 2.递推公式 if (s[i…

51、全连接 - 特征的全局融合

Resnet50 中的核心算法,除了卷积、池化、bn、relu之外,在最后一层还有一个全连接。 下图是 Resnet50 网络结构结尾的部分,最后一层 Gemm(通用矩阵乘法)实现的就是全连接操作。而矩阵乘法我们之前介绍过,传送门在:矩阵乘。 卷积也好,矩阵乘法也好,其目的都是为了完成神…

RT_Thread 调试笔记

说明:记录日常使用 RT_Thread 开发时做的笔记。 1.打印相关 1.打印宏定义,可以打印打印所在文件,函数,行数。 #define PRINT_TRACE() printf("-------%s:%s:%d------\r\n", __FILE__, __FUNCTION__, __LINE__);2. rt…

阶段十-分布式-任务调度

第一章 定时任务概述 在项目中开发定时任务应该一种比较常见的需求,在 Java 中开发定时任务主要有三种解决方案:一是使用JDK 自带的 Timer,二是使用 Spring Task,三是使用第三方组件 Quartz Timer 是 JDK 自带的定时任务工具,其…

普通用户用哪款电脑杀毒软件最好?

前言 各位小伙伴接触到电脑的时候,都一定有听过“电脑一定要安装杀毒软件”这句话。 毕竟在电脑诞生之初到今天,电脑木马和病毒依旧存在。 中了木马或病毒的电脑会出现什么现象?具体得看中了什么样的病毒。 但轻则资料泄漏、电脑瘫痪&…

动态分区分配算法-第四十四天

目录 前言 首次适应算法(First Fit) 最佳适应算法(Best Fit) 最坏适应算法(Worst Fit) 临近适应算法(Next Fit) 本节思维导图 前言 动态分区分配算法:在动态分区分…

联想M7400加粉后如何清零

联想M7400黑白激光多功能打印一体机加粉后清零方法: 吴中函 加粉后,确保硒鼓已经被正确安装并且机器已经通电。 1、打开前盖,以便进行后续的操作。 2、按下“清除/返回”键,这会触发一个屏幕提示:提示内容为“更换…

flex + margin 妙用

利用 flex margin 分配间距,简单案例如下,先写一个包裹器,包裹几个元素: 案例一: 我们给父元素加 flex 布局,子元素加 margin: auto,可以看到子元素上下左右居中显示,当前我们可以…

python包chromadb安装失败总结

1,背景: 最近在学习langchain的课程,里面创建自己的知识库的Retrieval模块中,需要用到向量数据库。 所以按照官方的教程(vectorstores),准备使用chroma的向量数据库。图片来源 2,问…

C# 反射 入门到详解

1.什么是反射 首先看一张流程图 反射最最要的关注的地方 就在metadata 元数据 元数据:描述DLL/EXE文件中有什么内容 点击生成之后,就会在文件中生成DLL/EXE文件 点击打开文件夹 在bin/Debug 文件下就会生成该文件 exe/dll文件的区别:…

DRF从入门到精通九(权限控制)

文章目录 一、权限控制模型1) ACL(Access Control List,访问控制列表)2) RBAC(Role-Based Access Control,基于角色的访问控制)应用前后台权限控制实操 3) ABAC(Attribute-Based Access Control,基于属性的访问控制) 一、权限控制模型 1) ACL(Access Control List,访问控制列表…

Transforer逐模块讲解

本文将按照transformer的结构图依次对各个模块进行讲解: 可以看一下模型的大致结构:主要有encode和decode两大部分组成,数据经过词embedding以及位置embedding得到encode的时输入数据 输入部分 embedding就是从原始数据中提取出单词或位置&…

大数据毕业设计:租房推荐系统 python 租房大数据 爬虫+可视化大屏 计算机毕业设计(附源码+文档)✅

毕业设计:2023-2024年计算机专业毕业设计选题汇总(建议收藏) 毕业设计:2023-2024年最新最全计算机专业毕设选题推荐汇总 🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题&#xff…

RTKLIB命令行指令介绍

1.manual_2.4.2原文: 1.1SYNOPSIS rnx2rtkp [option ...] file file [...] 1.2DESCRIPTION Read RINEX OBS/NAV/GNAV/HNAV/CLK, SP3, SBAS message log files and compute receiver (rover) positions and output position solutions. The first RINEX OBS fil…

60.网游逆向分析与插件开发-游戏增加自动化助手接口-游戏公告功能的逆向分析与测试

内容来源于:易道云信息技术研究院VIP课 上一个内容:文字资源读取类的C还原-CSDN博客 码云地址(master分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:878db7708de09b448010ef54526fe…

任务调度知识点

任务调度 定时任务调度 定时任务调度在项目开发中是一种不可缺少的需求,在Java中,实现任务调度有三种方式,分别是jdk自带的任务定时工具Timer、Spring task、第三方组件Quartz,接下来细聊这三种方式。 方式一、Timer(JDK自带任…

【KingbaseES】实现MySql函数Space

CREATE OR REPLACE FUNCTION SPACE(input_length integer) RETURNS text AS $$ BEGIN RETURN REPEAT( , input_length) AS SPACES; END; $$ LANGUAGE plpgsql;