UDP、TCP 与 SCTP 协议

2014-05-21 11:47:00   最后更新: 2014-06-18 23:01:43   访问数量:774




UDP是一个简单的传输层协议,应用进程往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地

 

UDP不保证UDP数据报会到达最终的目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次

我们使用UDP进行网络编程所遇到的问题是他缺乏可靠性,如果一个数据报到达了最终的目的地,但是校验和检测发现有错误,或者该数据报在网络传输途中丢失了,他就无法被投递给UDP套接字,也不会被源端自动重传,如果想要确保一个数据报到达目的地,可以忘应用程序中添加一大堆的特性:来自对方的确认、发送超时、重传等

 

每个UDP数据报都有一个长度,如果一个数据报正确地到达了目的地,那么该数据报的长度将随着数据一起传递给接收端的应用程序,而TCP协议则没有任何记录边界,这就是数据报协议与流协议的区别

 

UDP提供无连接的服务,因为UDP客户与服务器之间不必存在任何长期关系,比如用户可以创建一个UDP套接字并且发送一个数据报给一个特定的服务器,然后立即使用同一个套接字发送另一个数据报给另一个服务器,同样,一个UDP服务器可以用同一个可以用同一个UDP套接字从若干个不同的客户接收数据报

 

1、可靠性

由TCP向应用进程提供的服务不同于由UDP提供的服务

TCP提供客户与服务器之间的连接,TCP客户先与某个给定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止连接

TCP提供了可靠性,当TCP向另一端发送数据时,它要求对端返回一个确认,如果在等待固定长时间后没有收到确认就自动重传并等待,在数次重传失败后,TCP才放弃,TCP并不是100%可靠的协议,因为这是不可能做到的,他只提供可靠性保障

 

TCP含有用于动态估算客户和服务器只见到往返时间(RTT)的算法,以便它知道等待一个确认需要的时间,例如RTT在一个局域网上大约需要几毫秒,跨越一个广域网则需要几秒钟,RTT总是会收到网络流通等各种变化因素的影响,因此TCP会持续估算一个给定连接的RTT

 

TCP通过给每个分节关联一个序列号对所发送的数据进行排序

 

TCP通过提供确认、序列号、RTT估算、超时和重传等机制提供了可靠性,而UDP本身不提供这些机制,所以不提供可靠性

 

2、流量控制

TCP提供流量控制

TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为“通告窗口”,指出接收缓冲区中当前可用的空间量,从而保证发送端发送的数据不会使接收缓冲区溢出

该窗口时刻动态变化

而UDP不提供流量控制,我们很容易让较快的发送端以一个UDP接收端难以跟上的速率发送数据报

 

3、全双工

TCP连接是全双工的,这意味着在一个给定的连接上应用可以在任何时刻在进出两个方向上既发送数据又接收数据,因此TCP必须为每个数据流方向跟踪诸如序列号和通告窗口大小等状态信息

UDP也可以是全双工的

 

SCTP提供的服务与UDP、TCP提供的类似

 

SCTP在客户和服务器之间提供关联,并像TCP那样给应用提供可靠性、排序、流量控制以及全双工的数据传送

SCTP中使用“关联”一词取代“连接”,连接通常只涉及两个IP地址之间的通信,而SCTP的多宿性可以在两个系统之间进行通信(不止两个地址)

与TCP不同,SCTP是面向消息的,它提供各个记录的按序递送服务 ,与UDP一样,由发送端写入的每条记录的长度随数据一道传递给接收端应用

SCTP能够在所连接的端点之间提供多个流,每个流各自可以按序递送消息,一个留上的某个消息的丢失不会阻塞同一关联其他流上消息的投递,这种做法与TCP恰好相反,TCP在单一字节流中任何位置的字节丢失都将阻塞该连接上的后续所有数据的递送,直到该丢失被修复为止

 

SCTP还提供多宿性,使得单个SCTP断点能够支持多个IP地址,该特性可以增强应对网络故障的健壮性,一个断点可能有多个冗余的网络连接,每个网络又可能有各自接入因特网基础设施的连接

当该端点与另一个端点建立关联后,如果他的某个网络或某个跨越因特网的通路发生故障,SCTP就可以通过切换到使用已与该关联相关的另一个地址来规避所发生的故障

 

 






读书笔记      技术帖      linux      unix      计算机网络      unp      unix网络编程      tcp      udp      网络编程      sctp      龙潭书斋     


京ICP备15018585号