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 确认后,才会清空输出缓冲区中的数据。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |