大家好,我是标题党,啊不,我是小雨小雨,致力于分享有趣的、实用的技术文章。
内容分为翻译和原创,如果有问题,欢迎随时评论或私信,希望和大家一起进步。
分享不易,希望能够得到大家的支持和关注。
互联网是指 凡是 能彼此通信的设备组成的网络就叫互联网,指利用TCP/IP通讯协定所创建的各种网络,是国际上最大的互联网,也称“国际互联网”。
其中TCP/IP是网络的基础通信架构,提供了点对点链接的机制。并且将软件通信过程抽象化为四个抽象层,下层服务上层,也就是我们熟悉的七层OSI模型。(也就是说TPC/IP是联网的基础,由他衍生出了OSI)
OSI模型是一个视图使各种计算机在世界范围能互连接为网络的标准框架,也就是说是网络互接的标准。(大白话就是规则。按照这个规则,我们就能联网)
用一张图表示OSI模型:
如果讨论TCP/IP的时候,我们又可以分为四层,如下图:
看看就好,我们要关注的是应用层的http和传输层的tcp,对了,两个模型的对应关系如下:
由于TCP、UDP位于传输层,HTTP位于应用层,按照下层服务于上层的机制,我们从TCP、UDP开始说起。
UDP是什么UDP位于OSI模型的传输层,是一种无连接的协议,该标准定义的内容很专一,就是数据无脑发数据,不管天崩地裂,海枯石烂,发就完了。为啥这个莽夫是不可靠的呢?
无连接:就比如小雨去上班,不管他周内还是周末,上就完了,自然而然就会有一些问题发生
恒速:这个莽夫没有拥塞控制系统,也就是不会变通,一根筋按照一个频率进行发收运动,就算对方受不了了,UDP也不会改变它的频率。
简单:这货头部开销小,只有八字节,比tcp要少三倍左右,所以就很快。
不过,正由于UDP的快,也有一些场景是非他莫属的,比如DNS啊、音视频啊、实时游戏啊、聊天工具啊巴拉巴拉...
可能有人会问,DNS这种使用UDP会不会有问题啊,比如UDP丢包了,那岂不是返回404了啊。
没错,但是浏览器响应时间大致分为以下三个:
DNS解析 + TCP链接 + HTTP请求/响应
除了DNS能用UDP,其他二位也没法用啊,不然网站丢内容了啊。而且还有备选方案,某种情况下失败了会利用TCP重新查询的,不只是有UDP一种。
可能还有人会问,那聊天工具这种用UDP这问题大了啊,我要是跟我女神表白,这莽夫只管发,结果各种丢包(发送失败),而且我还不知道,那我心态崩了啊。我以为她知道,结果她不知道,然后她还不回我,你让我咋想...
只能说,为啥不能给女神留下神秘感,让她来主动找你呢,哈哈哈
其实通讯工具一般会发送两次,UDP发送一个消息后,如果服务器收到了,会用UDP在返你一个消息,如果没返回,或者发送失败,你就会收到发送失败类似的消息啦,去表白吧,没事的,消息肯定发的出去,答不答应就看自己了。
总的来说,在某些对速度要求极高,但是准确性要求低的情况,UDP是很适合的。
TCP是什么UDP莽夫不靠谱,TCP小伙来弥补。
关于TCP,我觉得可以用拟人化来代表,众所周知TCP是全双工的吗,其实就是两个独立的人在进行微信聊天。光一个人发是不行的,另一个人也得发,不然聊个j。
那TCP怎么就靠谱了呢?
没错,小伙看日历了!!!而且更厉害的是,他休假的时候也会看日历!!!
其实就是TCP在发送数据的前后,会进行连接创建和连接终止的操作。保证事务完整性。这就是我们经常被问到的问题:三次握手和四次挥手。
三次握手创建连接提前声明,关于每个标志的格式和内容是什么,这里不做讨论,有兴趣的自行研究。这些定义用到的时候再查就好。
在此之前,要先解释几个名词(又是名词,大白话不好吗 doge~)
SYN: 表示建立连接,如果我给你的消息里有这个标志,说明我想和你负距离接触,当然这是双向的,你也可以给我发。
FIN: 表示关闭连接,同上,不过表示我好了,请你离开