(TCP/IP的特性一)三次握手&四次挥手

    TCP与UDP的对比: 

    TCP/IP中有两个具有代表性的传输协议,他们分别是TCP和UDP。TCP提供可靠的通信传输,而UDP则常被用于广播和细节控制交给应用的通信传输。那他们有何异同呢?

    1、TCP是面向连接的、可靠的流协议,为了提供可靠性传输,TCP实现了“三次握手,四次挥手”、“顺序控制(序号标识)”、“重发控制”、“滑动窗口机制(流控制)”、“阻塞窗口(拥堵控制)”等特性,以提高网络传输稳定性、利用率

    2、UDP是不具有可靠性的数据报协议,细微的处理它会上交给上层的应用去完成。在UDP协议下,虽然可以确保发送消息的大小,但是却不能保证消息一定会到达接收端

    3、对于传输可靠性要求比较高的业务场景,应当使用TCP协议,对于高速传输和实时性有高要求的场景应使用UDP,例如网络电话

    4、UDP相对于TCP更加轻量级,占用资源更少.


TCP的三次握手、四次挥手机制:

    TCP协议在建立连接时候,需要进行三次握手以确认客户端、服务端双方均已准备就绪,然后才开始传输数据,流程如下:


 而在关闭连接的时候需要进行四次握手:


    之所有要进行三次握手、四次握手,自然是为了保证TCP连接的可靠性,确保双方的状态都已准备好才开始或关闭连接。

    那么,为什么是三次握手,而不是两次握手呢?主要是为了防止已过期的连接请求再次被传到服务端。假设有种情况,客户端A向服务端B发送一个syn信息请求建立连接,但是这个消息由于网络原因很久都没到达B,最后终于到达了B却早已失效,此时B接收到连接请求并建立连接,向A发送ack,但是A由于早已认为之前连接请求失效了,又没有再向B发过连接请求,自然不予理会;但是此时B服务端还是建立着连接等待A发送消息的,此时便造成了服务端资源浪费,若是采用三次握手,AB双方都互相确认状态,则没有这种情况。

    同理,为什么断开连接的时候是四次挥手呢?

    这是因为TCP 是一个全双工的协议,即客户端A可以给服务端B传送信息,B也可以给A传送信息,fin&ack表示的是我已传送完毕,不会再传送信息了,请确认。既然AB都会互相发送信息,自然是双方都需要fin&ack的,因此需要四次挥手

附一张TCP状态转移图:

   


猜你喜欢

转载自blog.csdn.net/smartValentines/article/details/80718202