编辑:strongerHuang
微信公众号:strongerHuang
素材来源:今日头条@编程老大叔
我微信公开之后,加我的人也越来越多,也就会经常收到各种各样的消息。
有些消息我看到之后立马就回复了,有些消息我看到之后真的不想回复。比如:在吗?
关于“在吗?”这个问题,我在这里统一回复:以后微信找我有话直说,不要老是在吗在吗,不出意外的话,几十年内我都是在的。
三次握手,通信还是失败了:
上面这个通信,三次握手都失败了,看着确实让人着急。当然,本文说的重点是: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
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/61daa3c901d0050380f56a737c84623d.jpeg)
四、理解TCP与UDP的区别以及三次握手和四次挥手
然后我们来说一下TCP和UDP的区别。前面讲到Socket就相当于是物流公司,那么TCP协议就相当于是:假设你是寄货方,你要寄给你朋友一份礼物,你首先得去物流公司去寄,这样你在物流公司就相当于建立了一个事物(Socket实例)。然后物流公司有两种服务方式让你选择(TCP和UDP)。
先说TCP,TCP这个协议它比较保守,物流公司说我必须确保你朋友会接收这份礼物,不然它不送。于是物流公司就回去联系你朋友。然后联系内容大致如下:
然后物流才开始发货,并且会给你们一个物流单号,这个单号就是关于这份货物你和你朋友的发货收货凭证。这就是所谓的三次握手。示意图:
物流发送完后还会联系你朋友,大致对话内容:
这就是所谓的四次挥手(拜拜);
(注释:三次握手四次挥手这都是Socket在你建立的时候根据你选择的协议确定好的)
这样是不是很麻烦,估计也就顺丰有这服务了,其他大部分公司还是没有这么贴心的服务的,他们可能就是UDP协议方式了。
UDP比较简单,当你用物流(Socket)寄货物的时候物流公司并不会管你朋友是否能联系上,是否愿意接收,它只负责将你的货物发出去就完事。这中间是不需要通知你朋友的,你和你朋友也不需要有连接,这就是所谓的无连接。
五、两种协议区别
UDP 常用于一次性传输比较少量数据的网络应用中,UDP 也常用于多媒体应用(如 IP 电话、实时视频会议、流媒体等),显然,可靠数据传输对于这些应用来说并不是最重要的,但 TCP 的拥塞控制会导致数据出现较大的延迟,这是它们不能容忍的,我们最熟悉的视频通话大部分就是用的UDP协议。
TCP面向连接,即发送数据之前需要建立连接,并且TCP是拥有拥塞机制的,当前部分数据还没有被接收完,后部分的数据会被阻塞知道前部分数据传递OK后才会继续传递后半部分,所以通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;在数据完整性、安全性要求较高的场景需要使用TCP协议,比如你传送重要办公文件、图片等,这些东西丢包都是会影响数据品质的。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
推荐阅读: