0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Socket通信正确流程是怎样?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 作者:黄工的嵌入式技术 2020-01-16 10:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

我微信公开之后,加我的人也越来越多,也就会经常收到各种各样的消息。

有些消息我看到之后立马就回复了,有些消息我看到之后真的不想回复。比如:在吗?

关于“在吗?”这个问题,我在这里统一回复:以后微信找我有话直说,不要老是在吗在吗,不出意外的话,几十年内我都是在的。

三次握手,通信还是失败了:

上面这个通信,三次握手都失败了,看着确实让人着急。当然,本文说的重点是:Socket网络通信

一、关于Socket

学习过网络编程,或者网络开发的朋友都应该听说过socket。

socket又叫套接字,是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

Socket是网络通讯经常采用的一种方式,它不是一个具体的物件也不是像http类的通讯协议。你可以把它看成是一组基于TCP和UDP通信协议的接口,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

二、Socket基本概念

在了解Socket之前你需要对计算机通讯的分层有个大概的了解,网络七层协议,OSI:Open System Interconnection,也叫开放式系统互联参考模型。

这里不详解OSI,放一张很好的图分享给大家:

上面图详细讲了基本整个计算机通信的分层架构,很多我也不了解没我们只看我们关心的TCP/IP,其分层简化图示如下:

三、理解Socket

好,了解了基本分层机构后,我们现在来形象的理解一下Socket到底是什么。这里有一个很形象的实例可以帮助我们很好的理解Socket,以物流为例。

我们要传送的数据就是物流中的货物,ip就是发货人和收货人的联系方式,那么Socket是什么?大家想想这送货这这一流程还缺少啥?对呀,物流公司啊,对吧!物流公司就是那个Socket,他负责帮你处理送货的琐碎事情,比如你的货物该怎么打包、该怎么防止易碎物品破碎、该用什么方式运输、等等,如果是境外货物还牵涉到报关等等一系列复杂琐碎的事情,这些物流公司(Socket)帮你处理好了。示意图如下:

四、理解TCP与UDP的区别以及三次握手和四次挥手

然后我们来说一下TCP和UDP的区别。前面讲到Socket就相当于是物流公司,那么TCP协议就相当于是:假设你是寄货方,你要寄给你朋友一份礼物,你首先得去物流公司去寄,这样你在物流公司就相当于建立了一个事物(Socket实例)。然后物流公司有两种服务方式让你选择(TCP和UDP)。

先说TCP,TCP这个协议它比较保守,物流公司说我必须确保你朋友会接收这份礼物,不然它不送。于是物流公司就回去联系你朋友。然后联系内容大致如下:

物流:你好,我这里有个你朋友寄的礼物要给你,你收吗? 你朋友:OK,收,什么时候发,多久到? 物流:现在就发,大概要12小时到。

然后物流才开始发货,并且会给你们一个物流单号,这个单号就是关于这份货物你和你朋友的发货收货凭证。这就是所谓的三次握手。示意图:

物流发送完后还会联系你朋友,大致对话内容:

物流:你好,货物已发送,请注意查收 你朋友:好的。 货物送到,你朋友:OK,货物收到,你们可以结案 物流:好的,我结案了。

这就是所谓的四次挥手(拜拜);

(注释:三次握手四次挥手这都是Socket在你建立的时候根据你选择的协议确定好的)

这样是不是很麻烦,估计也就顺丰有这服务了,其他大部分公司还是没有这么贴心的服务的,他们可能就是UDP协议方式了。

UDP比较简单,当你用物流(Socket)寄货物的时候物流公司并不会管你朋友是否能联系上,是否愿意接收,它只负责将你的货物发出去就完事。这中间是不需要通知你朋友的,你和你朋友也不需要有连接,这就是所谓的无连接。

五、两种协议区别

UDP 常用于一次性传输比较少量数据的网络应用中,UDP 也常用于多媒体应用(如 IP 电话、实时视频会议、流媒体等),显然,可靠数据传输对于这些应用来说并不是最重要的,但 TCP 的拥塞控制会导致数据出现较大的延迟,这是它们不能容忍的,我们最熟悉的视频通话大部分就是用的UDP协议。

TCP面向连接,即发送数据之前需要建立连接,并且TCP是拥有拥塞机制的,当前部分数据还没有被接收完,后部分的数据会被阻塞知道前部分数据传递OK后才会继续传递后半部分,所以通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;在数据完整性、安全性要求较高的场景需要使用TCP协议,比如你传送重要办公文件、图片等,这些东西丢包都是会影响数据品质的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 通信
    +关注

    关注

    18

    文章

    6316

    浏览量

    139549
  • Socket
    +关注

    关注

    1

    文章

    213

    浏览量

    36657
  • 物流
    +关注

    关注

    1

    文章

    318

    浏览量

    19089
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    socket是什么

    Socket(套接字)是计算机网络中的一个概念,它指示了一个可以进行网络通信的软件端点。通过使用Socket,计算机程序可以通过网络进行通信Soc
    发表于 12-03 08:27

    NICE接口和协处理器之间怎样实现通信

    NICE接口和协处理器之间怎样实现通信
    发表于 11-05 12:42

    浅谈卫星通信的运作流程

    其实,卫星通信远非 “卫星直接连接电话” 那么简单 —— 从地面信号发出到终端接收,背后藏着一套精准协同的 “天地协作” 逻辑。今天,我们就带大家看懂卫星通信的完整运作流程
    的头像 发表于 10-22 14:25 779次阅读
    浅谈卫星<b class='flag-5'>通信</b>的运作<b class='flag-5'>流程</b>

    rtthread v5.0.1 , at socket使用select函数不能监控多个socket fd的问题,怎么解决?

    我最近使用at socket ,at device 组件创建tcpclient,使用select函数实现,发现select只能监控一个socket fd,监控两个socket fd就不能正常接收
    发表于 10-13 06:05

    ESP8266 socket通信,串口溢出怎么解决?

    1、硬件平台:原子精英板 stm32f103zet6+esp8266 开发板作为client,网络调试助手模拟server 学习研究AT SOCKET有一段时间了,之前逛论坛提问解决了一些问题。遇到
    发表于 09-28 13:42

    alloc_socket在不断创建socket时会不断新建信号量和互斥锁,导致内存泄漏,怎么解决?

    alloc_socket在不断创建socket时会不断新建信号量和互斥锁,导致内存泄漏。 修改前: static struct wiz_socket *alloc_socket(vo
    发表于 09-10 08:22

    请问at_device不用at socket能使用bsd socket吗?

    at_device不用at socket能使用bsd socket吗?
    发表于 09-10 08:04

    GraniStudio : TCP/IP(Socket)协议深度剖析

    在工业自动化与物联网领域,TCP/IP(Socket)协议作为应用最广泛的网络通信标准,是实现设备间数据交互的核心技术。GraniStudio 软件作为工业级零代码开发平台,其内置的 TCP/IP
    的头像 发表于 08-03 22:20 895次阅读
    GraniStudio : TCP/IP(<b class='flag-5'>Socket</b>)协议深度剖析

    第二十五章 W55MH32 TCP_Server_Multi_Socket示例

    本文讲解了如何在 W55MH32 芯片上使用 8 个 socket 实现 TCP 服务器模式,让多个客户端连接进行数据回环测试,通过实战例程展示了从初始化 socket 到监听端口、处理客户端连接
    的头像 发表于 07-24 16:10 732次阅读
    第二十五章 W55MH32 TCP_Server_Multi_<b class='flag-5'>Socket</b>示例

    第二十四章 W55MH32TCP_Client_Multi_Socket示例

    本文讲解了如何在 W55MH32 芯片上使用 8 个 socket 实现 TCP 客户端模式,同时连接 1 个服务器进行数据回环测试,通过实战例程展示了从初始化 socket 到建立连接、数据交互
    的头像 发表于 07-24 16:08 634次阅读
    第二十四章 W55MH32TCP_Client_Multi_<b class='flag-5'>Socket</b>示例

    CPU Socket的基本结构和工作原理

    CPU Socket是连接中央处理单元(CPU)与计算机主板之间的关键部件,它充当着传递电信号、电源和散热等多重功能的枢纽。在整个计算机系统中,CPU Socket的作用至关重要,尤其在高性能计算
    的头像 发表于 05-08 17:14 1882次阅读

    在KaihongOS应用开发中,如何利用Socket进行数据传输

    参考:@ohos.net.socket (Socket连接)。 应用 TCP/UDP 协议进行通信 UDP 与 TCP 流程大体类似,下面以 TCP 为例: import 需要的
    发表于 05-08 07:25

    智慧路灯的安装流程怎样

    了新的活力。而规范、科学的安装流程,则是确保叁仟智慧路灯能够稳定运行、充分发挥其功能的基础。深入了解叁仟智慧路灯的安装流程,不仅有助于施工团队高效开展工作,更能为智慧城市建设的稳步推进提供有力保障。接下来,将从前期规划
    的头像 发表于 04-27 17:22 716次阅读

    ADS1210的校准功能怎么使用?具体的流程怎样

    请问,ADS1210的校准功能怎么使用?具体的流程怎样? 如果在开始就设置好校准模式为 Self-Calibration 模式,那么在读 DOR 的过程中,需要对 OCR 或 FCR操作吗?
    发表于 02-07 07:22

    hyper-v 关闭,hyper-v的正确使用流程

        在企业的IT基础设施中,Hyper-V虚拟机的地位愈发重要。今天给大家介绍hyper-v的正确使用流程?    hyper-v的正确使用流程?    启用Hyper-V,Win
    的头像 发表于 01-22 15:04 929次阅读
    hyper-v 关闭,hyper-v的<b class='flag-5'>正确</b>使用<b class='flag-5'>流程</b>