Socket是网络通信中经常使用的一种方式,它不是一个具体的对象,也不是像http那样的通信协议。您可以将其视为一组基于TCP和UDP通信协议的接口。Socket其实是一种门面模式,将复杂的TCP/IP协议族隐藏在Socket接口的背后。对于用户来说,一套简单的接口就行了,让Socket把数据组织起来,使其符合指定的协议。Socket的基本概念在了解Socket之前,需要对计算机通信的层次有一个大概的了解。具体的解释这里就不说了。分享一张好图给大家:上图详细解释了基本的整机,我不太了解通信的分层结构。我们只看我们关心的TCP/IP。层的简化图如下:了解Socket就好了。到底是什么。我这里有一个很形象的例子,可以帮助我们很好的理解Socket。这是我在学习Socket编程时的体会,就是物流。我们要传输的数据是物流中的货物,ip是发货人和收货人的联系方式,那么什么是Socket呢?想想这个交付过程中缺少了什么?对,物流公司,对!物流公司就是那个Socket,负责帮你处理发货这些琐碎的事情,比如你的货物怎么包装,怎么防止易碎品坏掉,怎么运输等等。涉及到报关等一系列复杂琐碎的事情,这些物流公司(Socket)都可以为您处理。示意图如下:理解TCP和UDP的区别以及三向握手和四向挥手。然后再说说TCP和UDP的区别。前面说过,Socket相当于一个物流公司,那么TCP协议就相当于:假设你是寄件人,你想给你的朋友送礼物,你首先要到物流公司去送,这样你就相当于物流公司了。创建一个东西(Socket实例)。那么物流公司有两种服务方式供你选择(TCP和UDP)。先说TCP。TCP协议相对保守。物流公司说我必须保证你的朋友能收到这个礼物,否则不发货。于是物流公司回去联系你朋友。那么联系内容大致如下:物流:您好,我这里有您朋友给您的礼物,您收下吗?你的朋友:好的,接受,什么时候送达,需要多长时间?物流:现在发,大概12小时到。然后物流开始发货,会给你一个物流单号,就是你和你朋友的收货凭证。这就是所谓的三次握手。示意图:物流发货后,我会联系你的朋友。谈话内容大致:物流:您好,货已发出,请注意查收朋友:好的。货已发出,您的朋友:OK,货已收到,可以结案物流:OK,我已经结案了。这就是所谓的四次握手(再见);(注意:三次握手和四次握手是Socket根据你建的时候选择的协议来决定的)这个是不是很麻烦,估计顺丰有这个服务,其他公司大部分还是不提供这么贴心的服务,他们可能会使用UDP协议。UDP比较简单。当你使用物流(Socket)发送货物时,物流公司并不关心你的朋友能不能联系上,他们是否愿意接收。它只负责发送您的货物,仅此而已。这个过程不需要通知你的朋友,你和你的朋友也不需要连接。这就是所谓的无连接。两种协议的区别UDP常用于一次传输数据量相对较小的网络应用,而UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等)。),显然,可靠的数据传输不是这些应用程序的选择。最重要的是,TCP的拥塞控制会造成数据的较大延迟,这是他们无法容忍的。我们最熟悉的视频通话大多使用UDP协议。TCP是面向连接的,即发送数据前需要先建立连接,TCP有拥塞机制。当前部分数据还没有收到,后面的部分数据会被阻塞,直到第一部分数据传递OK,因此通过TCP连接传输的数据无差错、无丢失、无重复、有序到达;在对数据完整性和安全性要求高的场景下,需要使用TCP协议,比如你传输重要的办公文档、图片等,这些东西丢包会影响数据质量。
