套接字是一种常见的网络通信。它不是一个具体的对象,也不是像http那样的通信协议。你可以把它想象成一组基于tcp和udp通信协议的接口。socket实际上是一种门面模式,将复杂的tcp/ip协议族隐藏在socket接口后面。对于用户来说,一组简单的接口就足够了,这样socket就可以组织数据来满足指定的协议。
socket的基本概念在了解socket之前,需要对计算机通信的分层有一个大概的了解。我赢了。;不要在这里谈论它。我来和大家分享一张好图:
上图详细描述了基本的整体计算机通信的分层结构,我不知道。;我对它了解不多。我们只看我们关心的tcp/ip,它的分层简化图如下:
很好的理解socket,在理解了基本的层次机制之后,让现在我们明白什么是插座了。我这里有一个很生动的例子可以帮助我们很好的理解socket,这是我在学习socket编程的时候认识到的,那就是logistics。
我们要传输的数据是物流中的货物,ip是发货人和收货人的。那么什么是socket呢?想一想这个交付过程中缺少了什么?对,物流公司,对吧?物流公司就是插座,负责帮你做送货的琐事,比如你的货物怎么包装,易碎品怎么防止摔坏,怎么运输等等。如果海外货物涉及报关等一系列复杂琐碎的事情,这些物流公司(插座)帮你处理。示意图如下:
了解tcp和udp的区别,三次握手和四波,然后让让我们来谈谈tcp和udp的区别。前面说过,socket相当于一个物流公司,那么tcp协议就相当于:假设你是发货人,你要给你的朋友发一个礼物,你要先去物流公司发,这样你就可以在物流公司建立一个东西(socket实例)。那么物流公司有两种服务模式供你选择(tcp和udp)。
让让我们先来谈谈tcp。tcp是一种保守的协议。物流公司说,我必须确保你的朋友会收到这个礼物,否则它赢了。;别寄了。于是物流公司回去联系你朋友。那么联系内容大致如下:
物流:你好,我有你朋友给你的礼物。你接受吗?
你朋友:好,好。什么时候发,要多久?
物流:现在寄,大概12个小时到。
然后物流就开始发货了,会给你一个物流单号,这个物流单号是给你和你朋友的这个货物的发货和收货凭证。这就是所谓的三次握手。示意图:
物流发出后,你会联系你的朋友。大致对话如下:
物流:您好,货物已经送到了。发送,请注意查收
你的朋友:好的。
货送到了,你朋友:好的,收到货就可以结案了。
物流:好的,我结案了。
这就是所谓的四浪(拜拜);
(注:三次握手挥四次,根据您建立socket时选择的协议确定)。
这样很麻烦吗?估计顺丰有这个服务,但是其他大部分公司还是没有我没有这么贴心的服务。它们可能是udp协议。
udp相对简单。当你用插座发送货物时,物流公司不。;我不在乎你的朋友是否能和你联系。它只负责送你的货,完成它。没有必要通知你的朋友,你和你的朋友不要。;不需要连接。这叫没有联系。
两种协议的区别和应用udp常用于一次传输相对少量数据的网络应用,udp也常用于多媒体应用(如ip、实时视频会议、流媒体等。).显然,可靠的数据传输对于这些应用来说并不是最重要的,但是tcp的拥塞控制会导致数据出现较大的延迟,这是他们所不能容忍的。我们最熟悉的视频通话,大部分都在使用udp协议。
tcp是面向连接的,即在发送数据之前需要建立一个连接,tcp有拥塞机制。当前部分数据还没有收到,后面部分数据会被阻塞,直到第一部分数据传送ok,所以通过tcp连接传输的数据是无错、不丢失、不重复、按顺序到达的;tcp协议需要用在对数据完整性和安全性要求较高的场景,比如发送重要的办公文档和图片,会影响数据质量。
tcp/ip协议族中传输层使用的主要协议是面向连接的传输控制协议tcp和无连接用户数据报协议udp。
udp的主要特点:
(1)udp是无连接的,发送数据前不需要建立连接。
(2)udp使用最大努力来传送,并且不保证可靠的传送。
(3)udp是面向消息的。udp会在应用层传递的消息中添加一个报头,然后直接传递给网络层。
(4)udp没有拥塞控制,所以网络拥塞不会降低源主机的发送速率,这一点对于一些实时应用非常重要。
(5)udp支持一对一、一对多、多对一、多对多的交互通信。
(6)6)udp的报头开销很小,只有8个字节。