传输控制协议--摘录

来源:互联网 发布:手机淘宝2015旧版本5.4 编辑:程序博客网 时间:2024/05/17 03:50

TCP简介

  • 传输层控制协议(英文:Transmission Control Protocol,简称TCP),是一种面向连接,可靠性,基于字节流的传输层协议。用户数据包协议(User Datagram Protocol)是另一种重要的传输层控制协议。
  • 在互联网协议族中,TCP层位于应用层之下,IP层之上。不同的主机之间使用应用层进行数据交互,需要一种可靠的,想管道一样的传输方式。这一点IP层无法实现,只能提供不可靠的数据包交流。
  • 在传输过程中,应用层将数据流传递给TCP层,TCP将数据流分为一个个的数据包,包的大小取决于数据链路层的最大传输单元(MTU)。
  • TCP为了确保不丢包,为每一个数据包都制定一个序号,同时这个序号也保证了接收端可以按序接受数据。
  • 在接收端方,每接收到一个数据包时,都会返回一个确认值(ACK,确认的值为所接受包的大小)给发送端。如果发送方在一个合理的往返时延(RTT)中没有接收到一个确认的包时,就会将设这个包丢失,然后进行重发。
  • TCP使用一个校验和函数来校验数据包中的数据是否有错误;在发送和接收时都就将进行校验和的计算。

TCP运行方式

  • tcp连接包括三个状态:连接创建,数据传输,连接终止。操作系统将TCP连接抽象为套接字给程序使用,并且要经历一系列的转换过程。
  • TCP使用3路握手的方式来创建一个连接,在连接的过程中有许多参数要进行初始化。例如:序号要被初始化,以保证按序传输和连接的强壮性(对于TCP/IP协议栈来说,其健壮性就是指在遇到异常情况,如各种恶意攻击、不合理报文、随机碎片报文、高速流量或其它人为失误和偶然事故时协议栈能够正常运行的能力。)
  • 创建时,由一方创建一个socket并监听另一方的连接,称为被动打开(Passive Open),服务器端被动打开后,客户端主动创建一个socket向服务器发送一个连接请求。
  • 数据传输:在TCP数据传输的过程中有许多重要的机制来保证TCP的可靠性和强壮性。包括:
    • 使用序号:对接收到的TCP数据包进行排序以及检查重复的数据包
    • 使用校验和函数和定时器来检测数据包中数据的错误和时延丢包的情况。
  • 在TCP的连接创建状态中,两个主机要交换初始化序号(ISN:Initiale Sequence Number)。这些序号用于标示字节流的数据,并且还是对应用层的字节流进行计数的整数。通常在TCP数据包中有一对序列号和确认号(确认号的作用:我猜是为了让接受方在接受到数据包后,修改这个确认号,再返回给发送方。
  • TCP数据包的接收者为了确报可靠性,在接收一定量的连续字节流后才会发送确认包。这是对TCP的一种扩展,称为选择性确认(Select Acknowledgement)。选择性确认可以使接受者按照正确的顺序将数据包交给应用层。序号是32位的无符号整形,在增大到(2^32)-1时,便会绕到0。对ISN的选择是TCP中关键的一步,它可以确保安全性和强壮性。

一个数据传输的实例

  1. 发送方发送一个数据包,包含一个指定的序列号(1*可以修改)和数据包的大小(1460 不知道为什么是这个数*)。接受方回复一个没有数据的TCP数据包,确认号1461。表示数据接受完毕,请求下一条数据。
  2. 接着发送方再次发送一个数据包,序列号:1461,大小:1460,则接受方回复的确认值为2921(1460+1461)
  3. 如果这些数据包是相连的情况下,接受方可以不回应每一条数据。例如:发送方发送了5条数据,接受方完整的接收5条数据,此时接收方只需回复第5条数据的相应即可。
  4. 如果这5条数据中的第3条数据,在发送的过程中出现丢包或包内容错误时,接收方只会回复第2条数据,因为它只完整的接收两条数据。而发送方这边,在第3条数据发送完毕后,经过一个往返时延(RTT)的时间,没有收到第三条数据的回复,则接受方就认为数据包丢失,重新发送。而接收方在成功接受第三条数据包后,只需回应第5条数据包即可。因为1,2,3,4,5数据包都是相连的,所以只需回复第5条即可。

摘录于:传输控制协议

1 0
原创粉丝点击