(1) tcp、udp与sctp概述

说明: 此系列文档根据阅读《Unix网络编程卷1:套接字联网API》书籍而记录的相关技术知识,记录下相关技术知识主要是方便后续使用查阅,如有侵权与不恰当之处,请随时联系本人整改。

一、术语说明

IPv4网际协议版本4 (Internet Protocol version 4)。IPv4(通常称之为IP)自20世纪80年代早期以来一直是网际协议族的主力协议。它使用32位地址。IPv4给TCP、UDP、SCTP、ICMP和IGMP提供分组递送服务。

IPv6网际协议版本6 (Internet Protocol version 6)。IPv6是在20世纪90年代中期作为IPv4的一个替代品设计的。其主要变化是使用128位更大地址以应对20世纪90年代因特网的爆发性增长。IPv6给TCP、UDP、SCTP和ICMPv6提供分组递送服务。

当无需区别IPv4和IPv6时,我们经常把“IP”一词作为形容词使用,如IP层、IP地址等

TCP传输控制协议 (Transmission Control Protocol)。TCP是一个面向连接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字。TCP关心确认、超时和重传之类的细节。大多数英特网应用程序使用TCP。注意,TCP既可以使用IPv4,也可以使用IPv6。

UDP用户数据报协议 (User Datagram Protocol)。UDP是一个无连接协议。UDP套接字是一种数据包套接字(datagram socket)。UDP数据包不能保证最终到达它们的目的地。与TCP一样,UDP既可以使用IPv4,也可以使用IPv6。

SCTP流控制传输协议 (Stream Control Transmission Protocol)。SCTP是一个提供可靠全双工关联的面向连接的协议,使用“关联”一词来指称SCTP中的连接,因为SCTP是多宿的,从而每个关联的两端均涉及一组IP地址和一个端口号。SCTP提供消息服务,也就是维护来自应用层的记录边界。与TCP和UDP一样,SCTP既可以使用IPv4,也可以使用IPv6,而且能够在同一个关联中同时使用它们。

ICMP网际控制消息协议 (Internet Control Message Protocol)。ICMP处理在路由器和主机之间流通的错误和控制消息。这些消息通常由TCP/IP网络支持软件本身(而不是用户进程)产生和处理,不过总结概述图中展示的ping和traceroute程序同样使用ICMP。有时我们称这个协议为ICMPv4,以便与ICMPv6相区别。

IGMP网际组管理协议 (Internet Group Management Protocol)。IGMP用于多播,它在IPv4中是可选的。

ARP地址解析协议 (Address Resolution Protocol)。ARP把一个IPv4地址映射成一个硬件地址(如以太网地址)。ARP通常用于诸如以太网、令牌环网和FDDI等广播网络,在点到点网络上并不需要。

RARP反向地址解析协议 (Reverse Address resolution Protocol)。RARP把一个硬件地址映射成一个IPv4地址。他有时用于无盘节点的引导。

ICMPv6网际控制消息协议版本6 (Internet Control Message Protocol version 6)。ICMPv6综合了ICMPv4、IGMP和ARP的功能。

BPFBSD分组过滤器 (BSD packet filter)。该接口提供对于数据链路层的访问能力,通常可以在源自Berkeley的内核中找到。

DLPI数据链路提供者接口 (datalink provider interface)。该接口也提供对于数据链路层的访问能力,通常随SVR4内核提供。

说明1:所有网际协议由一个或多个称为请求标注 (Request for Comments, RFC)的文档定义,这些RFC就是它们的正式规范。

说明2:使用术语“IPv4/IPc6主机”或“双栈主机”表示同时支持IPv4和IPv6的主机。

说明3:TCP/IP协议的其它细节参见TCPv1。TCP/IP在4.4BSD上的实现参见TCPv2。

二、协议详述

2.1 UDP
2.1.1 UDP数据封装

UDP用户数据报协议,是一个简单的传输层协议,在RFC 768[Postel 1980]中有详细说明。应用程序往一个UDP套接字写入一个消息,该消息随后被封装(encapsulating)到一个UDP数据报,该UDP数据报进而又被封装到一个IP数据报,然后发送到目的地。

2.1.2 UDP特点
  1. UDP是无连接的、不可靠的
  2. UDP不保证UDP数据报会到达其最终目的地
  3. UDP不保证各个数据报的先后顺序跨网络后保持不变
  4. UDP也不保证每个数据报只到达一次
  5. UDP不提供流量控制
  6. UDP也可以是全双工的

不可靠的说明:如果一个数据报到达了其最终目的地,但是校验和检测发现有错误,或者该数据报在网络传输中被丢弃了,它就无法被投递给UDP套接字,也不会被源端自动重传。假如想要确保一个数据报到达其目的地,可以往应用程序中添置一大堆的特性:来自对端的确认、本端的超时与重传等。

无连接的说明:UDP客户与服务器之间不必存在任何长期的关系。例如,一个UDP客户端可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字发送另一个数据报给另一个服务器。同样的,一个UDP服务器可以用同一个UDP套接字从若干个不同的客户端接收数据报,每个客户端一个数据报。

2.2 TCP

TCP在RFC 793[Poste1]中有详细说明,然后由RFC 1323[Jacobson,Braden,and Borman 1992]、RFC 2581[Allman,Paxson,and Stevens 1999]、RFC 2988[Paxson,and Allman 2000]和RFC 3390[Allman,Floyd,and Partridge 2002]加以更新。

2.2.1 TCP特点
  1. 首先,TCP提供客户与服务器之间的连接(connection)。TCP客户先与某个给定服务器建立一个连接,再跨该连接与那个服务器交换数据,然后终止这个连接。
  2. 其次,TCP还提供了可靠性(reliability)。当TCP向另一端发送数据时,它要求对端返回一个人确认。如果没有收到确认,TCP就自动重传数据并等待更长时间。在数次重传失败后,TCP才放弃,如此在尝试发送数据上所花的总时间一般为4~10分钟(依赖于具体实现)。
  3. TCP含有用于动态估算客人和服务器之间的往返时间(round-trip time,RTT)的算法,以便它知道等待一个确认需要多少时间。
  4. TCP通过给其中每个字节关联一个序列号对所发送的数据进行排序(sequencing)。
  5. 再次,TCP提供流量控制(flow control)。TCP总是告知对端在任何时刻它一次能够从对端接收多少字节的数据,这称为通告窗口(advertised window,也称接收窗口)。
  6. 最后,TCP连接是全双工的(full-duplex)。

可靠性注意:TCP并不保证数据一定会被对方端点接收,因为这是不可能做到的。如果有可能,TCP就把数据递送到对方端点,否则就(通过放弃重传并中断连接这一手段)通知用户。这样的话,TCP也不能被描述成是100%可靠的协议,它提供的是数据的可靠递送或故障的可靠通知。

排序注意:假设一个应用写2048字节到一个TCP套接字,导致TCP发送2个分节:第一个分节所含数据的序列号为1~1024, 第二个分节所含数据的序列号为 1025~2048。(分节 是TCP传递给IP的数据单元)。

  • 如果这些分节非顺序到达,接收端TCP将先根据它们的序列号重新排序,再把结果数据传递给接收应用。
  • 如果接收端TCP接收到来自对端的重复数据(假设对端认为一个分节已丢失并因此重传,而这个分节并没有真正丢失,只是网络通信过于拥挤),它可以根据序列号判定数据是否重复的,从而丢弃重复数据。

通告窗口注意:在任何时刻,该窗口指出接收缓冲区中当前可用的空间量,从而确保发送端发送的数据不会使接收缓冲区溢出。

  • 通告窗口时刻动态变化:当接收到来自发送端的数据时,窗口就减小,但是当接收端应用从缓冲区中读取数据时,窗口大小就增大。
  • 通告窗口大小减小到0是有可能的:当TCP对应某个套接字的接收缓冲区已满,导致它必须等待应用从该缓冲区读取数据时,方可从对端再接收数据。
2.3 SCTP

流控制传输协议:SCTP提供的服务与UDP和TCP提供的类似。SCTP在RFC 2960[Stewart et al.2000]中详细说明,并由RFC 3309[Stone,Stewart,and Otis 2002]加以更新。

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

SCTP中使用”关联“一词取代”连接“是为了避免这样的内涵:一个连接只涉及两个IP地址之间的通信。一个关联指代两个系统之间的一词通信,它可能因为SCTP支持多宿而涉及不止两个地址。

2.3.1 SCTP特点

与TCP不同的是,SCTP是面向消息的(message-oriented)。

SCTP提供各个记录的按序递送服务。

与UDP一样,由发送端写入的每条记录的长度随数据一道传递给接收端应用。

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

SCTP还提供多宿特性,使得单个SCTP端点能够支持多个IP地址。该特性可以增强应对网络故障的健壮性。一个端点可能有多个冗余的网络连接,每个网络连接又可能有各自接入因特网基础设施的连接。当该端点与另一个端点建立一个关联后,如果它的某个网络或某个跨越因特网的通路发生故障,SCTP就可以通过切换到使用已与该关联相关的另一个地址来规避所发生的故障。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值