TCP/IP协议常见面试题

本文详细介绍了TCP协议的三次握手和四次挥手过程,解释了为何需要三次握手和四次挥手的原因。三次握手确保了连接的可靠性,避免了重复连接的问题,而四次挥手则允许双方在发送完所有数据后安全地关闭连接。此外,还讨论了2MSL等待时间的作用,防止因丢失ACK导致的连接混乱。
摘要由CSDN通过智能技术生成

1、简述TCP的三次握手和四次挥手

SYN:请求建立连接,FIN:请求断开连接,ACK:确认是否有效, seq:序列号, ack:确认号

1)三次握手

1.客户端向服务端发送⼀个SYN=1(请求建立连接),并生成一个序列号seq=j。

2.服务端接收到SYN=1后,给客户端发送⼀个SYN=1与ACK=1;并将ack置为j+1;同时生成一个序列号seq=k。

3.客户端接收到会检查ack是否为j+1与ACK是否为1,如果是,则会给服务端发送一个ACK=1与ack=k+1,以及自己的序列号seq=j=1; 服务端接收到会检查ACK是否为1与ack是否为k+1,如果是则代表连接建立成功,两者间可以传递数据。

2)四次挥手

1.客户端向服务端发送FIN=1(请求关闭连接),并生成一个序列号seq=x。

2.服务端接收FIN后,向客户端发送ACK=1,ack=x+1,并生成序列号seq=y(客户端无数据发送,但服务器端需发送完最后的数据)。

3.服务端处理完所有数据后,向客户端发送FIN=1与ACK=1,ack=x+1,并生成序列号z,表示服务端现在可以断开连接。

4.客户端收到服务端的数据包后,会向服务端发送ACK=1,seq=x=1,ack=z+1(需要等待2MSL后才可断开连接)。

2、为什么是三次握手而不是两次握手?

        因为如果客户端第一次发送的SYN报文因为网络问题而迟迟没有到达服务端,此时客户端会因为超时而重新发送一个新的SYN报文,此时上一个SYN报文在客户端就会失效,如果这里只采用两次握手,会因为客户端第二次发送SYN后,第一次发送的SYN又成功到达服务端,这时就会建立两个连接,产生问题。

3、为什么连接的时候是三次握手,关闭的时候却是四次握手?

        因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

4、为什么需要经过2MSL(报文段在网络中最大生存时间)才能返回到CLOSE状态?

        是为了给最后一次发送的ACK报文成功到达服务端预留时间,因为如果因为网络阻塞最后一次ACK未能及时到达服务端,服务端会以为客户端为收到上一次发送的FIN报文,则服务端会重新发送FIN报文,而这是客户端已经断开连接了,这时就是产生错乱的问题。

5、TCP与UDP的区别

UDP适合广播发送,效率高但是不可靠。

TCP适合两个对象间传递数据,可靠性高但是效率低。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值