TCP数据的传输过程分析
发布时间:2023-05-24 13:28:48 所属栏目:语言 来源:
导读:建立连接后,两台主机就可以相互传输数据了。
TCP 套接字的数据交换过程
首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设
TCP 套接字的数据交换过程
首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设
|
建立连接后,两台主机就可以相互传输数据了。 TCP 套接字的数据交换过程 首先,主机A通过1个数据包发送100个字节的数据,数据包的 Seq 号设置为 1200。主机B为了确认这一点,向主机A发送 ACK 包,并将 Ack 号设置为 1301。 为了保证数据准确到达,目标机器在收到数据包(包括SYN包、FIN包、普通数据包等)后必须立即回传ACK包,这样发送方才能确认数据传输成功。 此时 Ack 号为 1301 而不是 1201,原因在于 Ack 号的增量为传输的数据字节数。假设每次 Ack 号不加传输的字节数,这样虽然可以确认数据包的传输,但无法明确100字节全部正确传递还是丢失了一部分,比如只传递了80字节。因此按如下的公式确认 Ack 号: Ack号 = Seq号 + 传递的字节数 + 1 与三次握手协议相同,最后加 1 是为了告诉对方要传递的 Seq 号。 经过一段时间后,主机A仍未收到对于 Seq 1301 的ACK确认,因此尝试重传数据。 为了完成数据包的重传,TCP套接子每次发送数据包时都会启动定时器,如果在一定时间内没有收到目标机器传回的 ACK 包,那么定时器超时,数据包会重传。 重传超时时间(RTO, Retransmission Time Out) 这个值太大会导致不必要的等待,太小会导致不必要的重传,理论上最好是网络 RTT 时间,但又受制于网络距离与瞬态时延变化,所以实际上使用自适应的动态算法(例如 Jacobson 算法和 Karn 算法等)来确定超时时间。 往返时间(RTT,Round-Trip Time)表示从发送端发送数据开始,到发送端收到来自接收端的 ACK 确认包(接收端收到数据后便立即确认),总共经历的时间。 重传次数 TCP数据包重传次数根据系统设置的不同而有所区别。有些系统,一个数据包只会被重传3次,如果重传3次后还未收到该数据包的 ACK 确认,就不会再尝试重传。但有些要求很高的业务系统,会不断地重传丢失的数据,以尽最大可能保证业务数据的正常交互。 最后需要说明的是,发送端只有在收到对方的 ACK 确认后,才会清空输出缓冲区中的数据。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
