传输控制协议(TCP)

简介:
       传输控制协议(TCP)是一种面向链接的、可靠的、基于字节流的传输层通讯协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另外一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不一样主机的应用层之间常常须要可靠的、像管道同样的链接,可是IP层不提供这样的流机制,而是提供不可靠的包交换。
       应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,而后TCP把数据流分区成适当长度的报文段(一般受该计算机链接的网络的数据链路层的最大传输单元(MTU)的限制)。以后TCP把结果包传给IP层,由它来经过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每一个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。而后接收端实体对已成功收到的包发回一个相应的确认(ACK);若是发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
 
功能:
    当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)一般受该计算机链接的网络的数据链路层的最大传送单元(MTU)限制。以后TCP把数据包传给IP层,由它来经过网络将包传送给接收端实体的TCP层。
TCP为了保证报文传输的可靠,就给每一个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。而后接收端实体对已成功收到的字节发回一个相应的确认(ACK);若是发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。
  • 在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可使用md5认证对数据进行加密。
  • 在保证可靠性上,采用超时重传和捎带确认机制。
  • 在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组须要重传。
  • 在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法)。该算法主要包括三个主要部分:1)加性增、乘性减;2)慢启动;3)对超时事件作出反应。

实行标准:算法

       TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WAN)设计的。它是由ARPANET网的研究机构发展起来的。
TCP/IP的标准在一系列称为RFC的文档中公布。文档由技术专家、特别工做组、或RFC编辑修订。公布一个文档时,该文档被赋予一个RFC编号,如RFC959(FTP的说明文档)、RFC793(TCP的说明文档)、RFC791(IP的说明文档)等。最初的RFC一直保留而历来不会被更新,若是修改了该文档,则该文档又以一个新号码公布。所以,重要的是要确认你拥有了关于某个专题的最新RFC文档。一般在RFC的开头部分,有相关RFC的更新(update)、排错(errata)、做废(obsolete)信息,提示读者信息的时效性。
 
链接创建:
        TCP是因特网中的传输层协议,使用三次握手协议创建链接。当主动方发出SYN链接请求后,等待对方回答
TCP的三次握手TCP的三次握手
SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种创建链接的方法能够防止产生错误的链接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
        TCP三次握手的过程以下:
  1. 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
  2. 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
  3. 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
  4. 三次握手完成,TCP客户端和服务器端成功地创建链接,能够开始传输数据了。
 
 
可靠性:
    TCP提供一种面向链接的、可靠的字节流服务。面向链接意味着两个使用TCP的应用(一般是一个客户和一个服务器)在彼此交换数据包以前必须先创建一个TCP链接。这一过程与打电话很类似,先拨号振铃,等待对方摘机说“喂”,而后才说明是谁。在一个TCP链接中,仅有两方进行彼此通讯。广播和多播不能用于TCP。
TCP经过下列方式来提供可靠性:
      1.应用数据被分割成TCP认为最适合发送的数据块。这和UDP彻底不一样,应用程序产生的数据长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)。
      2.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。若是不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP链接另外一端的数据,它将发送一个确认。TCP有延迟确认的功能,在此功能没有打开,则是当即确认。功能打开,则由定时器触发确认时间点。
      3.TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程当中的任何变化。若是收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(但愿发端超时并重发)。
      4.既然TCP报文段做为IP数据报来传输,而IP数据报的到达可能会失序,所以TCP报文段的到达也可能会失序。若是必要,TCP将对收到的数据进行从新排序,将收到的数据以正确的顺序交给应用层。
      5.既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
      6.TCP还能提供流量控制。TCP链接的每一方都有固定大小的缓冲空间。TCP的接收端只容许另外一端发送接收端缓冲区所能接纳的数据。这将防止较快主机导致较慢主机的缓冲区溢出。
两个应用程序经过TCP链接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。咱们将这称为字节流服务(bytestreamservice)。若是一方的应用程序先传10字节,又传20字节,再传50字节,链接的另外一方将没法了解发方每次发送了多少字节。只要本身的接收缓存没有塞满,TCP 接收方将有多少就收多少。一端将字节流放到TCP链接上,一样的字节流将出如今TCP链接的另外一端。
 
窗口确认:
TCP的一项功能就是确保每一个数据段都能到达目的地。位于目的主机的TCP服务对接受到的数据进行确认,并向源应用程序发送确认信息。
TCP的状态机TCP的状态机
使用数据报头序列号以及确认号来确认已收到包含在数据段的相关的数据字节。
TCP在发回源设备的数据段中使用确认号,指示接收设备期待接收的下一字节。这个过程称为期待确认。
源主机在收到确认消息以前能够传输的数据的大小称为窗口大小。用于管理丢失数据和流量控制。这些变化如右图所示。
相关文章
相关标签/搜索