TCP连接的小结
- TCP可靠性原理
- 如何保证数据正确性?
- TCP协议
- UDP协议
- TCP和UDP的区别
- TCP中的保活计时器
- ARQ协议的认识
- 连续ARQ和滑动窗口
- 滑动窗口协议的了解
- TCP中的网络拥塞的了解
- 粘包问题
1、TCP可靠性原理:
1.首先通过握手,挥手机制来保证可靠的传输信道。 2.通过超时重传协议,快速重传协议和报文首部的SACK属性来验证数据的正确性。然后通过滑动窗口协议来进行数据处理和流量控制。 3. TCP通过慢开始,拥塞避免,快重传和快恢复来避免网络拥塞。
2、如何保证数据正确性?
其中发送方发送数据时,如果接收方接收超时,发送方就超时自动重传。若接收方正常接收后,如果数据存在丢包,通过快速重传协议发送三次冗余的(重复的)ACK报文,将数据进行重传,在这其中涉及到一个选择重传的问题来提高重传效率,就是报文首部可选性中加入 SACK 属性,通过 left edge 和 right edge 标志那些包到了,然后重传没到的包
3、TCP协议:
TCP是面向连接的,采用P2P的连接模式,TCP提供可靠的交互服务。提供全双工通信,面向字节流。
4、UDP协议:
无连接的传输协议,传输效率比较高,尽最大努力交付,但是不保证交付的可靠性。他的报文首部占用8个字节。TCP(20个字节)
5、TCP和UDP的区别:
1.TCP是可靠的数据传输协议,UDP是不可靠的数据传输协议。 2.TCP的传输速率低于UDP的效率 3.TCP面向连接的,UDP是无连接的 4.TCP的报文首部比UDP的报文首部要长 5.TCP传输数据有序,UDP传输速率无序。
6、TCP中的保活计时器:
场景:如果客户和服务器之间已经通过TCP建立了连接,但是此时客户端突然发生故障单开连接,服务器无法再接收到客户端传来的数据,服务器端不会一直等待客户端发送数据,此时会引入一个保活计时器。 每次服务器收到客户端发送的一次数据后,会重新设置保活计时器,一般是2个小时,如果在这两个小时内,客户端没有个服务器端发送数据,服务器会发送一个探测性报文,若没有回应,就每隔75秒连发10次,如果都没有回应就关闭连接。
7、ARQ协议的认识
1.停止等待协议: 为了实现可靠的传输,数据每发完一组就停止转发,等待接收方确认后再发送下一组。若接收方收到重复分组,则丢弃该分组,并发送确认。其中有差错,无差错,确认丢失和确认迟到等几种情况。
2.超时自动重传ARQ协议 每发送完一组数据后需要设置一个超时计时器,如果在设置时间内发送端没有收到确认响应,则认为分组丢失,进而对分组进行重传。
3.连续的ARQ协议 提高信道利用率,发送方会维护一个发送窗口,在发送窗口内的分组可以连续发送,不需要接收方确认。接收方接收到发送窗口中的分组数据后进行累计,当收最后一组数据后接收方发送确认,表明到这个分组为止之前的所有分组都已接收到。
8、连续ARQ和滑动窗口
当数据分组发送的时候,按照连续的ARQ协议进行发送,即使收到了接收方的确认,表明当前及之前的分组收到后,还是会继续发送分组,将分组的数据发送到接收方的滑动窗口中(缓存区中),当缓存区的容量变为0时,发送方就暂时不能够在发送分组数据。
9、滑动窗口协议的了解:
1.流量控制:对发送的数据进行流量的控制,确保发送方发送太快的数据,接收方也来的及接收。在连续ARQ协议中,每发送的一个数据报都会有一个ACK响应,但是发送方不会等待当前ACK响应了以后再发送下一组数据,而是会连续发送数据,直接收端的滑动窗口为0的时候才会停止。在发送数据的时候也会返回ACK报文,表明接收的当前分组及其之前分组已经正确接受,还会传递一个接收方滑动窗口的剩余容量,根据这个接收方的滑动窗口的大小来控制发送方滑动窗口的大小,随着容量减少,发送方的速度会越来越慢,当剩余容量为0时,发送方暂停发送数据。对于紧急数据报或者一个字节的数据包通知接收方期望的下一次发送窗口大小。
2.传输控制,滑动窗口就是定义接收方的缓冲区的大小,滑动窗口的大小能接收多少字节的数据。当滑动窗口大小为0时,一般不能够再接收分组数据。除非是紧急数据报或者发送 方发一个字节的来通知接收方重新声明滑动窗口以及下一次希望发送方的滑动窗口大小。
每次发送的分组数据都会返回一个ACK响应:
10、TCP中的网络拥塞的了解
1.慢开始 如果在传输信道刚开始连接时,如果有大量字节数据注入到网络容易引起网络拥塞。此时通过控制拥塞窗口(就是一个滑动窗口)大小来对发送数据的速度进行控制。在刚开始进行数据传输的时候,拥塞窗口大小很小,此时窗口大小会进行指数增长,加开传输速度。
2.拥塞避免 当窗口数量达到一个门限值,出触发拥塞避免算法,使发送窗口缓慢增长,每次增长数量加1,从而控制发送数据的速度缓慢增长。如果出现了网络拥塞,把慢开始的门限值设置为当前的一半,把拥塞窗口设置为1,重新执行慢开始。
3.快重传 当接收方接收到失序的数据段时,不会等自己响应ACK的时候捎带这个确认,而是会立即发送重复确认消息,如果发送方一连三次接收到重复确认消息,就会立即重传此未收到的数据,不必等待重传计时器到达时间。
4.快恢复 当出现接收到三次重复确认消息后,它也会把慢开始的门限值设置为当前拥塞窗口的一半,然后执行拥塞避免算法,将拥塞窗口每次加1。
11、粘包问题
什么是粘包? 首先TCP传输的是无结构的字节流,没有边界,在TCP的头部没有表示数据长度字段。所以TCP在传输时,一个数据包中可能有两个甚至多个数据包的内容。这种现象即为粘包。 粘包所带来的问题是多个消息在同一个时刻在一个tcp通道中传输,破坏了消息的完整性,存在多一块数据或者少一块数据的情况。
粘包产生的原因? 1.在发送端发生粘包 在发送端发送数据时,存在发送的数据包过于小时,会触发Nagle算法,将较小的数据包在发送缓冲区将多个小的数据进行合并,所以在数据发送过来时,就已经存在粘包。
2.在接收方出现粘包 当应用层获取缓冲区的数据,当前缓冲区的数据还没有读完,下一次的数据已经传过来,并放在了缓冲区的末尾,就发生了粘包。
如何解决粘包和拆包 1.特殊字符控制 2.在数据报的帧头添加数据包长度。 UDP面向报文的传输,他发送的数据包的最小单位就是一个报文。报文不会被拆分,所以不会出现粘包拆包问题。
|