理解Socket

news2024/9/23 9:36:39

前言
我在去年就学习过Java中Socket的使用,但对于Socket的理解一直都是迷迷糊糊的。看了网上很多关于Socket的介绍,看完还是不太理解到底什么是Socket,还是很迷。直到最近在学习计算机网络,我才对Socket有了一个更深地理解。之前一直不理解Socket就是因为没学过计算机网络,所以对于很多概念都很模糊,那么今天我就争取用最简单的话来解释清楚到底Socket是一个什么东西,希望能够帮助到那些正在学习Socket的同学。废话不多说,开始进入正题。

正文
要想解释清楚Socket,首先要知道TCP,要想知道TCP,那就得对TCP/IP的体系结构以及每一层的大概工作有所了解,那么我们就先来说说TCP/IP的分层。

TCP/IP体系结构
首先简单说一下OSI参考模型,OSI将网络分为七层,自下而上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层,而TCP/IP体系结构则将网络分为四层,自下而上分别是网络接口层、网络层、传输层、应用层。为了将每一层讲明白,我们讲网络接口层拆分为物理层和数据链路层,我在《图解TCP/IP》上面找了一张OSI参考模型和TCP/IP体系结构的对照图,大家可以看一下:

介绍了了TCP/IP有哪几层后,再来说一说每一层的大概功能。计算机的世界很奇妙,它里面有很多东西和现实世界都是一一对应的,这也可能是计算机设计者们有意而为之的吧。我先来说一下一个数据包在网络中的传输过程,再来用物流的例子对照着解释一遍,你就应该能够明白每一层的作用了。

看上面的图,发送端想要发送数据到接收端。首先应用层准备好要发送的数据,然后给了传输层,传输层的主要作用就是为发送端和接收端提供可靠的连接服务,传输层将数据处理完后就给了网络层。网络层的功能就是管理网络,其中一个核心的功能就是路径的选择(路由),从发送端到接收端有很多条路,网络层就负责管理下一步数据应该到哪个路由器。选择好了路径之后,数据就来到了数据链路层,这一层就是负责将数据从一个路由器送到另一个路由器。然后就是物理层了,可以简单的理解,物理层就是网线一类的最基础的设备。

可能有很多同学看到我上面的一段话后还是一知半解,没关系,我再用物流的例子解释一遍你就明白了:

小明住在上海市长江路幸福小区5#666,现在小明在京东上面买了一部小米10Pro。京东在接到小米的订单后,工作人员从仓库中找到一部小米10Pro(应用层)。工作人员将手机打包好, 交给了京东物流(传输层)。接下来手机就到了转运中心(路由器),转运中心根据时间,成本等一系列因素决定下一步该发往哪一个转运中心(网络层)。决定好接下来发往哪一个转运中心后就开始用货车运输了,那么运输的过程就是数据链路层了,链路层负责将数据从一个端点送到另一个端点。那么货车行驶的道路就是物理层。几经周转,手机安全地送到了小明手上。

看完这个例子后,我相信大家就应该明白了数据在网络中转发的过程以及每一层的作用了吧。那么接下来我再来介绍一下TCP。

TCP协议
先来看一下百度百科对于TCP协议的定义:传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。这段文字是什么意思呢,我们再接着说上面一个例子。

发货之前工作人员首先得要确认一下路是不是通吧,比如现在是过年,物流全部停运不就是路不通吗,那还发什么货呀。要是没什么问题,物流全部正常运作就发货呗。手机到达小明家后,小明先拆开看看手机在运输途中有没有损坏,有损坏就联系客服处理,没问题就确认收货。再回到上面的定义中,面向连接指的是先建立连接再发送数据,也就是先确认路可以走得通再发货。可靠就是如果货物在运输过程中有损坏或者丢失就让京东重新发货,确保小明收到的手机是没有任何问题的。基于字节流的意思就是比如小明买了手机又买了手机配件,分开发货,几件物品不是在一个包裹里,一个一个发。在这个例子中,京东的工作人员和小明充当了TCP协议的角色,他们两个共同确保了货物的完整性。

Socket
解释了TCP/IP体系结构以及TCP协议的大概内容后就可以来说一说什么是Socket了。还是先来看一下百度百科对于Socket的介绍:套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

我们将一个小区比作一台计算机,一台计算机里面跑了很多程序,怎么区分程序呢,用的是端口,就好像小区用门牌号区分每一户人家一样。手机送到小明家了,怎么进去呢?从大门进啊,怎么找到大门呢?门牌号呀。不就相当于从互联网来的数据找到接收端计算机后再根据端口判断应该给哪一个程序一样吗。小明家的入口就可以用小区地址+门牌号进行唯一表示,那么同样的道理,程序也可以用IP+端口号进行唯一标识。那么这个程序的入口就被称作Socket。

现在再来说说什么是Socekt编程,我们将TCP协议简化一下,就只有三个核心功能:建立连接、发送数据以及接收数据。我们再来看一下Java中提供的Socket类中的核心功能:

是不是和TCP协议一样,所以可以把Socket编程理解为对TCP协议的具体实现。现在解释清楚什么是Socket后,我相信现在无论是Java还是C#,或是其它语言,你都可以对于Socket编程轻松地上手了。

写在最后
写这篇文章的目的就是为了让大家对于Socket有个大概的了解,文章中有很多东西都没有提到,比如TCP/IP体系结构中每一层的作用远没有我说的那么简单,大家如果有兴趣的话可以再深入的学习一下。

如果我的文章对你有些帮助,不要忘了点赞,收藏,转发,关注。要是有什么好的意见欢迎在下方留言。让我们下期再见!
 

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

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

相关文章

GD32f103系列教程—(程序下载篇)

简介 芯片程序下载的方式有很多种,大部分的可以支持串口,SWD,jtag等方式进行下载,当然还有一些芯片可以支持IIC,SPI,以太网,USB等方式,其实原理大同小异。 GD32F103系列是可以支持串…

中文字符串逆序输出

今天碰到这个题,让我逆序输出中文字符串,可给我烦死了,之前没有遇到过,也是查了资料才知道,让我太汗颜了。 英文字符串逆序输出很容易,开辟一块空间用来存放逆序后的字符串,从后往前遍历原字符串…

windows安装sqlserver2008后连接失败问题

刚安装好的sqlserver在安装服务器上,直接使用Windows身份认证登录就报错 未找到或无法访问服务器。请验证实例名称是否正确并且SQL Server已配置为允许远程连接。(provider:命名管道提供程序,error:40 -无法打开到SQLS…

Springboot集成支付宝支付---完整详细步骤

网页操作步骤 1.进入支付宝开发平台—沙箱环境 使用开发者账号登录开放平台控制平台 2.点击沙箱进入沙箱环境 说明:沙箱环境支持的产品,可以在沙箱控制台 沙箱应用 > 产品列表 中查看。 3.进入沙箱,配置接口加签方式 在沙箱进行调试前…

【Stable Diffusion】在windows环境下部署并使用Stable Diffusion Web UI---通过 Conda

本专栏主要记录人工智能的应用方面的内容,包括chatGPT、AI绘图等等; 在当今AI的热潮下,不学习AI,就要被AI淘汰;所以欢迎小伙伴加入本专栏和我一起探索AI的应用,通过AI来帮助自己提升生产力; 订阅…

电子学会C/C++编程等级考试2021年03月(六级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:生日相同 2.0 在一个有180人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的名字,出生月日。试找出所有生日相同的学生。 时间限制:1000 内存限制:65536输入 第一行为整数n,表示有n个学生,n ≤ 180。此后每…

ChatGPT使用:一个发包机器人的提示词

发包机器人: 设想:目前项目组有n条打包线会输出多个包,用户想获取最新的包是比较困难的,难点在于 1. 分支多:trunk,release,outer等,至少有3个分支; 2. 多平台&#x…

Java小案例-RocketMQ的11种消息类型,你知道几种?(事务消息)

前言 上一节给大家讲了Rocket的延迟消息,这一节和大家聊一下事务消息,关于延迟消息大家可以点下面这个链接直接看。 事务消息 事务消息是RocketMQ提供的一种类似X/Open XA的分布式事务功能。通过RocketMQ的事务消息,可以达到分布式事务的最…

什么是数据可视化?数据可视化的优势、方法及示例

前言 在当今的数字时代,数据是企业和组织的命脉,生成的数据量呈指数级增长。这种被称为大数据的海量数据在洞察力和决策方面具有巨大的潜力。然而,如果没有一种有效的方法来分析和理解这些数据,它就会变得毫无意义和难以管理。这就…

SaaS 电商设计 (五) 私有化部署-实现 binlog 中间件适配

一、 背景 具体的中间件私有化背景在上文 SaaS 电商设计 (二) 私有化部署-缓存中间件适配 已有做相关介绍.这里具体讨论的场景是通过解析mysql binlog 来实现mysql到其他数据源的同步.具体比如:在电商的解决方案业务流中经常有 ES 的使用场景,用以解决一些复杂的查询和搜索商品…

GD32F4标准外设库

学习目标 了解标准库来源熟悉模板搭建流程掌握在已有模板基础下进行开发学习内容 标准外设库获取 标准固件库获取我们可以从官网进行下载。 下载链接:兆易创新GigaDevice-资料下载兆易创新GD32 MCU 找到 GD32F4xx Firmware Library 这个压缩包 下载完成后,进行解压,解压…

Java医院信息化建设云HIS系统源码

云HIS提供标准化、信息化、可共享的医疗信息管理系统,实现医患事务管理和临床诊疗管理等标准医疗管理信息系统的功能。优化就医、管理流程,提升患者满意度、基层首诊率,通过信息共享、辅助诊疗等手段,提高基层医生的服务能力构建和…

nginx 1.24.0 安装nginx最新稳定版

1.官网: nginx: download 2. 选择稳定版: 3. 可以下载,然后上传服务器,也可以wget获取: cd /home wget https://nginx.p2hp.com/download/nginx-1.24.0.tar.gz 4. 放入/home 下。并解压缩,重命名nginx;…

C之不小心就犯错误1

以为会打印: it is ok 然而并不是: 原因: 根据C语言隐式类型转换的原理,如果是int型与uint型进行比较(其它类型同理),则会将int型数据转换为uint型,则-1变成了 2^32-1 429496729…

Window操作系统发展史

引言 当谈及计算机操作系统的丰富历史和多样性时,Windows操作系统无疑是其中的一颗璀璨明星。自1985年首次亮相以来,Windows经历了长足的发展,塑造了计算机使用体验的方方面面。从初始的简单图形用户界面到如今强大而多样的功能&…

服务器被攻击宕机的一些小建议

现在网络攻击屡有发生,任何网站服务器都面临这样的危险,服务器被攻击造成的崩溃宕机是损失是我们无法估量的。网络攻击我们无法预测,但做好防御措施是必须的,建议所有的网站都要做好防范措施,准备相应的防护预案&#…

“Java 已死、前端已凉”?技术变革与编程语言前景:Java和前端的探讨

前端已死话题概论 本文讨论了近期IT圈中流传的“Java 已死、前端已凉”言论。我们审视了这些言论的真实性,并深入探讨了技术行业的演变和新兴技术的出现对编程语言和前端开发的影响。通过分析历史发展、当前趋势和未来展望,我们提供了对这些话题更深层次…

改造哈希表,封装unordered_map和unordered_set

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 unordered_map是存的是pair是K,V型的,而unordered_set是K型的&#xff…

恒创:更换服务器,网站备案会掉吗

随着互联网的普及,越来越多的企业和个人选择通过网站来展示自己的形象和业务。然而,在网站建设和运营过程中,更换服务器是一个常见的问题。那么,更换服务器后,网站备案是否会受到影响呢? 网站备案是为了保…

docker-compose 升级;yaml文件编写;gpu使用

1、docker-compose 升级(现在已经2.*版本,升级使支持gpu) 参考:https://blog.csdn.net/weixin_51311218/article/details/131376823 https://github.com/docker/compose/issues/8142 1)下载:原来1.18&…