跳至正文

TDP(TCP-over-UDP library):基于UDP协议之上实现

随着互联网应用广泛推广,出现了越来越多的网络应用,其中基于p2p思想的各种网络技术的产品也越来越多的出现在我们的视野当中。从最早闻名的Napster到现在的Bittorrent、eMule、skype等产品,P2P这种网络应用模式已经从各个方面深入人心。这些产品在各自的网络实现技术上,都以各自的方法解决着同样面临的一个问题,如何让他们的软件产品在各异的网络拓扑结构中顺利的进行P2P通信。
众所周知,在当今的网络拓扑结构中,普遍存在使用NAT设备来进行网络地址转换,而让应用程序能跨越这些NAT设备进行全双工的通信,就成为非常重要的一个问题。对于实现跨越NAT通信可以采取很多种办法(对于能够直接连接、反向连接的情况不在此列):首先是通过服务器进行转发,这是比较粗暴的方法,而且在用户量大的时候,转发服务器需要付出相当大的代价;第二,可以使用NAT穿透技术。而大家知道关于NAT穿透中,UDP穿透的成功率比起TCP穿透要高出许多,这一点这里将不做多述,可以参考Bryan Ford的文章《Peer-to-Peer Communication Across Network Address Translators》(http://www.brynosaurus.com/pub/net/p2pnat/)。因此在UDP协议上构建一些大型的网络应用程序可能会成为很多人的需求。

UDP TCP (UDP/TCP)封包

MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC
由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧
我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。

滑窗协议(转载)

(1).窗口机制
滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):

滑动窗口协议

1. 滑动窗口算法

——————————————————————————–
滑动窗口算法工作过程如下。首先,发送方为每1帧赋一个序号(sequence number),记作S e q N u m。现在,让我们忽略S e q N u m是由有限大小的头部字段实现的事实,而假设它能无限增大。发送方维护3个变量:发送窗口大小(send window size),记作S W S,给出发送方能够发