美文网首页
TCP的三次握手和四次挥手

TCP的三次握手和四次挥手

作者: Cubery | 来源:发表于2019-12-06 19:43 被阅读0次

    为什么需要建立TCP连接

    1. IP协议是无连接的:IP并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的。这种无连接的优点是不占用线路,降低了对网络线路的要求;
    2. IP协议是不可靠的:不能保证IP数据报能成功到达目的地,是一种尽力而为的传输服务,路由器对IP报错误处理方式是丢包,并发送ICMP给源地址。
       正是因为IP协议是无连接、不可靠的,所有需要上层的TCP来建立连接和差错重传。

    TCP的特点

    1. TCP是面向连接的、可靠的、基于字节流的传输层通信协议;
    2. 经应用层的数据流分割成报文段(MTU)并发送给目标节点的TCP层;
    3. 数据包都有序号,对方收到则发送ACK确认,未收到则重传;
    4. 使用校验和来检验数据在传输过程中是否有误。

    TCP的三次握手

     三次握手是TCP建立连接的过程,一旦建立连接,两台主机就可以进行全双工的通信。


    TCP三次握手.jpeg

     SYN报文和SYN+ACK报文都会消耗1个序号,但不能携带数据,ACK报文可以携带数据,不携带数据则不消耗序号。
     为什么TCP建立连接需要三次握手而不是两次:因为需要接收并确认对方的序号。
     利用TCP的三次握手机制(SYN超时),可以进行泛洪(SYN Flood)攻击。
     Linux针对SYN Flood的防护措施:特别的序号tcp_syscookies
     TCP的保活机制(心跳)

    TCP的四次挥手

     四次挥手是TCP断开连接的过程。


    TCP四次挥手.png

     FIN报文可以携带数据,但是即使不携带数据,也必须消耗1个序号,ACK报文不消耗序号。
     MSL是最大报文生存期,设置TIME_WAIT的原因为:
     1. 为了保证客户端发送的最后一个ACK报文段能够到达服务器端,确保服务端能正常进入CLOSED状态;
     2. 避免新旧连接混淆。由于网络滞留,客户端可能发送了多次请求建立连接的请求,经过时间2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
     在2MSL时间内,该地址上的连接(客户端地址,端口和服务器的端口地址)不能被使用,比如我们在建立一个连接后关闭连接然后迅速重启连接,那么就会出现端口不可用的情况。
     为什么TCP断开连接需要四次握手:全双工。
     某段时间内,服务器出现大量CLOSE_WAIT状态的原因:客户端发送了FIN,服务器忙于读写,没有及时关闭连接,考虑检查释放资源的代码或线程配置等。

    相关文章

      网友评论

          本文标题:TCP的三次握手和四次挥手

          本文链接:https://www.haomeiwen.com/subject/emgjgctx.html