【面试题】计算机网络篇-10道常见面试题总结,java开发工程师面试题总结

本文详细解释了TCP的三次握手和四次挥手过程,以及为何需要这样的步骤。同时,讨论了TCP的拥塞控制和流量控制机制,包括慢开始、拥塞避免、快重传和快恢复算法。此外,对比了TCP与UDP的区别,并阐述了TCP如何确保可靠传输,如校验和、序列号、超时重传等。最后,提到了HTTP中GET和POST方法的不同之处。
摘要由CSDN通过智能技术生成
  • 首先客户端发送带有 SYN 标志的数据包到服务端

  • 然后服务端发送带有 SYN/ACK 标志的数据包到客户端

  • 最后客户端发送带有带有 ACK 标志的数据包到服务端

👨‍💻面试官打断问:为什么要三次握手?一次,两次不行吗?

三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的,可以从以下两个方面考虑(我们这里假设客户端是首先发起连接请求):

  • 假设建立TCP连接仅需要两次握手,那么如果第二次握手时,服务端返回给客户端的确认报文丢失了,客户端这边认为服务端没有和他建立连接,而服务端却以为已经和客户端建立了连接,并且可能向服务端已经开始向客户端发送数据,但客户端并不会接收这些数据,浪费了资源。如果是三次握手,不会出现双方连接还未完全建立成功就开始发送数据的情况
  • 如果服务端接收到了一个早已失效的来自客户端的连接请求报文,会向客户端发送确认报文同意建立TCP连接。但因为客户端并不需要向服务端发送数据,所以此次TCP连接没有意义并且浪费了资源。

所以三次握手就能确认双发收发功能都正常,缺一不可

👨‍💻面试官又问:第 2 次握手传回了 ACK,为什么还要传回 SYN?

接收端传回发送端所发送的 ACK 是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而回传 SYN也就是同步序列编号则是为了建立并确认从服务端到客户端的通信


再来说四次挥手

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y6zj7VpL-1637158375584)(C:\Users\30287\AppData\Roaming\Typora\typora-user-images\image-20211116101202704.png)]

断开一个 TCP 连接则需要四次挥手:

  • 第一次挥手:客户端向服务端发送的数据完成后,向服务端发起释放连接报文,报文包含标志位FIN=1,序列号seq=u。此时客户端只能接收数据,不能向服务端发送数据。

  • 第二次挥手:服务端收到客户端的释放连接报文后,向客户端发送确认报文,包含标志位ACK=1,序列号seq=v,确认号ack=u+1。此时客户端到服务端的连接已经释放掉,客户端不能像服务端发送数据,服务端也不能向客户端发送数据。但服务端到客户端的单向连接还能正常传输数据。

  • 第三次挥手:服务端发送完数据后向客

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值