Python小白__网络层级

Posted jokertycoon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python小白__网络层级相关的知识,希望对你有一定的参考价值。

Python小白__网络分析

         刚刚开始接触Python,为了怕遗忘,所以写个博文方便自己回顾,也可以和大家分享,有不同意见,大家共同探讨学习。

网络层级

         第一篇是对于网络的一些看法和感想,不只是Python

   众做周知,在现在的网络时代,最重要的就是网络通信,通信的方式有甚多 ,有Http,TCP,UDP等等,其不同程序语言实现方式也很多,但是底层的通信原理都相差不多。所以就有了一个网络通信的网络层级之分。

         一般网络层级分为四层,分别为:应用层,传输层,网络层,链路层。

假如现在A要传递一条数据给B

          应用层:决定了A需要传递什么数据给B,并且保证B可以解析这个数据

         传输层:决定如何传输数据【UDP 或TCP】(可以理解为快递公司)

         网络层:有一个唯一的标识,一般是IP (相当于收件的地理位置坐标)

         链路层:具体的传输工具,光纤或者Wifi等等(相当于快递空运或者车运)

        这样,你想要发送的数据,就会像快递一样,发送给B啦

对于TCP和UDP的一些想法

       对于平常接触和使用来说,TCP肯定是多余UDP太多的,因为其封装的更加的简单方便,易于实现和使用,和朋友谈论,也经常受到他们的的“教导”,除非你正在写一个动作类的游戏,否则,你就用TCP吧,甚至即使在MMO游戏也会推荐你用TCP,毕竟大名鼎鼎的魔兽,就是使用的TCP通信。遗憾的是他们和我的想法总是不能达成一致。

         首先说明一下,TCP依旧是我目前工作使用的主流,因为在数据量不大的情况下,TCP是一种安全且常见的选择,尽管如此,当我在尝试克服陌生的恐惧开始接触UDP和TCP底层运行机制以后,才知道。当每次服务器达到峰值,在有时3G或者WiFi的情况下,Ping值上升到1000多毫秒的原因。

         先说说TCP的优势:

                   简单直接的长连接

                   可靠的信息传输

                   数据包大小没有限制

         但是,任何一个和TCP打过交道的人都知道,要实现一个稳定的TCP网络连接,需要处理各种隐藏的坑,比如断线检测,慢速客户端相应,阻塞数据包,对开放连接的各种DOS共计,阻塞和非阻塞IO模型等等。

         当这些能够很好的避开以后,最大的问题就是TCP最糟糕的特性->他对阻塞的控制,一般来说,TCP假定丢包是由于带宽不够造成的,所以发生这种情况,TCP就会减少发包的速度。在3G或者Wifi的情况下,你希望的是立马重新发这个数据包,然而TCP阻塞机制却完全采用了相反的方式来处理,并且没有任何办法能够绕过这个机制,因为他是构建TCP协议的基础,所以,这就是为什么在有时3G或者WiFi的情况下,Ping值上升到1000多毫秒的原因。

为什么不用UDP?

         UDP相对于TCP来说,既简单又困难。因为UDP只是使用一个Socket通信,不想TCP一个客户端一个建立一个Socket,TCP一些基本的连接概念,一些包序功能和所谓的连接可靠性,这些UDP都没办法简单的提供给你。这就是人们为什么更加推荐TCP的原因。在用TCP的时候,你虽然不用考虑哪些问题,但是当连接数达到500以上的时候,这个时候TCP会有明显很大的延迟,是的UDP没有提供所有的解决方法,但正如你看到的那样,这也正是UDP好用的地方,从某种意义上说,TCP对UDP就好比是HIbernate和手写SQL的区别。

         其实魔兽的Ping值也是达到了1000毫秒以上,他们也只是用了一些延迟处理机制,比如Nagle算法,预测行为,等等,让玩家不易察觉这种延迟。但是当两个玩家碰撞的话,这种预测就显得苍白无力了,这里我也不再过多赘述、

那么到底使用UDP还是TCP呢?

         如果你的需求是客户端间歇性的发起无状态的查询,并且偶尔发声延迟是可以容忍的,那么可以使用HTTP/HTTPS

         如果你的客户端和服务器丢可以独立发包,但是偶尔发生延迟可以容忍,比如在线的纸牌游戏,那么建议使用TCP长连接

         如果客户端和服务器都可以独立发包,并且无法忍受延迟(比如大多数人的多人动作游戏)那么使用UDP吧

         更新的话,最好是用HTTP去获取上次更新内容,然后使用UDP跟游戏服务器连接。

 

以上是关于Python小白__网络层级的主要内容,如果未能解决你的问题,请参考以下文章

Python自学从入门到就业之函数基础(小白必看)

python小白学习之旅5

小白的Python之路_day2

小白学数据 | 28张小抄表大放送:Python_R_大数据_机器学习

python 小白(无编程基础,无计算机基础)的开发之路 辅助知识3 python os 用法

Python小白学习之路(二十二)—生成器