- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
计算机科学与技术专业面试题(某大型集团公司)题库解析
面试问答题(共20题)
第一题
请描述一下什么是TCP协议的“三次握手”(Three-wayHandshake)?在建立TCP连接的过程中,如果不能收到某个步骤的回应,会有什么后果?为什么说“四次挥手”比“三次握手”更复杂?
答案:
TCP的三次握手:
TCP的三次握手是初始化一个TCP连接的过程,确保通信双方都愿意建立连接并能够发送和接收数据。它包括以下三个步骤:
第一次握手(SYN):客户端(发起方)向服务器(监听方)发送一个SYN(SynchronizeSequenceNumbers)报文段。该报文段包含一个客户端随机选择的初始序列号client_isn。客户端进入SYN_SENT状态,等待服务器确认。这一步SYN报文通常还需要占用一个TCP连接的“资源”或“状态”,占用了少量服务器资源,这也是为什么全双工连接需要4个“TCP资源”(两个方向各占用两个)。如果服务器资源不足,可能不会响应这个SYN请求。
第二次握手(SYN-ACK):服务器收到客户端的SYN报文后,如果愿意建立连接,则向客户端回复一个SYN-ACK(SynchronizeSequenceNumbersAcknowledgment)报文段。该报文段包含服务器的初始序列号server_isn和客户端SYN报文sequencenumber(client_isn)的确认号client_isn+1。服务器进入SYN_RCVD状态。这一步服务器也需要占用一个“资源”。
第三次握手(ACK):客户端收到服务器的SYN-ACK报文后,向服务器发送一个ACK(Acknowledgment)报文段。该报文段包含确认号server_isn+1,表明客户端已收到服务器的SYN。这一步ACK报文通常不需要占用连接资源(有时也占用一个)。客户端进入ESTABLISHED状态,服务器收到ACK后也进入ESTABLISHED状态。此时,客户端和服务器都准备好收发数据。
总结:三次握手通过这三个交互步骤,客户端和服务器互相确认了各自的发送和接收能力,并同步了初始序列号,从而建立了一个可靠的数据传输连接。
不能收到某个步骤的回应的后果:
如果客户端未能收到服务器的第二次握手回应(SYN-ACK):客户端认为服务器没有收到自己的SYN报文,或者服务器拒绝了连接请求。客户端会认为连接建立失败,继续等待一段时间后(不断重发SYN报文,并配合退避算法),最终放弃连接尝试。这通常发生在服务器宕机、地址错误或者服务器忙拒绝连接等情况下。
如果客户端未能收到服务器的第三次握手回应(ACK):客户端会认为服务器的SYN-ACK虽然收到了,但服务器的ACK报文在传输过程中丢失了,或者服务器ACK报文的确认号不正确。客户端会重新发送第二次握手的SYN-ACK报文,尝试完成连接建立。如果持续失败,最终也会放弃。这可能导致短暂的服务器资源占用。
如果服务器未能收到客户端的第一次握手(SYN):服务器端没有发生任何动作,只是资源没有被占用。
如果服务器未能收到客户端的第二次握手(ACK):服务器会发送重传机制,不断重发最后一次发出的SYN-ACK报文。如果在超时时间内没有收到客户端的ACK,服务器会认为客户端无法到达,回收刚刚分配给这个连接的半连接资源(SYN_RCVD状态转为CLOSE_WAIT或TIME_WAIT等,取决于具体的超时和重传逻辑)。如果服务器资源耗尽,可能也无法继续建立连接。
为什么说“四次挥手”比“三次握手”更复杂?
虽然四次挥手最终能让两个方向的数据传输通道都关闭,但它的交互过程和时序更复杂,主要体现在以下两点:
能够双向独立关闭:TCP是面向连接的、可靠的、全双工的协议。“四次挥手”对应关闭从客户端到服务器、以及从服务器到客户端这两个独立的数据流通道。每个方向的关闭是一个独立的事件,需要经历一个完整的、但可以是异步的关闭过程。
第一次挥手(FINfromClient):客户端完成数据发送后,向服务器发送FIN(Finish)报文段,表示数据发送完毕。客户端进入FIN_WAIT_1状态。
第二次挥手(ACKforClient’sFINfromServer):服务器收到客户端的FIN报文后,如果确认没有数据要发送给客户端了,回一个ACK报文段,确认号是客户端FIN的sequencenumber+1。服务器进入CLOSE_WAIT状态。此时,从客户端到服务器的数据流已关闭(客户端触发CLOSE_WAIT),但服务器到客户端的数据流仍可能继续。
第三次挥手(FINfromServer):当服务器也完成数据发送后,向客户端发
原创力文档


文档评论(0)