“21天好习惯”第一期-13

面向连接的运输:TCP

TCP连接

TCP被称为是面向连接的,这是因为在一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立确保数据传输的参数。作为TCP连接建立的一部分,连接的双方都将初始化与TCP连接相关的许多TCP状态变量。
TCP连接提供的是全双工服务:如果一台主机上的进程A与另一台主机上的进程B存在一条TCP连接,那么应用层数据就可在从进程B流向进程A的同时,也从进程A流向进程B。TCP连接也总是点对点的,即在单个发送方与单个接收方之间的连接。

TCP报文段结构

TCP报文段由首部字段和一个数据字段组成。数据字段包括一块应用数据。与UDP一样,首部包括源端口号和目的端口号,它被用于多路复用/分解来自或送到上层的应用数据。另外,同UDP一样,TCP首部也包括检验和字段。TCP报文段首部还包含下列字段:

  • 32比特的序号字段和32比特的确认号字段。这些字段被TCP发送方和接收方用来实现可靠数据传输服务。
  • 16比特的接收窗口字段,该字段用于流量控制。
  • 4比特的首部长度字段,该字段指示了以32比特的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部的长度是可变的。
  • 可选与变长的选项字段,该字段用于发送方与接收方协商最大报文段长度时,或在高速网络环境下用作窗口调节因子时使用。首部字段中还定义了一个时间戳选项。
  • 6比特的标志字段。ACK比特用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认。

1.序号和确认号

TCP报文段首部中两个最重要的字段是序号字段和确认号字段。这两个字段是TCP可靠传输服务的关键部分。
TCP把数据看成一个无结构的、有序的字节流。我们从TCP对序号的使用上可以看出这一点,因为序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。一个报文段的序号因此是该报文段首字节的字节流编号。

2.Telnet:序号和确认号的一个学习案例

Telnet由RFC 854定义,它现在是一个用于远程登录的流行应用层协议。它运行在TCP之上,被设计成可在任意一对主机之间工作。Telnet是一个交互式应用。

往返时间的估计与超时

TCP如同rdt协议一样,它采用超时/重传机制来处理报文段的丢失问题。尽管这在概念上简单,但是当在如TCP这样的实际协议中实现超时/重传机制时还是会产生许多微妙的问题。也许最明显的一个问题就是超时间隔长度的设置。显然,超时间隔必须大于该连接的往返时间(RTT),即从一个报文段发出到它被确认的时间。

  1. 估计往返时间
    报文段的样本RTT(表示为SampleRTT)就是从某报文段被发出(交给IP)到对该报文段的确认被收到之间的时间量。大多数TCP的实现仅在某个时刻做一次RTT测量SampleRTT测量,而不是为每个发送的报文段测量一个SampleRTT。这就是说,在任意时刻,仅为一个已发送的但目前尚未被确认的报文段估计SampleRTT,从而产生一个接近每个RTT的新SampleRTT值。另外,TCP决不为已被重传的报文段计算SampleRTT;它仅为传输一次的报文段测量SampleRTT【Kan 1987】。

  2. 设置和管理重传超时间隔
    假设已经给出了EstimatedRTT值和DevRTT值,那么TCP超时间隔应该用什么值呢?很明显。超时间隔应该大于等于,否则,将造成不必要的重传。但是超时间隔也不应该比EstimatedRTT大太多,否则当报文段丢失时,TCP不能很快地重传该报文段,导致数据传输时延大。因此要求将超时间隔设为EstimatedRTT加上一定余量。当SampleRTT值波动较大时,这个余量应该大些;当波动较小时,这个余量应该小些。因此,DevRTT值应该在这里发挥作用了。在TCP的确定重传超时间隔的方法中,所有这些因素都考虑到了:
    TimeoutInterval=EstimatedRTT+4*DevRTT
    推荐的初始 TimeoutInterval值为1秒[RFC 6298]。同时,当出现超时后, TimeoutInterval值将加倍,以免即将被确认的后继报文段过早出现超时。然而,只要收到报文段并更新EstimatedRTT,就使用上述公式再次计算TimeoutInterval。

可靠数据传输

TCP在IP不可靠的尽力而为服务之上创建了一种可靠数据传输服务。TCP的可靠数据传输服务确保一个进程从其接收缓存中读出的数据流是无损坏、无间隙、非冗余和按序的数据流;即该字节流与连接的另一方端系统发送出的字节流是完全相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值