首页 > 编程知识 正文

描述TCP协议中数据传输过程,TCP协议的特点和工作过程

时间:2023-05-03 20:37:49 阅读:120115 作者:735

文章清单1、TCP协议简介TCP头部格式2、TCP三次握手、四次握手1.3次握手2.4次握手3 .为什么四次握手不是三次? 三、TCP协议机制1 .确认机制2 .超时重传机制3 .连接管理机制4 .滑动窗口机制5 .流控制机制6 .拥塞控制机制7 .延迟响应机制9.Nagle 2.TCP和UDP有什么区别? 3 .粘合包的问题? 1 .发生原因2 .解决方法

另一方面,连接了TCP协议概要TCP协议,是面向字节流的传输层协议。 主要实现端到端数据传输,保证可靠性和准确信息

TCP标头格式这里数据偏移也可以定义为TCP首部的长度,控制位包括8位控制标识 如图

ACK :为1时,表示确认响应的字段有效SYN :为1时,表示想建立连接,且序列号FIN :为1时,表示想断开连接的2、TCP的3次握手、4次挥手1.3次

客户端将TCP标头控制位的SYN设置为1,并发送序列号seq=x。 此时,客户端进入SYN_SEND服务器端接收后,将控制位SYN和ACK都设定为1,发送确认编号ack=x 1、序列号seq=y。 此时,服务端进入SYN_RECV客户端接收后,将控制位SYN设置为1,将控制位SYN设置为1

粘包问题2.4挥手

客户端向服务器端发送控制位FIN为1的消息段,并设置序列号seq=x。 此时,客户端进入FIN_WAIT_1。 服务器接收后,将标志位ACK为1的报文段返回客户端,设置ack=x 1,服务器进入CLOSE_WAIT。 客户端收到后进入FIN_WAIT_2。 服务器端向客户端发送FIN为1的报文段,设置seq=y进行发送,服务器端进入LAST_ACK。 客户端向服务器端发送ACK为1的消息段,并设置ack=y 1。 此时,客户端进入TIME_WAIT,服务端接收并进入CLOSED,然后客户端等待2MSL的时间后进入CLOSED。 3 .为什么挥手4次,不是3次吗?因为TCP协议是全双工模式,两端都可以发送和接收数据,第二次挥手服务端接收到FIN,说明客户端已经没有信息再发来,所以需要回复ACK确认,但不代表服务端信息发送结束,所以要等服务端发送完数据才能给客户端发送FIN,而不能同时发送。

三、TCP协议机制1 .确认响应机制

由消息报头的序列号和确认号实现,确认指示成功接收到前面的数据,指示所确保的TCP的可靠性。 发货时:携带序列号

确认回复时:携带回复确认号码

2 .超时重发机制

如果发送方在一定时间内没有收到响应,则在这两种情况下,发送方会认定丢包,并启动重发机制。重发超时时间如何确定?

TCP要求在任何网络环境中提供高性能的通信,使得每次传输分组时计算往返时间及其变化,并且重发超时时间稍微大于两者相加的值。

如果重新发送的数据没有回复,等待时间将呈2倍、4倍的指数级增加。

达到一定的重发次数后,判断为网络或对方主机发生了异常,强制关闭连接。

3 .连接管理机构TCP面向有链路的通信传输,必须在通信之前建立连接,然后断开连接。 也就是说,需要上面的3次握手和4次挥手。

4 .滑动窗口机制TCP协议以段为单位发送分组,每次发送一个段时确认对应,

这种缺点是往返时间过长时,通信性能差。

因此,有窗口的概念,如图所示,窗口的大小为4个段。

窗口大小:不等待确认就可以继续发送数据的最大值,上图中的窗口大小为4段。 窗口尺寸由拥塞窗口流量控制窗口决定,取较小的值。 发送前4个段时,不需要等待ACK,直接发送。 收到第一段的ACK后,可以将窗口向后滑动,然后发送第五段。 操作系统内核必须打开发送缓冲区才能记录当前未响应的数据,以保持此幻灯片窗口。 必须确定响应的数据,才能从缓冲区中删除。 同样有接收缓冲区,记录接收到的数据序列号,防止对方接收ACK。 窗口越大,网络的吞吐率可能出现断丢失的情况和处理方法

如果之前的所有响应确认都丢失,则可以从随后的响应中进行确认。 这种情况下不重新发送。

如果接收方没有接收到第n个段,则随后连续三次重复相同的确认,直到发送方发送正确的段,但由于下一个2001-7000序列号存储在接收缓冲区中,因此将接收到1001-2000段

5 .在流控制机制的实际通信期间,如果发送方发送一个分组,而接收方处理其他事情需要时间,或者由于高负载导致接收缓冲器充满,则可能丢弃应该接收的分组。 诱发重发,也就是说发送方没有考虑接收方的接收能力,这显然是不行的。 所以有

了流量控制。
流量控制窗口:作用是发送段根据接收端的指示,对发送的数据量进行控制。基于TCP报文首部中窗口大小字段来设置。
图中的滑动窗口只有流量控制窗口影响,但实际还受到阻塞程度影响。

6.拥塞控制机制

当对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫做堵塞。堵塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或者链路不至过载。
TCP进行拥堵控制的算法有四种:慢开始,拥塞避免,快重传,快恢复

慢开始:当主机开始发送数据时,由于并不清楚网络的符合情况,所以较好的方法是先探测一下,由小到大逐渐增大发送窗口,既逐渐增大拥塞窗口数值,大致如图,每经过一个传输轮次,拥塞窗口cwnd就加倍
拥塞避免:让拥塞窗口cwnd缓慢的增大,每一个往返加1,这样线性增长。快重传:要去要接收方不要等待自己发送数据时才捎带确认,而是要立即发送确认,就算收到了失序的报文段也要立即对已经收到的报文段进行反复确认,也就是上面的滑动窗口中应用到的。这样做的效果就是不会让发送方认为丢包是因为网络阻塞。快恢复:当如图发送方直到现在只是丢失了个别报文段,于是执行快恢复算法,也就是适当把拥堵窗口扩大些,这么做的理由是,发送方收到了连续三个重复的确认,说明发出去的至少三个报文段在接收方的接收缓存区中,所以应该适当将窗口扩大一点。
7.延迟应答机制

接收端接收到数据,立刻相应ack,流量控制窗口的大小可能会比较小,如果稍微等一会,让接收端程序接收缓冲区数据再返回ack,可以有效的提高效率。

在没有收到2*最大段长度的数据为止不做确认应答(根据操作系统的不同,有时也会不论数据大小,只要收到两个包就即可返回确认应答的情况。)其他情况下,最大延迟0.5秒发送确认应答, 8.捎带应答机制

接收端回应ack,可以和主动发送的数据一起发送。
目的就是提高网络利用率,从而降低计算机处理负荷。

9.Nagle算法

TCP为了提高网络利用率,会使用Nagle算法。作为一种延迟发送的处理机制。
当发送端发送端要发送的数据很少时,如果这两个条件满足:以发送的数据都已经收到确认应答 可与发送最大段长度(MSS)的数据时,就会暂缓一段时间才进行数据发送。

四、常见问题 1.TCP如何实现可靠性? 校验和序列号确认应答超时重发连接管理流量控制拥塞控制

校验和:用来判断协议首部或者数据是否被破坏。

2.TCP和UDP的区别? TCP是有连接的;UDP没有连接。TCP连接端到端只有两个端点;而UDP支持一对一,一对多,多对多。TCP提供可靠的传输服务,保证数据无差错,不丢失,不重复,按序送达;UDP尽可能的传输,不保证可靠。TCP面向字节流;UDP面向报文,既不合并,也不拆分。TCP提供全双工通信,通信双方都可以发送接收数据。UDP没有阻塞控制。UDP首部的开销小,只有8个字节,TCP有20个字节。 3.黏包问题? 1.出现原因

因为TCP是基于字节流,一次连接中,发送多组数据,前一组的尾部和后一组的头部没有区分开就会造成黏包,是因为TCP协议自己造成的。情况很多:

如果发送方发送多组数据,且数据量很少,TCP为了保证传输效率,会先把连续发送的少量数据合成后一起发送出去,这样接受方收到的数据就出现黏包问题。如果接受方的缓冲区内的数据尚未取走,这时发送方由发来数据。再取的话就会出现黏包问题。 2.解决方法 将数据的长度和数据一起发送。明确每个数据包的边界,用特殊标记来区分数据包的边界。

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。