软件工程师助理面试题题库详解.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

软件工程师助理面试题题库详解

面试问答题(共20题)

第一题

请解释一下TCP协议的“三次握手”过程,并说明为什么这个过程是必要的。

答案:

三次握手过程解释:

TCP(TransmissionControlProtocol)是一种面向连接的、可靠的协议。在建立两个host之间的TCP连接之前,必须经过“三次握手”过程。这个过程确保了双方都准备好发送和接收数据,并且可以同步双方的初始序列号。

第一次握手(SYN):

Client向Server发送SYN包:Client选择一个初始序列号(InitialSequenceNumber,ISN),通常记为seq=x。它将SYN标志位置为1,并在TCP头部的SequenceNumber字段中填入x,然后将这个SYN包发送给Server。此时,Client处于SYN_SENT状态,等待Server的确认。

Server端处理:Server收到SYN包后,会检查是否有连接请求。

第二次握手(SYN-ACK):

Server向Client发送SYN-ACK包:如果Server接受连接请求,它也会选择一个自己的初始序列号(ISN),通常记为seq=y。Server将SYN和ACK标志位置都设为1,在SequenceNumber字段填入y,在AcknowledgmentNumber字段填入x+1(表示收到了Client的seq=x,expectsx+1),然后将这个SYN-ACK包发送回Client。此时,Server处于SYN_RCVD状态。

Client端处理:Client收到SYN-ACK包后,检查ACK号是否为x+1,以确认Server正确收到了自己的初始序列号。如果确认无误,Client就进入ESTABLISHED状态。

第三次握手(ACK):

Client向Server发送ACK包:Client将ACK标志位置为1,在AcknowledgmentNumber字段填入y+1(表示收到了Server的seq=y,expectsy+1),其SequenceNumber字段填入x+1(表示Client下一个要发送的数据的序列号)。然后将这个ACK包发送给Server。

Server端处理:Server收到这个ACK包后,检查AcknowledgmentNumber是否为y+1。如果确认无误,Server就进入ESTABLISHED状态。

握手完成后:此时,Client和Server双方都确认了对方的接收和发送能力,并且同步了各自的初始序列号,TCP连接建立成功,可以开始传输数据。

为什么需要三次握手:

三次握手是必要的,主要原因是为了确保连接建立过程的双方确认和序列号同步,避免因网络延迟或乱序而导致的问题:

防止历史连接请求到达旧连接:TCP连接是无状态的。假设Client在时间T1发出了一个SYN包给Server,但由于网络延迟,这个SYN包在时间T3才到达Server。如果此时Client在时间T2因为超时重发了SYN包(SYN(Retransmit)),Server在T3收到旧的SYN包,并在T4回复SYN-ACK。Client在T6收到这个SYN-ACK。如果Client不知道这个SYN-ACK是回应旧的请求,它会认为这是一个新的连接成功建立,并发送数据。Server收到数据后,也会回应,但由于Client的连接早已断开(在T5因为连接超时而关闭),这就会导致Server无聊地发送确认,浪费资源。两次握手无法区分T4的SYN-ACK是对T1的SYN还是T2的SYN(Retransmit)的回应,因此可能导致旧连接“鬼魂”占用Server资源。三次握手通过Client必须发送一个独立的ACK来确认,确保了只有Client端确认是收到其当前发出的SYN之后才会认为连接建立,从而避免了这个问题。

序列号同步:第一次握手Client发出SYN(seq=x),第二次握手Server回应SYN-ACK(seq=y,ack=x+1),第三次握手Client回应ACK(seq=x+1,ack=y+1)。这个过程使得双方都明确了自己的初始序列号(seq=x或seq=y)以及期望收到的对方下一个序列号(ack=x+1或ack=y+1)。这为后续可靠的数

文档评论(0)

halwk + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档