首页 >> 知识 >> TCP 可靠传输机制详解

TCP 可靠传输机制详解

目录

1 UDP&TCP的区别

2 TCP传输

2.1 TCP协议的特点

2.2 TCP 报文段

2.3 TCP "三次握手"

2.4 TCP "四次挥手"

3 TCP可靠传输

3.1 客户端和服务器端所经历的状态

3.2 TCP 协议如何保证可靠传输

3.3 校验

3.4 TCP流量控制

3.5 TCP拥塞控制

3.6 停止等待协议

4 面试相关问题

1 UDP&TCP的区别

UDP协议和TCP协议都是传输层协议。

     TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。

    UDP(User Data Protocol,用户数据报协议)是一个简单的面向数据报的运输层协议。它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。

UDP应用场景: 1.面向数据报方式  2.网络数据大多为短消息   3.拥有大量Client  4.对数据安全性无特殊要求  5.网络负担非常重,但对响应速度要求高

不同点

报头不同

                           

    UDP首部,8个字节。UDP数据报最大长度64K(包含UDP首部),如果数据长度超过64K就需要在应用层手动分包,UDP无法保证包序,需要在应用层进行编号。

       

Tcp头,20字节。

源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去; 32位序号/32位确认号: 不一定从0开始(作用:保证确认应答;保证数据按序到达;去重) 4位TCP报头长度: 表示该TCP头部有多少个32位bit(有多少个4字节); 所以TCP报头最大长度是(1111)15 * 4 = 60 字节 6位标志位:     1. URG: 紧急指针是否有效     2. ACK: 确认号是否有效     3. PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走     4. RST: 对方要求重新建立连接; 蜜桃成人网站入口把携带RST标识的称为复位报文段     5. SYN: 请求建立连接; 蜜桃成人网站入口把携带SYN标识的称为同步报文段     6. FIN: 通知对方, 本端要关闭了, 蜜桃成人网站入口称携带FIN标识的为结束报文段 16位窗口大小: 接收缓冲区剩余的空间大小  16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP 首部, 也包含TCP数据部分.  16位紧急指针: 标识哪部分数据是紧急数据;   

TCP与UDP区别总结:

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。

Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。

3、UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP对系统资源要求较多,UDP对系统资源要求较少。

1.基于连接与无连接;    2.对系统资源的要求(TCP较多,UDP少);    3.UDP程序结构较简单;4.字节流模式与数据报模式; 5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。

为什么UDP有时比TCP更有优势?

UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。

(1)网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。

(2)TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。

采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

2 TCP传输

2.1 TCP协议的特点

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

(1) TCP 是面向连接的传输层协议。

(2) 每一条 TCP 连接只能有两个端点,每一条 TCP 连接只能是点对点的(一对一)。

(3) TCP 提供可靠的交付服务,保证传送的数据无差错、不丢失、不重复且有序。

(4) TCP 提供全双工通信,TCP 允许通信双方的应用进程在任何时候都能发送数据,为此 TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据。

发送缓存用来暂存以下数据:①应用程序传送给发送方 TCP 准备发送的数据;② TCP 已发送出但尚未收到的确认的数据。

接收缓存用来暂存以下数据:①按序到达的但尚未被接收应用程序读取的数据;②不按序到达的数据。

(5) TCP 是面向字节流的,虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。

2.2 TCP 报文段

TCP 传输的数据单元称为报文段。一个 TCP 报文段分为 TCP 首部和 TCP 数据两部分,整个 TCP 段作为 IP 数据报的数据部分封装在 IP 数据报中。

各字段的含义如下:

(1) 源端口和目的端口:各占2个字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。

(2) 序号:占4个字节。TCP是面向字节流的,所以TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。例如,一个报文段的序号字段值是200,携带的数据总共有100字节,表明这个报文段的数据的最后一个字节的序号是299,所以下一个报文段的数据序号应从300开始。

(3) 确认号:占4个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,表明前N-1的所有数据都已经正确接收。例如,B正确的收到了A发送过来的一个报文段,其序号字段是指501,而数据长度是200字节(序号501~700),表明B正确的收到了A发送的序号700之前的数据。因此B希望收到A的下一个数据序号是701,所以B在发送给A的确认报文段中应把确认号设置成701。

(4) 数据偏移量:占4位,这里不是IP数据报分片的那个数据偏移,而是表示首部长度,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。该字段若为15,则表明TCP首部达到最大长度60字节(以4字节为计算单位乘以15)。

(5) 保留:占6位,目前不使用,所以置为0。

(6) 紧急位 URG:当其值为1时,表明紧急指针字段有效。它会告诉系统此报文段中有紧急数据,应该尽快传送。但是URG需要和紧急指针配套使用,即从第一个字节到紧急指针所指字节就是紧急数据。

(7) 确认位 ACK:只有当ACK=1时,确认号字段才有效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。

(8) 推送位 PSH:TCP收到PSH=1的报文段,就尽快的交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。

(9) 复位位 RST:当RST=1时,表明TCP连接中出现了严重的错误,必须释放连接,然后再重新建立运输连接。

(10) 同步位 SYN:SYN=1表示这是一个连接请求或连接接收报文。当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。

(11) 终止位 FIN:用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,并要求释放传输连接。

(12) 窗口:占2个字节。它指出现在允许对方发送的数据量,接收方的数据缓存空间是有限的,所以使用窗口值作为接收方让发送方设置其发送窗口的依据,单位是字节。例如,设确认号是101,窗口字段是1000。这就表明,从101号开始,发送此报文段的一方还有接收1000字节数据(字节序号是101~1100)的接收缓存空间。

(13) 校验和:占2个字节。它的检验范围包括首部和数据部分。计算时要在TCP报文段前面加上12字节的伪首部。

(14) 紧急指针:占16位,指出在本报文段中紧急数据共有多少个字节。

(15) 选项:长度可变。TCP最初只规定了一种选项,即最大报文段长度(MSS)。

(16) 填充:这是为了使整个首部长度是4字节的整数倍。

主要需要理解以下几个字段:

源端口号和目标端口号:谁发的和发给谁(类似于哲学问题:你是谁?从哪里来?到哪里去?);

序号:为了解决乱序问题;

确认序号:发出去的包应该有确认,没有收到就应该重新发送,直到送达;

状态位:常见的有SYN、ACK、FIN,分别表示发起一个连接、确认和结束连接;

窗口大小:用于TCP流量控制,通信双方各

网站地图