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

Linux C/C++面试之《网络编程系列》(3) tcp三次握手若干问题求职学习资料

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

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

tcp建立连接时的三次握手几乎是校招面试在考察网络编程知识时,必问的一个问题。必须清楚的知道tcp三次握手的流程,面试官可能会拿出一张白纸,让你简单画出该流程,然后展开追问。

    • tcp建立连接三次握手流程
    • 为何是三次握手而非两次?

tcp建立连接三次握手流程

tcp三次握手的流程如下(客户端主动发起连接):

Linux C/C++面试之《网络编程系列》(3) tcp三次握手若干问题

建立过程为:
(1)B首先建立传输控制块TCB,进入LISTEN(收听)状态,等待用户的连接请求。如有,则建立连接。(这个过程在套接字编程中为服务器端调用socket函数、bind函数和listen函数的过程)

备注:一个TCB数据块包含了数据发送双方对应的socket信息以及用于装载数据的缓冲区。在两个设备要建立连接发送数据之前,双方都必须要做一些准备工作,分配内存建立起TCB数据块就是连接建立前必须要做的准备工作。

(2)A建立传输控制块TCB,然后向B发送连接请求报文段,报文段中首部的同步位SYN=1,同时选择一个序列号seq=x(实际测试是0),TCP规定SYN报文段不携带数据,但要消耗一个序列号。然后A进入SYN-SENT(同步已发送)状态。(这个过程在套接字编程中为客户端调用socket函数和connect函数的过程)

(3)B收到请求后,如同意建立连接,就向A发送确认报文段。此时SYN=1、ACK=1,确认号ack=x+1,同时选择一个序列号seq=y,这个报文也不携带数据,但要消耗一个序列号。然后B进入SYN-RCVD状态(同步收到)。

(4)A收到B的确认后,还要向B发送确认。确认报文段的ACK=1,确认号ack=y+1,seq=x+1。TCP规定,ACK报文段可以携带数据,而如果不携带数据则不消耗序列号,此时下一个报文段的序列号仍为seq=x+1。这时,连接就建立成功了,A进入ESTABLISHED状态(已建立连接状态)。

(5)当B收到A的确认后,也进入ESTABLISHED状态,此时就可以进行数据传输了。

当然,在进行三次握手时不是仅进行连接,可能还会进行一些后续操作所需要的信息交流。

为何是三次握手而非两次?

三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

tcp建立连接时的三次握手几乎是校招面试在考察网络编程知识时,必问的一个问题。必须清楚的知道tcp三次握手的流程,面试官可能会拿出一张白纸,让你简单画出该流程,然后展开追问。

    • tcp建立连接三次握手流程
    • 为何是三次握手而非两次?

tcp建立连接三次握手流程

tcp三次握手的流程如下(客户端主动发起连接):

Linux C/C++面试之《网络编程系列》(3) tcp三次握手若干问题

建立过程为:
(1)B首先建立传输控制块TCB,进入LISTEN(收听)状态,等待用户的连接请求。如有,则建立连接。(这个过程在套接字编程中为服务器端调用socket函数、bind函数和listen函数的过程)

备注:一个TCB数据块包含了数据发送双方对应的socket信息以及用于装载数据的缓冲区。在两个设备要建立连接发送数据之前,双方都必须要做一些准备工作,分配内存建立起TCB数据块就是连接建立前必须要做的准备工作。

(2)A建立传输控制块TCB,然后向B发送连接请求报文段,报文段中首部的同步位SYN=1,同时选择一个序列号seq=x(实际测试是0),TCP规定SYN报文段不携带数据,但要消耗一个序列号。然后A进入SYN-SENT(同步已发送)状态。(这个过程在套接字编程中为客户端调用socket函数和connect函数的过程)

(3)B收到请求后,如同意建立连接,就向A发送确认报文段。此时SYN=1、ACK=1,确认号ack=x+1,同时选择一个序列号seq=y,这个报文也不携带数据,但要消耗一个序列号。然后B进入SYN-RCVD状态(同步收到)。

(4)A收到B的确认后,还要向B发送确认。确认报文段的ACK=1,确认号ack=y+1,seq=x+1。TCP规定,ACK报文段可以携带数据,而如果不携带数据则不消耗序列号,此时下一个报文段的序列号仍为seq=x+1。这时,连接就建立成功了,A进入ESTABLISHED状态(已建立连接状态)。

(5)当B收到A的确认后,也进入ESTABLISHED状态,此时就可以进行数据传输了。

当然,在进行三次握手时不是仅进行连接,可能还会进行一些后续操作所需要的信息交流。

为何是三次握手而非两次?

三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

tcp建立连接时的三次握手几乎是校招面试在考察网络编程知识时,必问的一个问题。必须清楚的知道tcp三次握手的流程,面试官可能会拿出一张白纸,让你简单画出该流程,然后展开追问。

    • tcp建立连接三次握手流程
    • 为何是三次握手而非两次?

tcp建立连接三次握手流程

tcp三次握手的流程如下(客户端主动发起连接):

Linux C/C++面试之《网络编程系列》(3) tcp三次握手若干问题

建立过程为:
(1)B首先建立传输控制块TCB,进入LISTEN(收听)状态,等待用户的连接请求。如有,则建立连接。(这个过程在套接字编程中为服务器端调用socket函数、bind函数和listen函数的过程)

备注:一个TCB数据块包含了数据发送双方对应的socket信息以及用于装载数据的缓冲区。在两个设备要建立连接发送数据之前,双方都必须要做一些准备工作,分配内存建立起TCB数据块就是连接建立前必须要做的准备工作。

(2)A建立传输控制块TCB,然后向B发送连接请求报文段,报文段中首部的同步位SYN=1,同时选择一个序列号seq=x(实际测试是0),TCP规定SYN报文段不携带数据,但要消耗一个序列号。然后A进入SYN-SENT(同步已发送)状态。(这个过程在套接字编程中为客户端调用socket函数和connect函数的过程)

(3)B收到请求后,如同意建立连接,就向A发送确认报文段。此时SYN=1、ACK=1,确认号ack=x+1,同时选择一个序列号seq=y,这个报文也不携带数据,但要消耗一个序列号。然后B进入SYN-RCVD状态(同步收到)。

(4)A收到B的确认后,还要向B发送确认。确认报文段的ACK=1,确认号ack=y+1,seq=x+1。TCP规定,ACK报文段可以携带数据,而如果不携带数据则不消耗序列号,此时下一个报文段的序列号仍为seq=x+1。这时,连接就建立成功了,A进入ESTABLISHED状态(已建立连接状态)。

(5)当B收到A的确认后,也进入ESTABLISHED状态,此时就可以进行数据传输了。

当然,在进行三次握手时不是仅进行连接,可能还会进行一些后续操作所需要的信息交流。

为何是三次握手而非两次?

三次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

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

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

评论 抢沙发

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

b2b链

联系我们联系我们