您的位置:首页 > 理论基础 > 计算机网络

多人游戏用 TCP 还是UDP

2015-11-30 19:57 423 查看
UDP and TCP 

首先UDP 和TCP
都是套接字。假设我们要开发基于网络的多人游戏,那我们要如何选择是用tcp还是udp呢?

TCP/IP 是指 ‘transmission control protocol’
和 ‘Internet protocol’。
这两基本是你所有上网活动背后的主干。

tcp是可靠的,大家都知道。像打电话,是面向连接的。能保证你发的东西(e.g 1,2,3)
按顺序到达接受方。由于是面向连接的,所以传输的数据室流数据(stream data),可ip是要发包的,所以实际中,tcpip会帮你把数据分装成包,然后发送。

UDP是指‘user datagram protocol’,比起tcp/ip
它省去了许多细节,直接建立在ip协议之上的轻量级的一层。 UDP是往一个ip地址的一个端口发送消息,接受方就要一直监听这个端口。一旦这个端口传来任何信息,接收方就可以读取数据了。udp是不可靠的传输。传输过程中,大部分数据包都可以抵达目的地,可是仍然会有丢包的现象。同时,udp是不保证接受的顺序的,

所以,根据以上TCP和UDP
的基本情况,我们总结一下。

TCP:

基于连接的

可靠的传输,保证到达顺序

自动拆分数据流

有流量控制,保证不会溢出

用起来简单

UDP:

不是基于连接的

不可靠传输,不保证顺序,可能重复
,可能乱序,可能根本没收到

若丢包,我们需要设计一个方法来发现丢包并且设计要不要重传

所以结论就是tcp好简单,一切都协议都为我们做好了,
我们就拿着用就可以。

BUT +HOWEVER-> 还是要分情况而定。

要做出用哪种协议的决定,我们必须要知道各个协议的特点,才能对症下药。

先看TCP, TCP是一种流协议(stream protocol),
而ip协议是基于package(包)的。
所以啊TCP内部的代码会把你的流拆分成包。比如一个包是100byte,
若你发200tcp帮你分2个包,若你发50,tcp会等另外50来了
够了一个包之后再发。不知道我说明白了没。所以当你坐游戏的时候,你可能需要的是服务器尽快给你反馈,所以若像tcp这样攒够了再发的,用户体验就会很差。TCP
有个设置叫TCP_NODELAY。这个设置可以让TCP不等有足够的数据再发,而是立刻马上发。这也被叫做disabling
Nagle’s algorithm。可是即使这样设置了,还是会有许多问题,而这些问题都源于TCP是如何处理丢包和乱序的包以给你提供一个有序的、可靠的传输的假象的。 

本质上,TCP是把流数据打成包然后通过不可靠的IP传输,然后到了接收端重组成流。
那么TCP是怎么处理丢包和乱序的呢?其实简单了说(复杂了我也不知道)就是发送方会等接受确认(acknowledgement)。等不到就重传。所以一旦丢包,我们就得等着他重传,即
945d
使新来的数据已经排好了,还是要等那个丢了的包才能用。这理论上需要一个RTT(round
trip time),可实际中一般要2*RTT,然后重发还需要一个单程的时间。ping是从发包到接收到服务器的响应所用的时间,若PING值是125ms,那么你最好也要等1/5秒才能重传。所以用TCP
来连即时战略游戏是不好的。所以TCP不是即时战略游戏的菜。

原文网址:http://gafferongames.com/networking-for-game-programmers/udp-vs-tcp/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  网络 TCP UDP 游戏