区块链技术博客
www.b2bchain.cn

Linux C/C++面试之《网络编程系列》(4) tcp四次断开若干问题求职学习资料

本文介绍了Linux C/C++面试之《网络编程系列》(4) tcp四次断开若干问题求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

    • tcp断开连接四次挥手过程

tcp断开连接四次挥手过程

在连接释放时,连接的两方都要同意才能够释放成功。连接的双方都可以提出释放连接,这里假设A先提出释放连接,首先双方都处于ESTABLISHED状态。
Linux C/C++面试之《网络编程系列》(4) tcp四次断开若干问题

(1)当A的数据传送完后,就可以向其TCP发起连接释放了,此后停止再发送数据,主动关闭TCP连接。首先A向B发送一个FIN报文段,报文段首部FIN=1,序列号seq=u(u为最后传送的数据的序列号加1,因为tcp规定,fin包消耗一个序列号,虽然没有发送数据),然后A进入FIN-WAIT-1(终止等待1)状态。FIN报文段不能携带数据,但要消耗一个序列号。

(2)B收到释放连接的报文段后即发出确认报文段,报文首部ACK=1,ack=u+1,seq=v(v等于B前面传送过的数据的序列号加1),然后B进入CLOSE-WAIT(关闭等待)状态。这时从A到B这个方向的连接就释放了,TCP连接就处于半关闭状态。(注意:此后A不能主动向B发送数据,但是A可以给B发送确认报文段,也就是说A仍要接收来自B的报文,因为从B到A这个方向的连接还没有关闭)。

(3)当A收到B的确认报文后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

(4)当B的数据发送完毕后,其应用进程就通知TCP释放连接。B向A发送FIN报文,报文段首部FIN=1,ack=u+1(重复发送上一次已经发送过的确认号),seq=w(w为B最后发送报文段的序列号加1)。然后B进入LAST-ACK(最后确认)状态,等待A的确认。

(5)A在接收到B的连接释放报文后,必须进行确认。A向B发送的确认报文段中报文首部ACK=1,ack=w+1,seq=u+1。然后A进入TIME-WAIT(时间等待)状态(如果无差错,此状态时间为2MSL),注意,此时TCP连接还没有释放掉,必须经过TIME-WAIT设置的时间2MSL后,A撤销相应的传输控制块TCB,才进入CLOSED状态,结束了此次TCP连接。MSL叫做最长报文段寿命,RFC793建议设为2分钟,但在现在实际网络情况中,常用值有三种:30秒,1分钟,2分钟。必须要在A进入CLOSED状态后才能开始建立下一个新的连接。

(6)B收到A的确认报文后,也进入CLOSED状态,撤销相应的传输控制块TCB,此时,TCP连接全部断开。

这样TCP四次挥手完成。

    • tcp断开连接四次挥手过程

tcp断开连接四次挥手过程

在连接释放时,连接的两方都要同意才能够释放成功。连接的双方都可以提出释放连接,这里假设A先提出释放连接,首先双方都处于ESTABLISHED状态。
Linux C/C++面试之《网络编程系列》(4) tcp四次断开若干问题

(1)当A的数据传送完后,就可以向其TCP发起连接释放了,此后停止再发送数据,主动关闭TCP连接。首先A向B发送一个FIN报文段,报文段首部FIN=1,序列号seq=u(u为最后传送的数据的序列号加1,因为tcp规定,fin包消耗一个序列号,虽然没有发送数据),然后A进入FIN-WAIT-1(终止等待1)状态。FIN报文段不能携带数据,但要消耗一个序列号。

(2)B收到释放连接的报文段后即发出确认报文段,报文首部ACK=1,ack=u+1,seq=v(v等于B前面传送过的数据的序列号加1),然后B进入CLOSE-WAIT(关闭等待)状态。这时从A到B这个方向的连接就释放了,TCP连接就处于半关闭状态。(注意:此后A不能主动向B发送数据,但是A可以给B发送确认报文段,也就是说A仍要接收来自B的报文,因为从B到A这个方向的连接还没有关闭)。

(3)当A收到B的确认报文后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

(4)当B的数据发送完毕后,其应用进程就通知TCP释放连接。B向A发送FIN报文,报文段首部FIN=1,ack=u+1(重复发送上一次已经发送过的确认号),seq=w(w为B最后发送报文段的序列号加1)。然后B进入LAST-ACK(最后确认)状态,等待A的确认。

(5)A在接收到B的连接释放报文后,必须进行确认。A向B发送的确认报文段中报文首部ACK=1,ack=w+1,seq=u+1。然后A进入TIME-WAIT(时间等待)状态(如果无差错,此状态时间为2MSL),注意,此时TCP连接还没有释放掉,必须经过TIME-WAIT设置的时间2MSL后,A撤销相应的传输控制块TCB,才进入CLOSED状态,结束了此次TCP连接。MSL叫做最长报文段寿命,RFC793建议设为2分钟,但在现在实际网络情况中,常用值有三种:30秒,1分钟,2分钟。必须要在A进入CLOSED状态后才能开始建立下一个新的连接。

(6)B收到A的确认报文后,也进入CLOSED状态,撤销相应的传输控制块TCB,此时,TCP连接全部断开。

这样TCP四次挥手完成。

    • tcp断开连接四次挥手过程

tcp断开连接四次挥手过程

在连接释放时,连接的两方都要同意才能够释放成功。连接的双方都可以提出释放连接,这里假设A先提出释放连接,首先双方都处于ESTABLISHED状态。
Linux C/C++面试之《网络编程系列》(4) tcp四次断开若干问题

(1)当A的数据传送完后,就可以向其TCP发起连接释放了,此后停止再发送数据,主动关闭TCP连接。首先A向B发送一个FIN报文段,报文段首部FIN=1,序列号seq=u(u为最后传送的数据的序列号加1,因为tcp规定,fin包消耗一个序列号,虽然没有发送数据),然后A进入FIN-WAIT-1(终止等待1)状态。FIN报文段不能携带数据,但要消耗一个序列号。

(2)B收到释放连接的报文段后即发出确认报文段,报文首部ACK=1,ack=u+1,seq=v(v等于B前面传送过的数据的序列号加1),然后B进入CLOSE-WAIT(关闭等待)状态。这时从A到B这个方向的连接就释放了,TCP连接就处于半关闭状态。(注意:此后A不能主动向B发送数据,但是A可以给B发送确认报文段,也就是说A仍要接收来自B的报文,因为从B到A这个方向的连接还没有关闭)。

(3)当A收到B的确认报文后,就进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。

(4)当B的数据发送完毕后,其应用进程就通知TCP释放连接。B向A发送FIN报文,报文段首部FIN=1,ack=u+1(重复发送上一次已经发送过的确认号),seq=w(w为B最后发送报文段的序列号加1)。然后B进入LAST-ACK(最后确认)状态,等待A的确认。

(5)A在接收到B的连接释放报文后,必须进行确认。A向B发送的确认报文段中报文首部ACK=1,ack=w+1,seq=u+1。然后A进入TIME-WAIT(时间等待)状态(如果无差错,此状态时间为2MSL),注意,此时TCP连接还没有释放掉,必须经过TIME-WAIT设置的时间2MSL后,A撤销相应的传输控制块TCB,才进入CLOSED状态,结束了此次TCP连接。MSL叫做最长报文段寿命,RFC793建议设为2分钟,但在现在实际网络情况中,常用值有三种:30秒,1分钟,2分钟。必须要在A进入CLOSED状态后才能开始建立下一个新的连接。

(6)B收到A的确认报文后,也进入CLOSED状态,撤销相应的传输控制块TCB,此时,TCP连接全部断开。

这样TCP四次挥手完成。

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Linux C/C++面试之《网络编程系列》(4) tcp四次断开若干问题求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们