您的位置:首页 > 理论基础 > 计算机网络

2017-02-14 面向连接的运输:TCP、TCP链接、TCP报文段结构、往返时间的估计与超时、可靠数据传输、流量控制、TCP链接管理

2017-02-16 22:02 991 查看
2017-02-14 面向连接的运输:TCP、TCP链接、TCP报文段结构、往返时间的估计与超时、可靠数据传输、流量控制、TCP链接管理

3.5 面向连接的运输:TCP

为了提供可靠传输,TCP依赖于许多基本原理,其中包括差错检测、重传、累积确认、定时器以及用于序号和确认号的首部字段。

3.5.1 TCP链接

TCP被称为面向连接的(connection-oriented),这是因为在一个应用程序可以开始向另一个应用程序发送数据之前,这两个进程必须先相互“握手”,相互发送某些预备报文段,以建立确保数据传输的参数。

由于TCP协议只在端系统中运行,而不在中间的网络元素中运行,所以中间的网络元素不会维持TCP链接状态。事实上,中间路由器对TCP连接完全视而不见,他们看到的是数据报,而不是链接。

TCP链接提供的是全双工服务(full-duplex service):如果一台主机上的进程A与另一台主机上的进程B存在一条TCP连接,那么应用层数据就可以在从进程B流向进程A的同时,也可以从进程A流向进程B。

TCP连接也总是点到点(point-to-point)的,即在单个发送方与单个接收方之间的连接。所谓“多播”,即在一次发送操作中,从一个发送方将数据传送给多个接收方,对TCP来说这是不可能的。

客户首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应,最后,客户再用第三个特殊报文段作为相应。

前两个报文段不承载“有效载荷”,第三个报文段可以承载有效载荷。由于在这两台主机之间发送了3个报文段,所以这种连接建立过程常被称为三次握手(three-way handshake)。

客户进程通过套接字传递数据流。数据一旦通过该门,他就由客户中运行的TCP控制了。TCP将这些数据引导到该连接的发送缓存(send buffer)里,发送缓存是在三次握手初期设置的缓存之一。

接下来TCP就会不时从发送缓存里取出一些数据。有趣的事TCP规范中只是规定了“TCP应该在他方便的时候以报文段的形式发送数据”。

TCP可以从缓存中取出并放入报文段中的数据受限于“最大报文段长度”(Maximum Segment SIze,MSS(MSS指的是报文段里应用层数据的最大长度,不包括TCP首部))。MSS通常根据最初确定的由本地发送主机发送的最大链路层帧长度(即所谓的最大传输单元(Maximum Transmission Unit,MTU))来设置。设置该MSS要保证一个TCP报文段加上TCP/IP首部长度将适合单个链路层帧。

现在已经有多种发现路径MTU的方法,并基于路径MTU值设置MSS(路径MTU是指能在从源到目的地的所有链路上发送的最大链路层帧)

TCP为每块客户数据配上一个TCP首部,从而形成多个TCP报文段(TCP
segment)。这些报文段被下传给网络层,网络层将其封装在网络层IP数据包中。然后这些IP数据报被发送到网络中。可以看出,在两台主机之间的网络元素,没有为该连接分配任何缓存和变量。

3.5.2 TCP报文段结构。



如前所述,MSS限制了报文段数据字段的最大长度。

TCP报文段的结构与UDP相似,首部包括源端口号和目的段口号,它被用于多路复用/分解来自或送到上层应用的数据。

另外TCO也包括 检验和字段(checksum field)

32比特的序号字段(dequeue number field)32比特的确认号字段(acknowledgment number field)

用来实现可靠数据传输

TCP中一个报文段的序号(dequeue number for a segment)是该报文段首字节的字节流编号。

TCP连接收到报文会要回复确认报文,主机A填充进报文段的确认号是主机A希望从主机B收到的下一字节的序号。

如主机A收到了B的 YYY及以后数据,但始终没有收到XXX到YYY的字段,则A会在确认报文中确认号填充XXX数据,TCP指确认该流中至第一个丢失字节为止的字节(即第XXX字节),所以TCP也被称为累计确认(cumulative acknowledgment)。

一条TCP连接的双方均可以随机的选择初始序号。这样可以减少将那些仍在网络中存在的来自两台主机之间先前已经终止的连接的报文段,误认为是后来这两台主机之间新建连接所产生的报文段的可能性(碰巧与旧连接使用了相同的端口号)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: