TCP学习总结(一)

来源:互联网 发布:现在淘宝发空包会查吗 编辑:程序博客网 时间:2024/05/01 01:06

传输层的基本概念:

传输层协议具有几种责任。一种责任就是创建进程到进程(程序到程序)的通信,TCP使用端口号来完成这种通信。另一种责任就是在运输层提供流控制和差错控制机制,TCP使用滑动窗口协议完成流控制,它使用确认分组、超时、和重传来完成差错控制。

运输层还应负责为应用程序提供连接机制,这些应用程序应当能够向运输层发送数据流。在发送器运输层的责任应当是和接收器之间建立连接,将数据流分割成为可运输的单元,将他们编号,然后逐个发送给它们。运输层在接收端的责任应当是等待属于同一个的单元,将他们编号,然后逐个发送它们。运输层在接收端的责任应当是等待属于同一个进程的所有不同单元的到达,检查并传递那些没有差错的单元,并将它们作为一个流交付给接受进程。当整个流发送完毕后,运输层应当关闭这个连接。

 

TCP协议端口号的分配:在本地计算机上运行的客户程序定义它自己是使用端口号,它由运行在本地主机上的TCP软件随即选取。这叫做短暂端口号。           服务器使用熟知端口号。

 

TCP的服务:TCP被认为是一种流式运输层服务。为了进行流式交付,发送TCP和接收TCP都要使用缓存。发送TCP使用发送缓存来存储从发送应用程序来的数据。发送应用程序交付数据的速率是它产生数据的速率。发送应用程序将数据写到发送TCP的缓存中。但是,发送TCP不能为发送应用程序发出的每一个写操作都创建一个数据报文段。TCP可选择将好几个写操作组合成一个报文段,以便使传输效率更高。   当引用程序希望为每一个写操作都创建一个报文段时,则需要使用 急迫(push)请求为每一个写操作创建一个报文段。

接收TCP在收到报文段后就将它们存储在接收缓存中,在接收应用程序读完数据之前,数据仍留在缓存中。

 

TCP提供全双工服务。即数据可在同一时间双向流动。当分组从A发往B时,它也可以携带对B发来的分组的确认。同理,当分组从B向A发送时,它也可以携带对A发来的分组的确认。这就叫做捎带。因为确认随数据一起发送。当然,若一方没有数据可以发送,它就只能仅发送确认而没有数据。

 

报文段格式:

 

 

序号:它指派给本报文段数据的第一个字节。TCP是流式运输协议。为了保证连通性,要发送的每一个字节都要编上号。序号告诉目的地,这个序列中的哪一个字节是报文段中的第一个字节。连接建立时,每一方使用随机数产生器产生一个初始序号。它通常对每一个方向都是不同的。

确认号:如果报文段的接收端成功的接收了对方发来的序号X,它就将确认号定义为X+1。

选项:选项分为两类,一类是一字节的,为选项结束和无操作。第二类为多字节的,有最大报文段长度、窗口扩大因子以及时间戳。其中的最大报文段长度定义了数据的最大长度,而不是报文段的最大长度。最大数据长度是在连接建立阶段确定的,这个大小是由报文段的目的站而不是源站确定的。               窗口扩大因子是为了解决高吞吐量和高时延迟的传输而设计选项。由于发送端的高吞吐量和传输介质的延迟,窗口扩大因子可用于增加滑动窗口的大小。窗口扩大因子只能在连接建立阶段确定。

 

流控制:

流控制定义了在收到从目的站发来的确认之前源站可以发送的数据量。TCP采取折衷的一种方法,它定义一个窗口,此窗口用在从应用程序交付的并准备发送的数据的缓存上,TCP发送数据的多少是由这个窗口定义的。

 

滑动窗口:

为了完成流控制,TCP使用滑动窗口协议。使用这种方法,两个主机为每一个连接各使用一个窗口。窗口覆盖了缓存的一部分,这部分就是主机可以发送而不必考虑从另一个主机发来的确认

当收到前面窗口的确认信息后,滑动窗口向左移动。

 

 

 

 这里给出的窗口是固定大小的。在TCP中窗口大小是可变的。目的站在每一个确认报文段中都可以定义窗口大小。通知的窗口大小是与确认号有关的。

窗口可以进行增大和减小。目的站可以在确认报文中增大窗口。也可以在确认报文中减小窗口。但在减小窗口中有一个限制:窗口在减小时其前沿不能向左滑动。如下图

 

窗口管理:TCP使用两个缓存和一个窗口来控制数据的流动。发送端的TCP有一个缓存,用来存储从发送从应用程序来的数据。TCP的接收端也有一个缓存。它接收数据,检查它们,并将它们存储在缓存中,以便接收应用程序将数据取走。由接收端宣布的窗口大小通常就是接收端的TCP缓存剩下的空间

 

 

在数据报的传送和接收过程中,当发送应用程序产生数据很慢,或者接收应用程序吸收数据很慢,或者两者都有的时候这就使得操作效率的降低。而如果报文段中所含的数据很少,这样又由于TCP头和IP头的增加,使得传输同样量数据的时候增加了报文头类型数据的传输。这样在发送端就强迫TCP模块收集数据,然后用一个更大的数据块来发送。 有一个Nagle算法来解决此类问题

而如果在接收端中,应用程序吸收数据的速度很慢。例如,当缓存区满时,应用程序吸收了1个字节的数据,这个时候,接收端的TCP模块迅速向发送端发出请求,请求其发送1字节的数据报文,这样,又会大大增加了网络带宽。解决这种问题的方法为Clark算法

 

 

 

 

 

 

差错的控制:

差错控制包括以下的一些机制:检测受到损伤的报文段,丢失的报文段,失序的报文段和重复的报文段。

TCP中的差错检测是通过3种简单的工具来完成的:检验和、确认和超时。

 

目的TCP处理失序的报文段也很简单:它对失序的报文段不确认,直到收到所有它以前的报文段为止。当然,若确认晚到了,源TCP的失序的报文段的计时器会到期而重新发送该报文。目的TCP就丢弃重复的报文段。

确认的丢失:在tcp的确认机制中,丢失的确认甚至不会被源TCP发现,TCP使用累计确认系统,每一个确认是证实一直到由确认号指明的字节为止的所有字节都已经收到了。

原创粉丝点击