TCP传输控制协议三向握手
我们都知道传输协议提供可靠数据传输的利用程序使用TCP,由于它可以验证数据是否是已正确且正确地通过网络传输。TCP是一种可靠的,面向连接的,字节流的协议。让我们更详细地查看这些特点中的每个。
TCP通过称为“带有重传的肯定确认”(PAR)的机制来提供可靠性。简而言之,使用PAR的系统会再次发送数据,除非它从远程系统入耳到数据已到达OK。在协作的TCP模块之间交换的数据单元称为段(请参见图19)。每一个段都包括一个校验和,收件人可以用来校验数据是否是完好无损。如果接收到的数据段未破坏,则接收方将肯定确认发送回发送方。如果数据段破坏,则接收方将其抛弃。经过适当的超时时间后,发送方TCP模块将重新传输未收到肯定确认的任何段。
TCP是面向连接的。它在两个通讯主机之间建立逻辑端到端连接。在传输数据之前,在两个端点之间交换称为握手的控制信息以建立对话。TCP通过在段头的字4中的Flags字段中设置适当的位来唆使段的控制功能。
TCP使用的握手类型称为三向握手,由于交换了三个段。主机A通过向主机B发送设置了“同步序列号”(SYN)位的段来开始连接。这部份告知主机乙是一个希望建立一个连接,它告知乙甚么序列号主机一个将作为其细分起始号码使用。(序列号用于按正确的顺序保持数据。)主机B通过设置了“确认”(ACK)和SYN位的段对A进行响应。B的段确认A的段的接收,并通知A主机B将从哪一个序列号开始。最后,主机A发送一个确认B的段已收到的段,并传输第一个实际数据。
进行此交换以后,主机A的TCP有积极的证据表明远程TCP处于活动状态并准备接收数据。一旦建立连接,就能够传输数据。当协作模块结束数据传输后,它们将与包括“不再有来自发送方的数据”位(称为FIN位)的网段交换三向握手,以关闭连接。端到真个数据交换提供了两个系统之间的逻辑连接。
TCP将其发送的数据视为连续的字节流,而不是独立的数据包。因此,TCP注意保持字节发送和接收的顺序。TCP段头中的“序列号”和“确认号”字段跟踪字节。
TCP标准不要求每一个系统以任何特定的编号开始对字节进行编号。每一个系统都会选择它将用作出发点的数字。为了正确跟踪数据流,连接的每端都一定要知道另外一真个初始编号。连接的两端通过在握手期间交换SYN段来同步字节编号系统。SYN段中的序列号字段包括初始序列号(ISN),它是字节编号系统的出发点。出于安全缘由,ISN应当是随机数。
数据的每一个字节均从ISN顺序编号,因此发送的数据的第一个实际字节的序列号为ISN+1。数据段标题中的序列号标识该段中第一个数据字节在数据流中的顺序位置。例如,如果数据流中的第一个字节是序列号1(ISN=0),并且已传输了4000字节的数据,则当前段中的数据的第一个字节是字节4001,并且序列号将是4001。
确认段(ACK)履行两个功能:肯定确认和流控制。该确认告知发送方已接收了多少数据和接收方可以接受多少数据。确认编号是接收者期望接收的下一个字节的序列号。该标准不需要每一个数据包都经过单独的确认。确认编号是对直至该编号的所有字节的肯定确认。例如,如果发送的第一个字节编号为1,并且成功接收了2000个字节,则确认编号为2001。
“窗口”字段包括window,还是远端可以接受的字节数。如果接收方能够再接收6000个字节,则该窗口为6000。该窗口向发送方唆使只要其发送的字节总数小于接收方的字节窗口,它就能够继续发送段。可以接受。接收者通过更改窗口的大小来控制来自发送者的字节流。零窗口告知发送方停止传输,直到接收到非零窗口值为止。
TCP还负责将从IP接收的数据传递到正确的利用程序。数据绑定到的利用程序由一个称为端口号的16位数字标识。的源端口和目的端口被包括在片断标头的第一个字。正确地与利用程序层之间来回传递数据是传输层服务所做的重要部份。