TCP连接管理

2019-08-12  本文已影响0人  李die喋

TCP的特点及目的

TCP是一种面向有连接的协议,只有在确认通信对端存在时才会发送数据。它充分的实现了数据传输时各种控制功能,TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制实现可靠性传输,是可靠传输

TCP可靠传输的技术

  1. 利用窗口滑动技术提高速度

发送端的窗口大小由接收端的窗口大小决定。发送端窗口接收到数据向发送端发送确认数据包,窗口移动,清理缓冲区。若发生数据丢失,会重发请求数据包并在可选字段设置SACK(选择性确认),注明缺失的那一部分,目的就是不用将丢失后的所有部分重新发送。

  1. 流量控制

发送端主机根据接收端主机的窗口大小通知进行流量控制

  1. 拥塞控制

最初将发送端的窗口设置为1。每收到一个确认应答,窗口的值会增加1个段。

  1. 连接管理

三次握手和四次挥手

三次握手和四次挥手是面试中的重要考点,这里会对这两个过程进行详细的分析

三次握手

三次握手的过程

刚开始客户端处于Closed的状态,服务端处于Listen状态。

三次握手的作用

为什么要采用三次握手,两次不行么?

有一种情况是A发出的第一个连接请求报文段并没有丢失,而是在某些网络结点长时间滞留了,以致延误到连接释放后的某个时间才能到达B。本来这是个早已失效的报文段,但B收到此失效的连接请求报文段后,就误以为A又重新发出了一次新的连接请求。于是又向A发送确认报文段,同意建立连接。若不采用三次握手,只要B发出确认报文,新的连接就建立了。由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。

三次握手图解

image

四次挥手

四次挥手的过程描述

刚开始双方都处于established状态,如果客户端先发起关闭请求,则:

四次挥手图解

image

特别要注意的是TIME_WAIT状态,在服务器发送想要关闭连接的FIN-ACK报文后,客户端不会立即关闭,而是等一段时间再关闭。原因就是要确保服务器接收到ACK报文。如果服务器没有接受到,服务端会重新给客户端发送FIN-ACK报文,客户端再次接收到就知道之前的ACK报文丢失了,会再次发送ACK报文。

一些面试可能会问到的问题

  1. ISN是固定的么?
    ISN可以理解为序列号。ISN如果是固定的,攻击者很容易猜出后序的确认号,因此ISN是动态生成的。

  2. 什么是半连接队列?
    我理解的这个问题的大概意思就是在两个端进行连接时,请求的包会放在一个队列中,客户端发送的第一个请求和服务端连接的SYN包放入队列中,此时服务端还未做出应答的情况叫半连接队列。三次握手全部完成后的叫全连接队列。

  3. 关于SYN-ACK重传次数的问题

每次重传的时间不一定相同,一般会是指数增长,例如时间间隔为1s,2s,4s,8s......

  1. 三次握手过程中可以携带数据么?
    前两次不可以,第三次可以。如果前两次收发成功,就意味着客户端与服务端之间可以建立连接,第三次就可以发送数据了。

我在网上看到的解释是若第一次携带大量数据的话,会让服务器更容易受到攻击。因为攻击者不会管服务器是否收发数据正常,受到攻击的服务端接收不到SYN报文,客户端会重复发送,会让服务器花费更多的时间、内存空间来接收。

三握四挥大概就是目前这些,主要是先将内容搞清楚,自己能口述下来,后面有新的问题会继续补充。

上一篇 下一篇

猜你喜欢

热点阅读