面向连接的运输: TCP
3.5.1 TCP连接
TCP提供的是全双攻工服务:如果一台主机上的进程A与另一台主机上的进程B存在一条TCP连接,那么应用层数据就可在从进程B流向进程A的同时,也从进程A流向进程B。TCP连接也总是点对点的,即在单个发送方与单个接收方之间的连接。
客户机首先发送一个特殊的TCP报文段,服务器用另一个特殊的TCP报文段来响应,最后,客户机再用第三个特殊报文段作为响应。前两个报文段不承载“有效载荷”,也就是不包含应用层数据,而第三个报文段可以承载有效载荷。由于在这两台主机之间发送了3个报文段,所以这种连接建立常被称为三次握手
- 一旦建立起一条TCP连接,两个应用进程之间就可以相互发送数据了。
TCP将这些数据引导到该链接的发送缓存里,发送缓存是在三次握手初期设置的缓存之一。- TCP可从缓存中取出并放入报文段中的数据量受限于最大报文段长(maximum segment size MSS) MSS通常根据最初确定的最大链路层帧长度来设置本地发送主机发送长度是这样的帧,即所谓最大传输单元(maximum transmission unit MTU)
- TCP将每块客户机数据加一个TCP首部,从而形成多个TCP报文段
引用块内容
TCP连接的组成包括:一台主机上的缓存、变量和与一个进程连接的套接字,以及令一台主机上的一套缓存、变量和与一个进程连接的套接字
3.5.2 TCP报文段结构
和UDP一样,首部包括源端口号和目的端口号(source and destination port number),它用于多路复用/多路分解来自或送至上层应用的数据。另外,同UDP一样,TCP首部也包括检验和字段(checksum field)。TCP报文段首部还包含下列字段
- 32比特的序号字段(sequence number field)和32比特的**确认号字段(acknowledgmentnumber field)
-16比特的接收窗口(receive window)字段,该字段用于流量控制。- 4比特的首部长度字段(header length field)该字段指示了以32比特的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部的长度是可变的。
- 可选与变长的选项字段(options field),该字段用于当发送方与接收方协商最大报文段长度(MSS),或在高速网络环境下用作窗口调节因子时使用。
- 6比特的标志字段(flag field)ACK比特用于指示确认字段中的值是有效地。即该报文段包括一个对已被成功接收报文段的确认
1.序号和确认号
TCP把数据看成一个无结构的但是有序的字节流。我们从TCP对序号的使用上可以看出这一点,这是因为序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。一个报文段的序号(sequencde number for a segment)因此是该报文段首字节的字节流编号。
2.Telnet:序号和确认号的一个学习案例
- Telnet由RFC 854定义,它现在是一个用于远程登录的流行应用层协议。
- 许多用户现在愿意采用ssh协议而不是telnet,因为在Telnet链接中发送的数据(包括口令)都是未加密的,这使得Telnet易于受到窃听攻击
- 对客户机到服务器的数据的确认被装载在一个承载服务器到客户机的数据的报文段中,这种确认被称为是捎带(piggybacked)在服务器到客户机的数据报文段中的。
3.5.3 往返时延的估计与超时
1.估计往返时延
- 报文段的样本RTT(表示为SampleRTT)就行从某报文段被发出(即交给IP)到对该报文段的确认被收到之间的时间量。
- 加权平均对最新样本赋予的权值要大于对老样本赋予的权值。因为越新的样本越能更好地反应出网络的当前拥塞情况。从统计学观点来讲,这种平均被称为指数加权移动平均
(Exponential Weighted Moving Average EWMA)
2.设置和管理重传超时间隔
TimeoutInterval=EstimatedRTT+4 . DevRTT
3.5.4可靠数据传输
- TCP在IP的不可靠的尽力而为服务的基础上建立了一种可靠数据传输服务(reliable datatransfer service)。TCP的可靠数据传输服务确保一个进程从其接收缓存中读出非损坏的、无间隔的、非冗余的和按序的数据流,即该字节流与连接的另一方端系统发送出的字节流完全一样
加倍超时间隔
- 每当超时事件发生时,TCP重传都会将下一次的超时间隔设为先前值的两倍,因此,超时间隔在每次重传后会呈指数型增长。
快速重传
- 一个报文段丢失,就很可能引起许多一个接一个的冗余ACK。如果TCP发送方接收到对相同数据的3个冗余ACK,他就认为跟在这个已被确认过3次的报文段之后的报文段已经丢失。一旦收到3个冗余ACK,TCP就执行快速重传
3.5.5 流量控制
- TCP为应用程序提供了流量控制服务以消除发送方使接收方缓存溢出的可能性
- TCP发送方也可能因为IP网络的拥塞而被遏制,这种形式的发送方的控制被称为拥塞控制
- TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制。非正式的讲,接收窗口用于告诉发送方,该接收方还有多少可用的缓存空间。
3.5.6TCP连接管理
- 三次握手