在TCP/IP报文中,固定头部下边就是 "选项"部分。
(1)TCP头部的选项部分是TCP为了适应复杂的网络环境和更好的服务应用层而进行设计的
(2)大多数的TCP选项部分出现在TCP连接建立阶段
最大报文传输段(Maximum Segment Size — MSS ):表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。
(1)MSS只出现在SYN数据包中。
(2)对于以太网MSS可以达到 1460byte.
窗口扩大选项(window scaling)
选择确认选项(Selective Acknowledgements — SACK)
TCP有十种机制来保证 传输的效率和可靠性。10种机制如下:
1.确认应答 (可靠机制)
2.超时重传 (可靠机制)
3.连接管理 (可靠机制)
-----------------------
4.滑动窗口 (效率机制)
5.流量控制 (效率机制)
6.拥塞控制 (效率机制)
7.延时应答 (效率机制)
8.捎带应答 (效率机制)
-----------------------
9.面向字节流(粘包处理)
10.特殊情况 (异常处理)
在 TCP 协议中,发送方发送数据后,接收方需要对数据进行确认应答(ACK acknowledge的缩写),以确保数据已经被正确接收。
如果发送方没有收到确认应答,就会重新发送数据,直到接收方发送确认应答为止。
这样可以保证数据的可靠传输,避免数据丢失或损坏。
TCP 进行可靠传输,最主要的就是靠这个确认应答机制。
根据上述的TCP确认应答得知:
TCP 是每发送一个数据,都要进行一次确认应答。当上一个数据包受到了应答,再发送下一个。这个模式就有点像面对面聊天,你一句我一句,这种方式的缺点就是效率极低。
为了解决这个问题, TCP 引入了"窗口"这个概念。
“窗口”,它是操作系统开辟的一个缓存空间.
TCP 头里有一个字段叫 Window(win),也就是窗口大小。这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。
于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。
所以通常窗口的大小是由接收方的窗口来决定的。发送方发送的数据大小不能超过接收方的窗口大小,否则接收方就无法正常接收到数据。
TCP滑动窗口是TCP协议中的一种流量控制机制,用于调节发送方和接收方之间的数据传输速率,以避免网络拥塞和提高传输效率。
滑动窗口机制允许发送方在不等待确认应答的情况下连续发送多个数据段
发送方维护一个发送窗口,表示可以连续发送的数据段的范围。发送窗口的大小取决于网络的情况和接收方的能力。
发送窗口的大小会在和接收方三次握手时,根据对方的通告给自己的对方的窗口大小而生成发送窗口大小
接收方维护一个接收窗口,表示可以接收的数据段的范围。接收窗口的大小取决于接收方的缓冲区大小和处理能力。
随着数据的发送和接收,发送窗口和接收窗口会不断滑动。
(1)当接收方成功接收到数据后,会将窗口向前滑动,通知发送方可以发送更多的数据。
(2)当发送方收到接收方的确认后,也会将发送窗口向前滑动
接收方通过调整接收窗口的大小来控制发送方的发送速率。
(1)如果接收方的缓冲区已满或者处理能力有限,可以减小接收窗口的大小,通知发送方减缓发送速率。
(2)如果接收方的缓冲区有足够的空间,可以增大接收窗口的大小,提高发送速率。
(1)滑动窗口的本质就是: 允许发送方在不等待确认应答的情况下连续发送多个数据段,从而提高了网络的利用率.
(2)滑动窗口具体的动作: 批量发送,批量等待,把多份等待时间,合并成一份
讲了这么多理论,使用示意图来展示一下滑动窗口,更便于理解
发送方和接收方一应一答,可靠性确实能得到保证,但其实大部分的时间都消耗在等待ACK上了.
引入了滑动窗口,就可以连续发送窗口大小的多个数据。然后花费等待一个ack的时间来等待多个ACK的回复。
H-5表示要发送的所有数据。这里的窗口大小只是举例。真正的窗口大小远不止如此。
s端收到c端的数据后,不用回复3次,可以回复一次累计应答。ack=4,说明seq=3以前的数据都收到了。