TCP协议详解及实战解析【精心整理收藏】

TCP协议详解及实战解析【精心整理收藏】,第1张

流量控制针对的是发送方和接收方速度不匹配的问题(比如经典的fast sender and slow receiver问题,接收方缓存大小与发送速率不匹配),所提供一种速度匹配服务,遏制发送速率使接收方应用程序的读取速率与之相适应。

主要的方法有:

滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度。

在TCP发送缓存内的数据都可以分为4类:

已经发送但还未收到对端ACK和未发送但对端允许发送这2部分数据称之为发送窗口。

ACK报文包含2个重要信息:

如此发送方在接收到的ACK包含的这2个数据后就可以计算出还可以发送多少字节的数据给对方,假定当前发送方已发送到第x个字节,则可以发送的字节数就是y=m-(x-n)。

从这个例子里我们可以总结一下几点:

由接收方提供的窗口大小通常可以由接收进程控制,Socket API允许进程设置发送和接收缓存大大小。 接收缓存的大小是该连接上所能够通告的最大窗口大下

数据的大小一定要小于 MSS 。

并行的发送网络数据,接收方是否有强大的接受处理能力?

滑动窗口的大小决定了网速,所以想让网速快,得想办法让窗口大。

读取网络传来的数据需要进程用 read() 函数来读取数据。

但是网络的传输(处理)能力也是有限的,如果超过了承受范围,路由器会直接丢弃这些报文。

滑动窗口与缓冲区

缓冲区动态调节

发送缓冲区的大小可以根据待发送数据的大小来自动调节

那么接受缓冲区呢?——根据空闲内存的大小来决定。

TCP建立新连接的前提条件是 内核会为TCP分配新内存 。

让TCP使用更多的系统内存,可以提高 并发能力 。(看来并发需要更大的内存)

mbuf是个数据结构

mbuf的主要用途是保存在进程和网络接口间互相传递的用户数据。但mbuf也用于保存其他各种数据:源与目标地址、插口选项等等。

下面将要经常会的遇到的四种不同类型的mbuf,它们依据在成员mh_flags中填写的不同标志M_PKTHDR和M_EXT而不同。

1) 第一类mbuf的mh_flags等于0,mbuf只包含数据,在mbuf中有108字节的数据空间,指针mh_data指向这108字节缓存中的某个位置。

2) 第二类mbuf的mh_flags值是M_PKTHDR,它指示这是一个分组首部,描述一个分组数据的第一个mbuf。数据仍然保存在这个mbuf中,但是由于分组首部占用了8字节,只有100字节的数据可存储在这个mbuf中。

3) 当分组数据超过208字节的数据时,如果采用前面提到的1/2类mbuf,需要3个或更多的mbuf,这时我们就要使用一种称之为簇的mbuf,就是我们下面讲到的mbuf。第3类m b u f不包含分组首部(没有设置M_PKTHDR),但包含超过208字节的数据,这时用到一个叫“簇”的外部缓存(设置M_EXT)。在此mbuf中仍然为分组首部结构分配了空间,但没有用。在这个mbuf中,指针mh_data指向这个簇中的某个位置。

4) 第四类mbuf包含一个分组首部,包含超过208字节的数据,同时设置了标志M_PKTHDR和M_EXT。

以上就是关于TCP协议详解及实战解析【精心整理收藏】全部的内容,包括:TCP协议详解及实战解析【精心整理收藏】、tcp通信缓冲区满时win值为多少、TCP流量控制等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9379483.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存