传输控制协议TCP详解:TCP报文段,连接,可靠传输,流量控制和拥塞控制

一、TCP报文段的首部格式

413d7078b24148808643437ad22e75a9.png

  1. 源端口目的端口各占2字节,分别填源端口号和目的端口号;
  2.  序号报文段序号):占4字节(0~2³²-1),表示本报文段发送的第一个字节的序号(TCP连接中传送的字节流中每一个字节都按顺序编号)。如本报文段序号为21,携带100字节的数据即最后一个字节的序号为120,则下一个报文段的序号为121;
  3. 确认号:占4字节,期望收到的对方下一个报文段的序号。如已确认收到带100字节数据的序号为21的报文段,则在发送的确认报文中,将确认号置为121。
  4. 数据偏移:占4位,TCP报文段的首部长度,以4字节为计算单位。最大15能表示60字节,固定首部长度20字节,所以选项最多40字节。
  5. 保留位暂无定义,为0;
  6. URG紧急:URG=1时,表示紧急指针字段有效:告诉该报文段有紧急信息,发送方的TCP就将紧急数据插入到本报文段数据的最前面,配合紧急指针字段使用;
  7. ACK确认:ACK=1时,确认号字段才有效。TCP规定,在建立连接后传送的所有报文ACK都置1;
  8. PSH推送:发送方希望快速得到响应时将PSH置1,接收方TCP收到PSH置1的报文后,立即交付接收应用进程,而不是等到缓冲区满;
  9. RST复位:置1表示出现严重错误需要立即释放连接并重新建立,还表示拒绝一个非法报文或拒绝打开一个连接;
  10. SYN同步:在建立连接时用来同步序号,置1表示这是一个请求连接或同意连接报文;
  11. FIN终止:用来释放连接,置1表示数据传输完毕,请求释放连接;
  12. 窗口:占2字节,表示自己的接收数据缓存空间还剩的字节数:明确指出现在允许对方发送的数据量;
  13. 校验和:占2字节,包括首部和数据以及伪首部(同UDP,包含源IP,目的IP,类型协议和长度,只是计算时加入,既不向上递也不向下传,接收时数据从所在IP分组中提取)每16位求和取反,校验时同样计算比对;
  14. 紧急指针:占2字节,仅在URG=1时有效,指出紧急数据末尾在报文中的位置,在窗口为0时紧急数据仍可发送;
  15. 选项:长度可变,最长为40字节。如MSS选项(每个TCP报文段中数据字段的最大长度:避免因数据过短利用率低,过长分片重组开销大),窗口扩大选项(窗口字段16位表示的64K字节不足以使用时),时间戳选项(用来计算往返时间TTL和防止序号绕回:区分新报文段和迟到很久的报文段)和选择确认选项等。

二、TCP的连接

1、连接建立:采用客户/服务器模式,主动发起连接的应用程序为客户。

 718e776c19ce4cb2a8a9d2beb7006720.png

  1.  A和B的TCP服务进程首先创建传输控制块TCB(存储每个链接的重要东西:如TCP连接表,发送和接收缓存的指针,指向重传队列的指针,当前的发送和接收队列等);
  2. A向B发送请求连接报文段:SYN置1同时为自己选择一个初始序号seq=x;
  3. B同意连接后发送确认SYN和ACK置1同时为自己选择一个初始序号seq=y,确认号ack=x+1(规定SYN=1的报文不携带数据,但是会消耗一个序号);
  4. A收到B的确认后向B发送确认:ACK确认位置1,序号seq=x+1,确认号ack=y+1(若A没有再次发送确认,即没有第三次握手,则A发送的无效请求(超时到达被重发的请求)再次到达B时B会建立新的连接,但A并没发出请求会造成资源浪费);
  5. 保活计时器:为防止客户主动建立连接后故障,服务器持续等待的情况,服务器每收到一次客户的数据就重设保活计时器。

2、数据传送

  • 数据传送:若A先向B传送数据,序号seq=x+1,确认号ack=y+1(规定确认报文可以携带数据,但是不携带数据时不消耗序号),A和B处于已连接状态ACK始终置1。

3、连接释放:四次挥手

88ec8ef0449841fa9d5abdca9d82f68a.png

  1.  A先向B发送释放连接报文FIN置1,序号seq=u=A发送的前一个报文数据最后一个字节+1,并进入终止等待1状态;
  2. B收到后发送确认,ACK置1,序号seq=v=B发送的前一个报文数据最后一个字节+1,确认号ack=u+1(FIN=1的报文不携带数据,大消耗1个序号),B进入关闭等待状态,此时A向B的连接已单向断开(A不能再向B传数据),A进入终止等待状态2;
  3. B若还有数据则可继续传送,传送完后向A发送释放连接报文FIN置1,序号seq=w=B发送的前一个报文数据最后一个字节+1,确认号ack=u+1(ACK=1的报文可携带数据,不携带数据时不消耗序号),B进入最后等待状态;
  4. A收到连接释放报文后发送确认:ACK置1,seq=u+1,ack=w+1(FIN=1的报文不携带数据但消耗一个序号),A进入时间等待状态等待2MSL最长报文段寿命):为保证最后一个确认报文到达B;之后才真正断开连接并清除连接持续时间内产生的所有报文段:使下一个新连接中不会出现已失效的旧连接。

三、可靠传输之停止等待协议(自动重传请求ARQ):每发送一个分组后等待收到确认再发送下一个分组

TCP往下的网络层提供的是不可靠的数据连接,所以,TCP必须采取适当有效的措施使得两个传输层之间的通信变得可靠:不产生差错,发送方发送数据速度和接收方接收速度匹配。

19b3fc6198a240f488d1e9cce3dc0752.jpg

  • A在每发送完一次分组后应保留分组副本直到收到确认再清除;
  •  超时计时器的重传时间应比数据在分组传输的平均往返时间长一些;
  • 信道利用率不高:大部分时间都在等待确认。
  • 以上称自动重传请求ARQ:重传的请求是自动的,接收方不需要请求发送方重传某个出错的分组。

四、可靠传输之滑动窗口协议:流水线发送,而不需要一个个等待确认

ea6b7f756e1b49edbc548bbf6ac65662.png

1、连续ARQ协议(回退N协议GBN)

  • 假设窗口大小为5:在窗口中的5个分组都可以连续发出去,而不需要一个个等待确认;
  • 接收方累计确认:对按顺序到达的最后一个分组发送确认。如上图d,接收方发送确认序号为3,即对方希望下个报文的序号是3,表示3之前的报文都按顺序到达了;
  • 发送方每收到一个确认就将窗口向前滑动,如上图从c到d滑动到2以后的位置;
  • 出现丢失:如上图d,发送方只收到前3个分组的确认,后两个无法直到,于是对后两个分组都进行重传(即使4号已经正确到达而3还在路上)所以又叫做回退N协议。在通信线路质量不好时,连续ARQ协议会带来负面影响。

2、选择重传协议SR

  •  

五、TCP流量控制

流量控制:让发送方的发送速率不要太快,让接收方来得及接收(两方速度不匹配就会造成数据的丢失)。

利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。

六、TCP拥塞控制

网络资源:在计算机网络中的链路容量(即带宽)、交换结算中的缓存和处理机等;

拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。

拥塞控制:防止过多的数据注入到网络中。

 

 

 

 

  • 14
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值