TCP协议学习总结

1、TCP简介

TCP协议是TCP/IP协议栈中的传输层协议,TCP协议又叫传输控制协议(Transport Control Protocal),是面向连接的,可靠的字节流服务。它的可靠性体现在:三次握手建立连接、活动窗口机制、拥塞控制以及超时重传机制。

2.TCP报文格式

TCP报文格式如下图:

在这里插入图片描述
TCP报文格式说明:
1)源端口号和目的端口号是不可少的,如果没有这两个端口号,就不知道数据应该发给哪个应用;
2)序号:发送的字节序号,如果新建立的连接,则第一个包的序列为0,否则为上一个数据包的确认序号,解决报文传输过程中的乱序问题;
3)确认序号:等于接收到数据包的序号seq+数据包的长度len,同时告诉对端,下一个数据包的开头字节序号;
4)首部长度:tcp包首部的长度;
5)保留位:暂时无用;
6)状态位:SYN是发起一个连接,ACK是回复,RST是重新连接,FIN是结束连接;
7)窗口大写:TCP的流量控制由连接的每一段通过声明的窗口大小来提供;
8)校验和:它是一个端到端的校验和,由发送端计算,由接收端验证。目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改变。如果接收方检测到校验和由差错,则TCP段会被直接丢弃;
9)紧急指针:当状态位URG位1时有效,紧急指针是一个正偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号

3.TCP三次握手建立连接

三次握手状态变化图如下:

在这里插入图片描述
为什么是三次握手:
第一次握手:Client发送SYN给Server,此时CLIENT什么都不能确认;Server确认了对方发送正常;
第二次握手:Server发送ACK给Client,此时Client可确认自己发送、接收正常,对方发送、接收正常;Server确认了自己接收正常,对方发送正常;
第三次握手:Client发送ACK给Server端。Client确认了:自己发送、接收正常,对方发送、接收正常;Server确认了:自己发送、接收正常,对方发送接收正常。
所以三次握手刚好能确认双方收发功能都正常,缺一不可。

4.TCP的四次挥手释放连接

TCP四次挥手释放连接状态时序图
在这里插入图片描述
第一次握手:A准备结束连接时,进入FIN_WAIT_1状态,并发送FIN位告知B端自己准备终止连接;
第二次握手:B端收到A的FIN请求后,B端发送ACK告知A端收到准备结束连接,B进入CLOSE_WAIT状态;
第三次握手:B端发送FIN,ACK状态位告知A端已准备好断开连接;
第四次握手:A端收到B的FIN,ACK请求后,发送ACK给B端告知已收到终止请求,至此四次挥手结束。

5.TCP如何确保传输可靠性

1、三次握手连接:上文已经说过了,通过三次握手连接保证了两端之间可相互发送与接收消息;
2、活动窗口机制:活动窗口的本质是描述接收方的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据报,如果发送方接收到接收方的窗口大小为0的TCP数据报,那么发送方降停止发送数据报直到接收方发送窗口大小不为0的数据报的到来。活
动窗口三种情况:
1)窗口合拢:当窗口从左边向右边靠近的时候,这种现象发生在数据被发送和确认的时候; 2)窗口张开:当窗口的右边沿向右边移动的时候,这种现象发生在接受端处理了数据以后; 3)窗口收缩:当窗口的右边沿向左边移动的时候,这种现象不常发生。
3、超时重传机制超时重传是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。超时重传机制存在问题:如果超时重传时间设置过大将会使发送端经过较长时间的等待才能发现报文段丢失,降低了连接数据传输的吞吐量;若超时重传时间设置过小,发送端尽管可以很快地检测出报文段的丢失,但也可能将一些延迟大的报文段误认为是丢失,造成不必要的重传,浪费了网络资源。
4、拥塞控制
1)慢开始:当主机开始发送数据时,如果立即所大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是 先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理;
2)拥塞避免:是指让拥塞窗口缓慢的增大,即每经过一个往返时间就把发送方的拥塞窗口加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长,使得网络不容易出现拥塞。
3)快重传:快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。比如:接收方收到了M1和M2后都分别发出了确认。现在假定接收方没有收到M3但接着收到了M4。显然,接收方不能确认M4,因为M4是收到的失序报文段。根据 可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M2的确认。但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了 接收方的四个对M2的确认,其中后三个都是重复确认。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期。由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%。
4)快恢复:快恢复是与快重传配合使用的算法。一、当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限减半。这是为了预防网络发生拥塞;二、如果发送方认为网络很可能没有发生拥塞,则开始不执行慢开始算法(即拥塞窗口值不设置为1),而是把拥塞窗口值设置为慢开始门限减半后的数值,然后开始执行拥塞避免算法,使拥塞窗口缓慢地线性增大。

6.最后附上TCP状态机图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值