网络笔面试题

本文详细解释了TCP连接的三次握手过程,为何需要三次,以及四次挥手的必要性。还涵盖了四次挥手的完整流程和为何客户端等待2MSL。此外,讨论了OSI和Linux网络模型,公网与私网IP,以及TCP与UDP的对比,包括它们的优缺点和适用场景。
摘要由CSDN通过智能技术生成

1、什么是三次握手?
首先机器A发送SYN包,向机器B请求建立TCP连接,并附上自身的接收缓存区信息等,机器A进入SYN_SEND状态,表示请求已经发送,正在等待回复
机器B收到请求之后,根据机器A的信息记录下来,并创建自身的接收缓存区,向机器A发送SYN + ACK组合包,同时自身进去SYN_RECV状态,表示已经准备好了
机器A收到回去之后记录机器B的信息,发送ACK信息,自身进入ESTABLISHED状态,表示已经准备好了,可以进行发送和接收
机器B收到ACK数据后,进入ESTABLISHED状态
2、为什么TCP连接的时候是3次?两次是否可以?

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

因为需要确保通信双方都能通知对方释放连接,假设客服端发送完数据向服务端发送释放连接请求,当客服端并不知道,服务端是否已经发送完数据,所以此次断开的是客服端到服务端的单向连接,服务端返回给客户端确认报文后,服务端还能继续单向给客户端发送数据。当服务端发送完数据后还需要向客户端发送释放连接请求,客户端返回确认报文,TCP连接彻底关闭。所以断开TCP连接需要客户端和服务端分别通知对方并分别收到确认报文,一共需要四次。
4、什么是四次挥手?
机器A发送完数据之后,向机械B请求断开链接,自身进入FIN_WAIT_1状态,表示数据发送完成且已经发送FIN包(FIN标志位为1)
机械B收到FIN包之后,回复ack包,表示已经收到,但此时,机械B可能还有数据没发送完成,自身进入CLOSE_WAIT状态,表示对方已发送完成且请求关闭链接,自身发送完成之后可以关闭链接
机械B发送完数据后,发送FIN包给机器A,自身进入LAST_ACK状态,表示等待一个ACK包即可关闭链接
机器A收到FIN包后,知道机器B也发送完成了,回复一个ACK包。并进入TIME_WAIT状态
机器A等待两个报文存货最大时长之后,机器B接收到ACK报文之后,均关闭链接,进入CLASED状态
5、为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又敲代码呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值