TCP详解笔记
TCP协议详解,重传机制,RTT算法,滑动窗口,拥塞控制等。
0. 总述
TCP发展到今天已经是非常成熟的协议了,作为传输层(Tranport Layer)协议,可供跨任意网络可靠地传输数据。以TCP端口的形式为应用程序提供传输层寻址(transport-layer addressing),并用这些端口在机器之间建立连接。一旦建立了连接,就可以在两个设备之间双向传递数据。应用程序可以将数据作为简单的字节流发送到TCP端口,而TCP协议负责将数据打包为IP报文发送。接收设备的TCP实现将过程逆转,将最初发送的数据流传递给应用程序。
TCP包含很多机制,以确保数据的可靠性,一致性和及时性。这其中关键是滑动窗口,该机制要求每个设备追踪已发送的数据(即要求收到ACK),并确认接收到的数据(收到数据后会发送ACK)。未确认的数据会自动重传,并且可以根据设备和连接的需要调整系统的参数。该系统还提供了设备之间的缓冲和流控制功能,以处理不均匀的数据传输速率和其他问题。
TCP可以最大程度地满足几乎所有需要面向连接(connection-oriented)的可靠数据传递需要。这是TCP的主要目标,因为这意味着高层应用程序不必单独提供这些通用功能。 TCP是最广泛使用的TCP / IP传输协议,大多数应用程序都采用TCP。
概括一下TCP的主要特征:我们可以说它是面向连接的,双向的,多连接的,可靠的,需要确认的,面向流和流管理的。
1. TCP究竟干了啥?
1.1. TCP能干啥?
寻址/多路复用: 像UDP一样,TCP的一项重要工作是多路复用从不同进程接收到的数据,以便可以使用基础网络层协议将其发送出去。
连接的建立,管理和终止:设备可以遵循TCP标准流程来建立可以传输数据的TCP连接。一旦连接建立,TCP就会开始管理该连接以及处理问题。当设备启动关闭TCP连接后,会有一个特殊的TCP进程将此连接中止。
数据处理和打包:TCP定义了一种机制,应用程序可以通过该机制从更高层向其发送数据。然后,将这些数据打包成消息,以发送到目标TCP软件。目标软件将数据打包,然后将其提供给目标计算机上的应用程序。
数据传输:从概念上讲,传输设备上的TCP实现负责将打包的数据传输到另一设备上的TCP进程。遵循分层原理,这是通过使发送机上的TCP软件将数据包传递到基础网络层协议(IP协议)来完成的。
提供可靠性和传输质量服务: 使用TCP协议发送数据是“可靠的”。这意味着,使用TCP不必担心数据没有被发送,数据没有抵达,或以错误的顺序到达。这也意味着避免了直接使用IP协议发送数据可能会出现的其他常见问题。
流控制和拥塞避免:TCP控制和管理两个设备之间的数据流,以及处理通信期间可能遇到的拥塞的。
1.2. TCP不能干啥?
指定应用用途: TCP没有具体描述应用程序该如何使用TCP。
提供安全性:TCP不提供任何机制来确保其传输的数据的真实性或私密性。如果需要这些,则必须使用其他某种方式来完成,例如IPSec。
维护消息边界:TCP将数据作为连续流而不是离散消息发送。应该由应用程序决定一条消息的结束位置和下一条消息的开始位置。
保证通信:TCP会检测未确认的传输,并在需要时重新发送。但是,如果出现某种问题导致无法可靠通信,则所有TCP可以做的就是“继续尝试”。它无法做出任何保证,因为有太多事情无法控制。同样,它可以尝试管理数据流,但不能解决所有问题。
2. 重传机制
3. RTT算法
4. 滑动窗口
5. 拥塞控制
6. 面试常问问题
6.1. tcp的可靠性如何保证
分块传送:数据被分割成最合适的数据块(UDP的数据报长度不变)
等待确认:通过定时器等待接收端发送确认请求,收不到确认则重发
确认回复:收到确认后发送确认回复(不是立即发送,通常推迟几分之一秒)
数据校验:保持首部和数据的校验和,检测数据传输过程有无变化
乱序排序:接收端能重排序数据,以正确的顺序交给应用端
重复丢弃:接收端能丢弃重复的数据包
流量缓冲:两端有固定大小的缓冲区(滑动窗口),防止速度不匹配丢数据
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!