找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2426|回复: 12

C/C++应用:深入理解Socket网络通信

 火.. [复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:28
  • 打卡月天数:7
  • 打卡总奖励:7961
  • 最近打卡:2025-12-22 17:16:30

3317

主题

285

回帖

2万

积分

管理员

积分
24108
发表于 2021-2-8 20:48:06 | 显示全部楼层 |阅读模式
Socket是网络通讯经常采用的一种方式,它不是一个具体的物件也不是想http类的通讯协议。你可以把它看成是一组基于TCP和UDP通信协议的接口,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
Socket基本概念
在了解Socket之前你需要对计算机通讯的分层有个大概的了解,具体讲解我在这里就不讲了,放一张很好的图分享给大家:


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


理解Socket
好,了解了基本分层机构后,我们现在来形象的理解一下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协议,比如你传送重要办公文件、图片等,这些东西丢包都是会影响数据品质的。

工控课堂 www.gkket.com

0

主题

127

回帖

356

积分

注册会员

积分
356
发表于 2021-2-9 22:39:17 | 显示全部楼层
无私奉献,好工控人,32个赞送给你!!
工控课堂 www.gkket.com

0

主题

110

回帖

328

积分

注册会员

积分
328
发表于 2021-2-10 02:19:52 | 显示全部楼层
党的好公民,人民的好公仆。。。
工控课堂 www.gkket.com

0

主题

1451

回帖

4571

积分

金牌会员

积分
4571
发表于 2025-11-21 14:00:29 | 显示全部楼层
说得对!狠狠赞同,没毛病~
工控课堂 www.gkket.com

0

主题

115

回帖

176

积分

新手上路

积分
176
发表于 2025-11-22 00:22:42 | 显示全部楼层
同款经历!我当初也这么过来的😂
工控课堂 www.gkket.com

0

主题

61

回帖

83

积分

新手上路

积分
83
发表于 2025-11-22 00:40:47 | 显示全部楼层
理性围观,感觉大家说得都有道理
工控课堂 www.gkket.com

0

主题

91

回帖

136

积分

新手上路

积分
136
发表于 2025-11-22 00:41:30 | 显示全部楼层
占个楼慢慢看,先马克一下
楼主辛苦啦,期待下一篇分享
工控课堂 www.gkket.com

0

主题

81

回帖

114

积分

新手上路

积分
114
发表于 2025-11-22 00:44:25 | 显示全部楼层
笑不活了,评论区比正文还精彩
已转发给朋友,一起快乐一下
工控课堂 www.gkket.com

0

主题

116

回帖

333

积分

注册会员

积分
333
发表于 2025-11-22 00:45:30 | 显示全部楼层
这逻辑绝了,分析得太到位了吧
工控课堂 www.gkket.com

0

主题

142

回帖

389

积分

注册会员

积分
389
发表于 2025-11-22 00:45:50 | 显示全部楼层
我先占个楼,等下再慢慢看~
工控课堂 www.gkket.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|手机版|免责声明|本站介绍|工控课堂 ( 沪ICP备20008691号-1 )

GMT+8, 2025-12-23 13:45 , Processed in 0.120238 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表