TCP三次握手和四次挥手

TCP的三次握手(建立连接)和四次挥手(关闭连接)

  • 什么是窗口?

    • 当建立连接后,两端都会创建一个缓冲区来存储接收的数据,并将缓冲区的尺寸发送给另一端,其中包含了自己的缓冲区的剩余尺寸。窗口就是剩余缓冲区空间的数量。

  • tcp标志位

    • SYN(synchronous)建立连接

    • ACK(acknowledgement)确认

    • PSH(push)传送

    • FIN(finish)结束

    • RST(reset)重置

    • URG(urgent)紧急

    • Sequence number顺序号码

    • Ackonwledge number确认号码

三次握手
  1. 客户端向服务端发送SYN(SYN = j),进入SYN_SEND状态,等待服务器确认

  2. 服务端收到SYN包,向客户端发送SYN+ACK包,(SYN=K,ACK=j+1),此时服务端进入SYN_RECV状态

  3. 客户端收到服务端的SYN+ACK包,向服务器发送ACK包,ACK = K+1,发送完毕后,客户端和服务端进入ESTSABLISHED状态,完成三次握手

  • SYN攻击:在三次握手的过程中,服务端发送ACK+SYN之后,等待客户端发送ACK的过程中称为半连接,处于Syn_RECV状态。如果此时攻击客户端在短时间内伪造大量不存在的IP地址,向服务端不断地发送SYN包,服务端回复确认包,并等待客户端的确认,由于源地址是不存在的,服务器需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,正常的SYN包被丢弃,目标系统运行缓慢,甚至引起网络读书、系统瘫痪。

  • 解决:主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等.

四次挥手
  1. 发送方向接收方发送FIN包,其中包含seq=M

  2. 接收方收到后,返回一个ack = M+1,seq = v

  3. 接收方向发送方发送FIN包,其中包含seq=J,ack=M+1

  4. 发送方接收到后,返回一个ACK = J+1,seq = m+1

  • 关闭连接时,每个方向都要单独执行操作。当一方完成它的数据发送任务后就可以发送一个FIN来终止这个方向的连接;收到一个FIN只意味着这一方向没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

为什么建立连接只需要三次,而关闭连接需要四次?
  • 因为建立连接过程中,当服务器收到SYN+ACK包后会将自己的SYN+ACK包一起发送给客户端

  • 而关闭连接过程中,当被动方收到FIN包后,并不一定被动方向主动方的数据已经发送完毕了,需要等到数据发送完后,再发送FIN给主动方

为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?
  • 因为如果网络是不可靠的,不能保证最后发送的ACK会被接收到,所以对方可能会超时未收到ACK,然后重新发送FIN,此时等待状态就是用来重发可能丢失的ACK

  • 服务器不能在短时间内进行相同端口的连接。因此这2MSL也是服务器的平静时间。

  • 防止已失效的请求连接报文段出现在网络中,此2MSL的时间将所有请求清空。
为什么不能用两次握手?
  • 如果是两次握手,首先客户端向服务端发动连接请求,服务端接收到之后向客户端发送确认应答。如果此时客户端并没有收到服务端的应答,而服务端默认客户端收到了,就会给客户端发送 数据分组,而客户端还在等待应答分组。服务端在发出的数据分组超时后,会重复发送,形成了死锁。

三次握手建立连接时,发送方再次发送确认的必要性?
  • 如果有某一个请求连接因网络问题被滞后,直到新的连接建立完成后才发送到服务端,此时服务端会以为客户端发起了新的请求,于是会向客户端发送确认报文,此时如果没有客户端进行确认,新的连接就已经建立了,但是客户端不会从这个连接向服务端发送数据,而服务端一直在等待,资源就被浪费了。

TCPUDP的区别?
  • TCP协议是有连接的,也就是说传输数据之前客户端和服务端必须通过三次握手建立连接,会话结束后也要关闭连接,而UDP是无连接的

  • TCP协议保证数据按序发送,按序到达,提供超时重传保证可靠性,而UDP不保证按序到达,甚至不保证到达,只是努力交付

  • TCP协议所需资源多,TCP首部需要20个字节,而UDP为8个

  • TCP有流量控制和拥塞控制,UDP没有,网络拥堵不会影响发送端的发送效率

  • TCP是一对一的连接,而UDP则可以支持一对一、多对多、一对多的通信

  • TCP面向的是字节流,UDP面向的是报文流

posted @ 2020-04-09 20:17  ashen1999  阅读(126)  评论(0编辑  收藏  举报