TCP

概述

TCP是在不可靠的IP层之上实现的可靠的数据传输协议。它主要解决传输的可靠、有序、无丢失、无重复的问题。主要特点:

1)面向连接

2)每条连接只能是点对点的

3)全双工通信(三次握手协议的原因)

4)面向字节流

TCP报文段

  确认号字段:确认号字段为 N,表明我已经收到你 N-1号字段了,你下次给我发 N 号字段开始的字段。

握手协议

     1. 为什么是三次握手?

  TCP是全双工,意思就是 A给B发消息的时候,B也能给A 发消息。

  • 第一次握手: A给B打电话说,你可以听到我说话吗?
  • 第二次握手: B收到了A的信息,然后对A说: 我可以听得到你说话啊,你能听得到我说话吗?  
  • 第三次握手: A收到了B的信息,然后说可以的,我要给你发信息啦!

  在三次握手之后,A和B都能确定这么一件事: 我说的话,你能听到; 你说的话,我也能听到。 这样,就可以开始正常通信了。

 

  并且三次握手也避免以下的情况:

       假设A第一次发送连接请求的报文因为网络问题长时间滞留,因为长时间等不到回复,所以A又发送了报文,然后跟B建立了连接,

到第二次通信完成释放连接后才到达B,这就是一个已失效的报文,但此时B以为是A的又一次连接请求,于是发出了确认,若没有第三次确认,连接就成功建立了。由于A现在并没有发出建立请求,所以B回复的确认A不理睬,所以不与B进行通信,然而B就一直等着A发数据给他,就这样,B等了很久,白白浪费了B的资源。
    
    2. Server端易受到SYN攻击?
    
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击,SYN攻击就是客户端伪造了大量的IP地址,给服务端发SYN包,服务端回复确认包,并等待客户端重发,但是因为IP地址是为伪造的,所以服务端不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。
    防范SYN攻击的措施:降低主机的等待时间,尽快释放半连接;短时间受到某IP的重复SYN则丢弃后续请求。
    

四次挥手

  分别关闭连接。   

       为什么A在TIME-WAIT状态必须等待2MSL的时间?       

       MSL是数据包在网络中的最大生存时间。

 

       1)  保证A发送的最后一个ACK报文段能够到达。 如果A一发送完就关闭连接, 而A发送的最后一个ACK报文段丢失,那么B就无法正常进入CLOSED状态;但是如果

ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,B超时重传FIN+ACK报文段,而A能在2MSL时间内收到这个重传的FIN+ACK报文段,接着A重传一次确认,重新启动2MSL计时器,最后A和B都进入到CLOSED状态
      
      2) A在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。

                                                                                                                                                                                                                                                          

posted @ 2020-05-10 14:38  天凉好个秋秋  阅读(214)  评论(0编辑  收藏  举报