TCP-传输控制协议( 二 )


注重:TCP校验和也包括了96位的伪头部,其中有源地址、目的地址、协议以及TCP的长度 。这可以避免报文被错误地路由 。
按现在的标准,TCP的校验和是一个比较脆弱的校验 。具有高出错率的数据链路层需要额外的连接错误纠正和探测能力 。假如TCP是在今天被设计,它很可能有一个32位的CRC校验来纠错,而不是使用校验和 。但是通过在第二层使用通常的CRC或更完全一点的校验可以部分地弥补这种脆弱的校验 。第二层是在TCP层和IP层之下的,比如PPP或以太网,它们使用了这些校验 。但是这也并不意味着TCP的16位校验和是冗余的,对于因特网传输的观察表明在受CRC保护的各跳之间,软件和硬件的错误通常也会在报文中引入错误,而端到端的TCP校验能够捕捉到很多的这种错误 。这就是应用中的端到端原则 。
【TCP-传输控制协议】数据发送者之间用对接收数据的确认或不予确认来显式的表示TCP发送者和接收者之间的网络状态 。再加上计时器,TCP发送者和接收者就可以改变数据的流动情况 。这就是通常所指的流量控制,拥塞控制/或拥塞避免 。TCP使用大量的机制来同时获得强壮性和高可靠性 。这些机制包括:滑动窗口、慢启动算法、拥塞避免算法、快速重启和快速恢复算法等等 。对于TCP的可靠的丢包处理、错误最小化、拥塞治理以及高速运行环境等机制的优化的研究和标准制定,正在进行之中 。
连接终止
连接终止状态使用了四路握手过程,在这个过程中每个终端的连接都能独立地被终止 。因此,一个典型的拆接过程需要每个终端都提供一对FIN和ACK 。
TCP的端口
TCP使用了端口号的概念来标识发送方和接收方的应用层 。对每个TCP连接的一端都有一个相关的16位的无符号端口号分配给它们 。端口被分为三类:众所周知的、注册的和动态/私有的 。众所周知的端口号是由因特网赋号治理局(IANA)来分配的,并且通常被用于系统一级或根进程 。众所周知的应用程序作为服务器程序来运行,并被动地侦听经常使用这些端口的连接 。例如:FTP、TELNET、SMTP、HTTP等 。注册的端口号通常被用来作为终端用户连接服务器时短暂地使用的源端口号,但它们也可以用来标识已被第三方注册了的、被命名的服务 。动态/私有的端口号在任何特定的TCP连接外不具有任何意义 。可能的、被正式承认的端口号有65535个 。
TCP的发展历程
TCP是一个复杂的但同时又是在发展之中的协议 。尽管许多重要的改进被提出和实施,发表于1981年的RFC793中说明的TCP的许多基本操作还是未作多大改动 。RFC1122:《因特网对主机的要求》阐明了许多TCP协议的实现要求 。RFC2581:《TCP的拥塞控制》是一篇近年来关于TCP的很重要的RFC,描述了更新后的避免过度拥塞的算法 。写于2001年的RFC3168描述了对明显拥塞的报告,这是一种拥塞避免的信号量机制 。在21世纪早期,在所有因特网的数据包中,通常有大约95%的包使用了TCP协议 。常见的使用TCP的应用层有HTTP/HTTPS(万维网协议),SMTP/POP3/IMAP(电子邮件协议)以及FTP(文件传输协议) 。这些协议在今天被广泛地使用,这证实了它们的原作者的创造是卓越的 。

最近,一个新协议已经被加州理工学院的科研人员开发出来,命名为FAST TCP(基于快速活动队列治理的规模可变的传输控制协议) 。它使用排队延迟作为拥塞控制信号;但是因为端到端的延迟通常不仅仅包括排队延迟,所以FAST TCP (或更一般地,所有基于排队延迟的算法) 在实际互联网中的能否工作仍然是一个没有解决的问题 。
对TCP的选用情况

推荐阅读