TCP相关知识及面试考点详解

TCP的三次握手和四次挥手

三次握手

① 客户端发出打算建立TCP连接的请求报文,报文首部中的SYN位=1,说明该报文不能携带数据,但是要消耗一个序号(seq)。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号,该编号即为序号(seq)。该请求建立连接报文中选择一个初始序号seq=X,但是不携带数据。此时,TCP客户端进程进入SYN-SENT(同步已发送)状态。
② 服务端监听端口接收到请求后,如同意建立连接,则向客户端发送确认。在确认报文段中将SYN位和ACK位都置为1,同样也消耗掉一个序号和选择一个初始序号seq=Y。ACK位=1说明该报文中的确认号有效,确认号是ack=X+1,表示希望客户端传输的下一个序号为X+1(因为客户端在第一步已经发了一个序号为x的报文)。此时TCP服务器进程进入SYN-RCVD(同步收到)状态。
③ 客户端收到服务器的确认后,还要给服务器发出确认,故先将该确认报文段的ACK置为1,确认号ack=Y+1,表示希望服务器端传输的下一个序号为Y+1(因为服务器在上一步中已经发了一个序号为y的报文),而自己的序号为seq=X+1。此时,TCP连接已经建立,双方都进入ESTABLISHED(已建立连接)状态。
SYN:请求链接 FIN:断开链接 ACK:回复 RST:重置连接 PSH:推送数据 URG:紧急指针
三次握手流程

用通俗的话再来描述以上的三次握手过程!

① 客户端:服务器,我们可以建立连接吗?
② 服务器:可以啊,我们建立连接吧!
③ 客户端:收到,建立连接吧!然后建立TCP连接成功如果是四次握手的话,就变成了如下
① 客户端:服务器,我们可以建立连接吗?② 服务器:可以啊,我们建立连接吧!③ 客户端:收到,我们建立连接吧!④ 服务器:收到,我们建立连接吧!

1比特流协议

适用于网络极其糟糕的情况

后退n协议

后退到n个 后面全部重新传

选择重传协议

哪个丢失 重传哪个

连接握手为什么需要三次

为啥要有第三次握手,因为b不知道这个包是不是a的撩骚包,也许是a发送的多个撩骚包中的一个,这是个迟来的包,没必要接受的。“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”

  • 两次握手中,客户端知道了服务器具有接收信息和发送信息的能力,但是服务器只知道客户端具有发送信息的能力,但是并不知道客户端具有接收信息的能力,如果加上第3次握手,服务器就知道了客户端具有接收信息的能力(因为客户端接收到了信息并且回复给服务器端)。

  • 现在考虑这么一种情况,由于网络拥堵,客户端发出的第一个连接请求报文段(第一次握手)在某些网络节点长时间滞留了,需要一些时间才能到达服务器。

  • 在这里插入图片描述

  • 然后由于客户端没有收到服务器的确认报文,客户端就认为这个连接请求报文段(第一次握手)失效了,于是重新发送这个连接请求报文,这一次没有因为网络堵塞而滞留在网络中,成功发送到服务器端了,因为是两次握手,所以两次握手后,连接就成功建立了。
    在这里插入图片描述

  • 客户端认为刚开始的那个由于网络拥堵而滞留在网络中的请求连接报文失效了,其实并没有失效,只是由于网络的拥堵而滞留在网络中而已,此时,网络不阻塞了,又畅通了,该报文成功到达了服务器,服务器又以为客户端要进行与服务器TCP的连接,于是服务器就又对这个连接请求报文进行应答,同意建立连接。假定不采用第三次握手,那么只要服务器发出确认,新的连接就建立了。在这里插入图片描述

  • 由于现在客户端并没有发出建立连接的请求,因此不会理睬服务器端的确认,也不会向服务器端发送数据。但服务器端却以为新的运输连接已经建立了,并一直等待客户端发来数据。服务器端的许多资源就这样白白浪费了。在这里插入图片描述

因此,需要第三次握手来解决该问题,第三次握手是客户端发给服务器端的确认报文,如果服务器端过了规定的时间都没收到客户端的回复确认报文,于是也不会为客户端分配资源,因此,此次的连接就放弃啦,也不会耗费服务器端的资源了。

四次挥手

简单说就是不写了,不读并且确认下,不写了并且让别人确认下。
四次挥手

TIME_WAIT两个作用

  1. 保证正常终止连接
  2. 允许老的重复分节在网络中消失

为什么TIME-WAIT状态需要经过2msl(最大报文生存时间)才能返回CLOSE状态

虽然四个报文都发送完毕,可以进入CLOSE状态,但是网络可能会存在不可靠假象,有可能最后一个ACK丢失,TIME-WAIT状态就是用来重新发送可能丢失的报文。
等待2msl的意义:可靠的终止TCP连接、保证迟来的TCP报文有足够的时间被识别并丢弃;
1、保证A发送的ACK能够顺利到达B,这个报文可能丢失,处在LAST-ACK的B收不到对自己发送的FIN和ACK报文的确认,B会超时重传FIN和ACK报文,那么在2msl时间内收到这个重传的FIN+ACK报文,接着A重传一次;
2、在这个期间,定义这个连接的插口(客户的IP地址和端口号,服务器的IP地址和端口号)不能再被使用,这个连接只能在2msl结束后才能被使用;
3、为了使旧的数据包在网络中因过期而消失,每个具体的TCP必须选择一个报文最大生存时间MSL,它是任何报文字段被丢弃前在网络内的最长时间。

为什么要进行四次挥手

参照三次握手机制,挥手最少需要三次,如果只有三次,客户端发送完数据请求断开连接,而服务端不一定也同样发送完数据,若同时回ACK和FIN给客户端,断开连接,可能造成数据的损坏;若先发送ACK,再等B的数据发送完了再发送FIN和ACK,就可以保证传输数据的完整性。
tcp是全双工模式,接收到FIN意味着将没有数据再发来,但是还是可以继续发送数据。

TCP流量控制怎么实现

TCP利用滑动窗口协议来进行流量控制。设想在发送端发送数据的速度很快而接收端接收速度却很慢的情况下,为了保证数据不丢失,显然需要进行流量控制, 协调好通信双方的工作节奏。所谓滑动窗口,可以理解成接收端所能提供的缓冲区大小。TCP利用一个滑动的窗口来告诉发送端对它所发送的数据能提供多大的缓冲区,该协议可以加速数据的传输,提高网络吞吐量。

TCP拥塞控制怎么实现

拥塞控制也叫作基于窗口的拥塞控制,为此,发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且在动态的发生变化,发送方让自己的发送窗口等于拥塞窗口 (注:在这里我们假设接受方总是有足够大的缓存空间,因而发送窗口的大小取决于网络的拥塞程度,实际上真正的窗口值 = min(接收方窗口,拥塞窗口)发送方控制拥塞窗口cwnd的原则是:只要网络没有出现拥塞,拥塞窗口就可以在增大一些,以便把更多的分组发送出去。但是只要网络出现拥塞或有可能出现拥塞,就必须把拥塞窗口减小一些,以减少注入到网络中的分组数,以便环节网络出现的拥塞。

如何知道网络中出现了拥塞呢?

  1. 当网络中出现了拥塞时,路由器就要丢弃分组,因此只要发送方没有及时收到应当到达的确认报文,也就是说只要出现了超时,就可以猜想网络可能出现了拥塞,(现在通信线路的传输质量一般都很好,因传输出差错而丢弃的概率是很小的(远小于1%)) 因此,判断网络拥塞的依据就是是否出现了超时。
  2. 接收方建立快重传机制,如果一个包丢失,则对后续的包继续发送针对该包的重传请求;一旦发送方接收到三个一样的确认,就知道该包之后出现了错误,立刻重传该包;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于TCP/IP的常见面试问题及其答案: 1. 什么是TCP/IP协议? TCP/IP(Transmission Control Protocol/Internet Protocol)是一组用于在计算机网络中进行通信的协议。它提供了可靠的数据传输、分组交换、路由和网络互连等功能,是互联网的核心协议。 2. TCP和UDP有什么区别? - TCP(Transmission Control Protocol)是一种面向连接的协议,提供可靠的数据传输,确保数据的有序性和完整性。它使用三次握手建立连接,并使用确认机制和重传机制来确保数据的可靠传输。 - UDP(User Datagram Protocol)是一种无连接的协议,提供不可靠的数据传输。它不保证数据的有序性和完整性,也不提供确认机制和重传机制,但具有低延迟和较小的开销。 3. TCP的三次握手是什么?为什么需要三次握手? 三次握手是TCP建立连接时的过程: 1. 客户端发送一个SYN报文段到服务器,并进入SYN-SENT状态。 2. 服务器收到SYN报文段后,回复一个SYN+ACK报文段给客户端,并进入SYN-RECEIVED状态。 3. 客户端收到服务器的SYN+ACK报文段后,发送一个ACK报文段给服务器,确认连接建立,并进入ESTABLISHED状态。 三次握手的目的是确保双方都能收到对方的确认信息,并建立起可靠的连接。 4. IP地址的分类有哪些? IP地址按照网络的规模和需求可以分为以下几类: - A类地址:用于大型网络,第一个字节范围是1-126。 - B类地址:用于中型网络,第一个字节范围是128-191。 - C类地址:用于小型网络,第一个字节范围是192-223。 - D类地址:用于多播(Multicast)通信,第一个字节范围是224-239。 - E类地址:保留地址,用于实验和研究。 5. 什么是子网掩码? 子网掩码用于将IP地址分成网络地址和主机地址两部分。它通过将IP地址中的网络位设置为1,主机位设置为0来实现。子网掩码的长度表示网络位的个数。 这些问题涵盖了关于TCP/IP协议的一些基本概念和常见问题。当然,在面试中还可能涉及更深入和具体的问题,具体取决于面试官对TCP/IP的关注点和要求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值