计算机网络TCP协议

Posted 青春无敌美少

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络TCP协议相关的知识,希望对你有一定的参考价值。

目录

TCP协议

TCP协议是什么

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。TCP应用层次是传输层。

TCP协议的特点

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分区成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传输单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
TCP的职责是进程到进程之间的通信。TCP保证了可靠性。
TCP的可靠性:
(1)TCP尽它最大可能,将数据发送给对方
(2)即使数据没有发送给对方,TCP会给上层(进程)一个交代
(3)保证接收方接收到的数据都是有序的
(4)TCP可以保证不会接收到错误的数据
(5)根据接收能力和网络承载情况做了发送量控制

TCP协议实现机制

TCP如何实现进程到进程

数据通过互联网传输的时候不是单纯的数据,不加任何标识,如果这样数据实现不了指定进程到进程的通信。所以数据在发送的时候,需要加上特定标识,加上特定标识的过程叫做数据的封装,在数据使用的时候再去掉特定标识,去掉特定标识的过程就叫做分用。TCP的4位首部长度就是做解包用的。

TCP如何实现可靠性

TCP中有确认应答机制。确认应答机制是收到一条报文后,向发送端发送一条确认ACK,此ACK的作用就是告诉发送端:接收端已经成功的收到了消息,并且希望收到下一条报文的序列号是什么。确认序号(Acknowledgment Number)标识了报文接收端期望接收的字节序列。

校验和:
长度为16位,共2个字节。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,接收端用于对收到的数据包进行验证。

超时重传

在数据发送过程中,我们不应该有上帝视角。在进程到进程通信中。发送端发送数据后,过了很久都没有收到应答,可能有什么原因?

(1)对方完全没有收到数据
a.数据丢了
b.因为时间原因,数据还没有到达对方(因为时间过了很久,所以此项原因我们不考虑)
(2)对方已收到数据,只是应答我们没有收到
a.应答丢了
b.应答因为时间原因,我们还没有收到(因为时间过了很久,所以此项原因我们不考虑)

发生以上这种情况时,我们有一个超时重传机制。
TCP的重传存在原因就是为了保障TCP的可靠性,正是由于TCP存在重传的机制,那些基于TCP的业务应用在网络交互的过程中,不再担心由于丢包、包损坏等导致的一系列应用问题了。
在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。一个报文段可以好几次的超时,也就是说,第一次发此报文段时超时了,发送端会重新发送,第二次发的时候还是超时了,此时发送端还是会重新发送,但是发送端对一个超时的报文段不会一直发,发几次之后,就会丢弃此报文段。

计时器设置的时间在好几次的发送中,为什么要变得越来越长呢?

因为在发送数据的时候,数据传输可能还没建立好,此时就重传,可能会浪费资源。

延时应答

数据传输的时候,发送端给接收端发送数据,接收端给发送端发去确认应答信息,这样比较耗时,效率低下,延迟应答就是接收端收到数据之后,稍微等一会再应答,这样可以提高数据的传输效率,因为发送端发好几次数据,接收端只需要一次来确认应答,这样可以降低网络拥塞的概率
数量限制:每隔N个包就必须应答一次
时间限制:超过最大延迟时间就必须应答一次

所有的包都可以延迟应答吗?
不是。


以上是关于计算机网络TCP协议的主要内容,如果未能解决你的问题,请参考以下文章

网络协议|TCP/IP协议相关

如何解决TCP拆包粘包问题

TCP(传输控制协议)

当UDP协议客户端给TCP协议服务器发数据会发生什么

[网络知识]TCP协议中的粘包与拆包

哪些常见的网络情况会造成tcp同步包与tcp同步确认包异常