TCP相关概念一文包括一下几个点:

       1) TCP的流量控制、差错控制、拥塞控制。                  2) TCP协议是如何确保传输可靠性的。

       3) TCP的三次握手和四次挥手                                        4) TCP和UDP有什么区别。

 

一、TCP的流量控制、差错控制、拥塞控制

TCP的流量控制

       TCP的流量控制采用的是滑动窗口协议,滑动窗口协议分为三种:

       1) 停等协议:又叫1比特滑动窗口协议,发送窗口和接收窗口的大小固定为1,发一帧,听停一下,等回信。

       2) 后退n帧协议:连续发送若干个数据帧,并设置超时定时器,若计时器超时后仍未返回其确认信息,重新发送出错帧及其后的N帧。

       3) 选择重传协议:连续发送若干个数据帧并设置缓冲区,对于出错的帧单独发送(选择重传),缓冲区整理好后,一并上交给高层。

       参考博客:TCP 滑动窗口协议

                         TCP协议的流量控制、拥塞控制和差错控制

TCP的差错控制

       TCP的差错控制主要使用校验和确认超时重传这三个工具进行差错控制

       1) 校验和。

       2) 确认:三次握手(ACK和seq),通过***来确认。

       3) 超时重传:累计确认,快重传。

TCP的拥塞控制

       TCP的拥塞控制主要体现在:慢开始、拥塞避免、快重传、快恢复。

       快重传和快恢复:快重传要求接收方收到一个失序的报文段之后就立即发出重复确认,而不要等到自己发送的数据时捎带确认。快重传 算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期(快体现在这里)。

       TCP相关概念

二、TCP协议是如何确保传输可靠性的

       1) 应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。 (将数据截断为合理的长度)

       2) 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。(超时重发)

       3) 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。(对于收到的请求,给出确认响应) (之所以推迟,可能是要对包做完整校验)

       4) TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 (校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据)(端到端检验和的存在是为了节省时间,免得对全部内容检验)

       5) 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。(对失序数据进行重新排序,然后才交给应用层)

       6) 既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。(丢弃重复数据)

       7) TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。

       参考博客:TCP协议如何来保证传输的可靠性

三、TCP的三次握手和四次挥手

1) TCP的三次握手

2) TCP的四次挥手

       参考博客:TCP的三次握手与四次挥手(详解+动图)

四、TCP和UDP有什么区别

1) TCP是面向链接的,需要事先建立连接(三次握手,释放需要四次挥手),而UDP是无连接的。

2) TCP有多种手段来保证传输质量(流量控制、差错检验、拥塞控制、对数据报排序),一般用于对数据准确性要求高的FTP、HTTP、邮件系统的POP3,SMTP、远程登录等。UDP不对数据进行排序,没有拥塞控制,一般用于准确度不高的视频通信。

3) UDP传送数据较TCP快速,因为系统开销也少,无需各项保质控制(TCP在转移数据时必须创建(并保持)一个连接。这个连接给通信进程增加了开销,让它比UDP速度要慢)。

4) TCP通信是一对一的,而UDP是一对一、一对多、多对一和多对多的交互通信。

5) TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;

6) JAVA实现:

     TCP:ServerSocket + ServerSocket.accept() + ServerSocket.getOutputStream() + ServerSocket.getInputStream()

     UDP:DatagramSocket + DatagramPacket。

     参考博客: (JAVA)基于Socket的TCP和UDP编程

                         TCP和UDP的最完整的区别

相关文章: