关闭
_cuclife.com
当前位置:cuclife.com > 电脑技术 > 网络概念 >

TCP - 传输控制协议详解

TCP(Transmission Control Protocol)传输控制协议 

 TCP协议位于第四层。其代表的含义是传输控制协议(Transmission Control protocol)。TCP 在端点间建立连接或虚拟电路进行可靠通信。当一个数据包被封装之后,第三层当然有个Ip协议头,紧接着就是这个TCP协议头。TCP协议头成为了Ip协议头中的“数据”。就像其它协议都有自己的术语一样,TCP协议也有自己的专门术语,如以太网帧、Ip数据报和现在的TCP段等。你可以把它们都当作数据包。但是,当它们之间在进行通讯的时候,一定要使用正确的术语。由于大多数网络应用程序都在同一台机器上运行,计算机上必须能够确保目的地机器上的软件程序能从源地址机器处获得数据包,以及源计算机能收到正确的回复。这是通过使用 TCP 的“端口号”完成的。网络 IP 地址和端口号结合成为唯一的标识 , 我们称之为“套接字”或“端点”。

 

TCP协议是一种端对端的协议。使用TCP没有任何广播或类似的概念。TCP 通过面向连接的、端到端的可靠数据报发送来保证可靠性。TCP 在字节上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个字节。如果在规定时间内,没有收到关于这个包的确认响应,重新发送此包。TCP 的可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测丢失包并请求重发。


要用TCP协议与另一台计算机通信,两台机之间必须像打电话一样连接在一起,每一端都都为通话做好准备。“流传输”(Stream delivery)是谈到TCP时的另一个常用词语。这个短语的含义是TCP协议主要用来处理数据流,可以正确处理乱序的数据包。TCP协议甚至还允许存在丢失的或者损坏的数据包,最终它可以再次得到这些数据包。你很可能听一位程序员在谈论“流”的概念。他指的是这样一个事实:数据到底是在什么时候发送的是很难说清楚的,你也可以在TCP流中发送非结构化数据。TCP协议以它自己的方式缓存数据。不过,其缓存过程对程序员和用户是透明的。 关于流数据传输 ,TCP 交付一个由序列号定义的无结构的字节流。 这个服务对应用程序有利,因为在送出到 TCP 之前应用程序不需要将数据划分成块, TCP 可以将字节整合成字段,然后传给 IP 进行发送。


  TCP协议每发送一个数据包将会收到一个确认信息。这种发送/应答模式是提供可靠的协议的唯一方法:你必须让对方知道你否收到了数据。当然,这也会造成一些性能损失,而人们需要改善系统效率不高的状况。所以引入了“捎带确认(piggybacking ACKs)”的方法。TCP协议之所以是全双工的就是因为这个“捎带确认”信息,因为它允许双方同时发送数据。这是通过在当前的数据包中携带以前收到的数据的确认信息方式实现的。从提高网络利用率的角度看,这比单纯发送一个通知对方“信息已收到”的数据包要好得多。最后,还有一个批量确认的概念:也即一次确认一个以上的数据包,表示“我收到了包括这个数据包在内的全部数据包”。

 

  在Ip协议中,我们处理的单个数据包是一个更大的数据报的一部分。请记住,一个TCP段就是一个单个的TCP数据包。TCP是一个数据流,因此,除了“连接”之外,没有任何需要真正担心的其它概念。最大报文段长度(MSS)是在连接的时候协商的,但是,它总是在不断地改变。默认的最大报文段长度是536字节,这是576字节(Ip协议保证的最小数据包长度)减去用于Ip头的20个字节和用于TCP头的20个字节以后的长度。TCP协议要设法避免在Ip级别上的分段。因此,TCP协议总是从536字节开始的。

 

  TCP协议最有魅力的功能仍然保留着。这就是滑动窗口协议。这个窗口实际上是已经发出的“没有签收确认的”数据总数。这个窗口可以根据意愿放大和缩小。这是很有趣的。下一讲将介绍这方面的内容。

 

一个TCP数据包的头是20个字节,就像一个Ip数据包一样。如果使用一些选项,Ip和TCP数据包头都可以放大。TCP头不包含Ip地址,它仅需要知道要连接哪一个端口。不过,你不要被这弄晕了。TCP工作时要一直跟踪状态表中的端对端的连接。这个状态表包含Ip地址和端口。这就是说,只是TCP头不需要Ip信息,因为它来自于Ip头。

 

把一个数据包设想为一个字节跟着一个字节的数据流是很容易的。很多人都想要一个显示TCP头的表格。但是,这常会把事情搞乱。TCP头从第一位开始依次是下面这些内容:

  •源端口,16位:用于这次连接的本地TCP端口。

  •目的地端口,16位:通讯目标机器的TCP端口。

  •序列号,32位:用来跟踪数据包顺序的号码。

  •确认编号,32位:我们确认的以前收到的序列号。

  •头长度,4位:报头中的32位字(words)的数量。如果不使用选项,这个值设定为5。

  •保留,6位:为将来的使用保留的字节。

  •标记,一共6位:每一个标记一个字节(开或者关)

  -URG:紧急字段指针。

  -ACK:本数据包是(或者包含)一个确认信息。

  -pSH:推送功能(没有使用)。

  -RST:重置,或者中断本次连接。

  -SYN:同步数据包,也就是开始连接。

  -FIN:最后一个数据包,开始挂断序列。

文章来源:cuclife.com 本站编辑:小泥鳅
评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
趣闻*视频
相关文章