UNIX网络编程---传输层:TCP、UDP、SCTP(二)
UNIX网络编程----传输层:TCP、UDP、SCTP
一、概述
本章的焦点是传输层:包括TCP、UDP、和SCTP(流控制传输协议)。SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令。
UDP是一个简单的、不可靠的数据报协议。TCP是一个复杂、可靠的字节流协议。SCTP与TCP类似之处在于它也是一个可靠的数据报协议,但它还提供消息边界、传输级别多宿支持以及将头端阻塞减少到最小的一种方法。需要关注的几点:TCP的三路握手、TCP的链接终止序列和TCP的TIME_WAIT状态,SCTP的思路握手和SCTP的链接终止,加上由套接字层提供的TCP、UDP和SCTP缓冲区机制。
二、总图
从右向左查看该图,最右边的5个网络应用在使用IPv6,
1) TCP(传输控制协议Transmission Control Protocol)
TCP是中面向链接的协议,为用户进程提供可靠的全双工字节流。TCP套接字是一种流套接字。TCP关心确认、超时和重传之类的细节。TCP既可以使用IPv4,又可以使用IPv6
2)UDP(用户数据报协议 UserDatagram Protocol)
UDP是一种无连接的协议。UDP套接字是一种数据报套接字。UDP数据报不能保证最终到达他们的目的地,IPv4和IPv6都可以使用。
3) SCTP(流控制协议 StreamContril Transmission Protocol)
SCTP是一个提供可靠全双工关联的面向连接的协议。SCTP是多宿的,从而每个关联的两端均涉及一组IP地址和一个端口号。TCP既可以使用IPv4,又可以使用IPv6
4) ICMP(网际控制消息协议)
ICMP处理在路由器和主机之间流通的错误和控制消息。这些消息通常有TCP/IP网络支持软件本身(而不是用户进程)产生和处理,不过图中展示的ping和tracerroute程序同样适用ICMP。
5)IGMP(网际组管理协议) 由于多播
6)ARP(地址解析协议)
ARP把一个IPv4地址映射成一个硬件地址(如以太网地址)。ARP通常用于注入以太网、令牌环网和FDDI等广播网络,在点到点网络上并不需要。
一、用户数据报协议(UDP)
应用进程往一个UDP套接字写入一个消息,该消息随后被封装到一个UDP数据报,该UDP数据报进而被封装到一个IP数据报,然后发送到目的地。UDP不保证UDP数据会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保证不变,也不保证每个数据报只到达一次。它的重要特点就是缺乏可靠性。如果数据报到达了其最终目的地,但是校验和检测发现有错误,或者改数据报在网络传输中被丢弃了,它就无法被投递给UDP套接字,也不会被源端自动重传。如果想保证一个数据报到达其目的地,可以往应用程序中添加特性:来自对端的确认、本段的超时与重传等。
每个UDP数据报都有一个长度。如果一个数据报正确到达目的地,那么数据报的长度将随数据一道传递给接受端的应用进程。而TCP是一个字节流协议,没有任何记录边界,这一点不同与UDP.
UDP提供无连接服务,因为UDP客户与服务器之间不必存在任何长期的关系。距离说明,一个UDP客户可以创建一个套接字并发送一个数据报给一个给定的服务器,然后立即用同一个套接字大宋另一个数据报给另一个服务器。同样,一个UDP服务器可以用通一个UDP套接字从若干个不用的客户接受数据报,每个客户一个数据报。
二、TCP(传输控制协议)
TCP首先和服务器建立连接,还提供了可靠性,当TCP向另一端发送数据时,它要求对端但会一个确认。如果没有确认,TCP就自动重传数据并等待更长时间。在数次重传失败后,TCP才放弃,如此尝试发送数据上所化的总时间一般为4~1分钟。
1) TCP的几个能力,首先能够估算客户和服务器之间的往返之间
2) TCP给传输的数据加上序号,并对所发送的数据进行排序。如果接收端TCP接受到雷子对端的重复数据,它可以判定数据时充当的,从而丢弃。如果数据非顺序到达,接收端TCP将先根据他们的需要重新排序。还提供流量控制。TCP总是告知对端在任何时刻它一次能够从对端接受对少字节的数据,称为通告窗口。任何时刻,该窗口指出接受缓冲区当前可用的空间量,从而保证发送端发送数据不会使接受缓冲区溢出。该窗口时刻动态变化。也有可能为0
3) TCP连接是全双工的,意味着在一个给定的连接上应用可以在任何时刻在进入方向上既可以发送数据由接受数据。建立一个全双工连接后,需要的话可以把它转换成一个单工连接。
4) UDP可以是全双工的
一、流控制传输协议(SCTP)
SCTP是面向消息的。和UDP一样,由发送端写入的每条记录的长度随数据一道传递给接受端应用。
SCTP能够在所连接的端点之间提供多个流,每个流各自可靠地按序递送消息。一个流上某个消息的丢失不会阻塞通一个关联其他流上消息的投递,这个做法和TCP相反,TCP字节丢失将阻塞连接上其后所有数据的递送,直到该丢失被恢复为止。