TCP/IP协议及互联网常见应用和协议的原理——面试题

TCP:TCP协议位于传输层,是一种可靠的传输控制层协议。

TCP/IP协议在分层中的位置:

TCP/IP协议通过“三次握手”建立连接,并发送数据,结束后以“四次挥手”的形式终止连接。

所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接。报文需要加标识以代表双方何种接收方式以及表示传输的过程,涉及的英文表示:

SYN:同步

seq:序列号

ACK:确认位

ack:确认位的值

一、三次握手过程:

  1. 客户端(左侧)向服务器端发送数据,需要建立TCP连接;客户端发送报文,并让报文头部包含SYN=1,seq=x(同步=1,序列号=x);
  2. 服务器端:服务器端LISTEN(监听)到客户端发来的数据,立即向客户端发送确认报文,并让报文头部包含SYN=1,ACK=1(大写的ACK表示确认位,=1表示已确认收到信息),seq=y, ack=x+1;(小写的ack表示确认位的值,ack)
  3. 客户端:客户端收到服务器端发送的报文,然后同样向服务器端发送一个确认报文,(表示,已收到你的消息),并让报文头部包含ACK=1,seq=x+1(seq=x+1表示客户端两次连续发送过程),ack=y+1;
  4. 连接建立成功。客户端可以发送数据了。

整个过程中,始于客户端要发送信息,终与服务器端接收信息,然后彼此都不信任对方是否准备好。

因此客户端先打招呼,“我要发送数据给你,你OK吗?"

服务器端:“I‘m OK,你可以发送”

客户端:“好的,那我要发送数据,你准备接收”

服务器端:”进入接收状态“。

建立连接成功。

二、为什么要三次握手而不是二次

答:主要为了防止已失效的连接请求报文段突然又传送到了接收端(服务器),因而产生错误。

举例:如客户端A发出连接请求,但因连接请求报文S1丢失而未收到确认,于是A在重传一次连接请求S2

后来收到了服务器端B的确认,建立了连接。数据传输完毕后,连接释放。

在这个过程中,A总共发出了两个连接请求报文段,其中第一个丢失,第二个到达了B,但是第一个丢失的报文段只是在某些网络节点长时间滞留了,延误到连接释放以后的某个时间才到达B。

如果只有两次握手,此时B误以为A又发出一次连接请求,于是就向A发出确认报文段,同意建立连接,不采用三次握手,只要B发出确认,就建立新的连接了,此时如果A不理睬B的确认且不发送数据,则B要一直等待A发送数据,浪费资源。

二、四次挥手过程

  1. Client端发起中断连接请求,也就是发送FIN报文。意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。
  2. Server端接到FIN报文后,发送ACK,告诉Client端,“你的请求我收到了,但是我还没准备好,请继续你等我的消息"。
  3. 这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
  4. 当Server端确定数据已发送完成,则向Client端发送FIN报文,告诉Client端,”好了,我这边数据发完了,准备好关闭连接了"。
  5. Client端收到FIN报文后,就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传
  6. Server端收到ACK后,就知道可以断开连接了。
  7. Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了! 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

三月的一天

你的鼓励将是我前进的动力。

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

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

打赏作者

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

抵扣说明:

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

余额充值