自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zhangskd的专栏

鱼跃此时海,花开彼岸天

  • 博客(12)
  • 收藏
  • 关注

原创 胡思乱想

我们知道机器CPU的温度过高时,机器就会运行缓慢。而我惊奇的发现,当我思维激荡时,脑袋也会开始升温,接着思维开始紊乱,必须要冷静下才能继续正常思考。 我们知道机器的虚拟存储器VM是按需调度的,当CPU需要某些虚拟页时,VM会把它们调入内存,当CPU不再需要它们的时候,VM又会把它们调出内存。这和我们的记忆何其相似?我们平时学习新知识的时候,相当于创建了若干虚拟页。当我们要用到相

2013-08-14 10:51:51 1689 1

原创 TCP的核心系列 — SACK和DSACK的实现(七)

我们发送重传包时,重传包也可能丢失,如果没有检查重传包是否丢失的机制,那么只能依靠超时来恢复了。37版本把检查重传包是否丢失的部分独立出来,这就是tcp_mark_lost_retrans()。在处理SACK块的同时,会检测是否有出现乱序,如果有乱序,那么会计算乱序的长度并更新。本文主要内容:检查重传包是否丢失,以及乱序的检测和更新。

2013-08-12 16:33:34 4540 2

原创 TCP的核心系列 — SACK和DSACK的实现(六)

上篇文章中我们主要说明如何skip到一个SACK块对应的开始段,如何walk这个SACK块包含的段,而没有涉及到如何标志一个段的记分牌。37版本把给一个段打标志的内容独立出来,这就是tcp_sacktag_one()。本文主要内容:tcp_sacktag_one(),给一个段打上标志。

2013-08-12 16:31:21 3906

原创 TCP的核心系列 — SACK和DSACK的实现(五)

18版本对于每个SACK块,都是从重传队列头开始遍历。37版本则可以选择性的遍历重传队列的某一部分,忽略SACK块间的间隙、或者已经cache过的部分。这主要是通过tcp_sacktag_skip()和tcp_sacktag_walk()完成的。tcp_sacktag_skip()可以直接找到包含某个序号的skb,通常用于定位SACK块的开头。tcp_sacktag_walk()则遍历两个序号之间的skb,通常用于遍历一个SACK块。

2013-08-12 16:29:04 3993

原创 TCP的核心系列 — SACK和DSACK的实现(四)

和18版本不同,37版本把DSACK的检测部分独立出来,可读性更好。37版本在DSACK的处理中也做了一些优化,对DSACK的两种情况分别进行处理。本文主要内容:DSACK的检测、DSACK的处理。

2013-08-12 16:21:43 5846

原创 TCP的核心系列 — SACK和DSACK的实现(三)

不论是18版,还是37版,一开始都会从TCP的控制块中取出SACK选项的起始地址。SACK选项的起始地址是保存在tcp_skb_cb结构的sacked项中的,那么这是在什么时候做的呢?SACK块并不是总是合法的,非法的SACK块可能会引起处理错误,所以还需要进行SACK块的合法性检查。本文主要内容:TCP首部中SACK选项的解析和地址的获取,SACK块的合法性检查。

2013-08-12 16:20:30 7055 1

原创 TCP的核心系列 — SACK和DSACK的实现(二)

37版SACK和DSACK的实现。和18版本相比,37版本的SACK和DSACK的实现做了很多改进,最明显的就是需要遍历的次数少了,减少了CPU的消耗。37版的性能提升了,代码有大幅度的改动,逻辑也更加复杂了。本文主要内容:37版tcp_sacktag_write_queue()的实现,也即37版SACK和DSACK的实现。

2013-08-12 16:18:13 4982 2

原创 TCP的核心系列 — SACK和DSACK的实现(一)

TCP的实现中比较重要的一部分就是:SACK和DSACK的实现。SACK和DSACK的处理部分由Ilpo Järvinen ([email protected]) 维护。为了便于理解,笔者先后分析了18版、37版的具体实现。相对而言,18版本的逻辑清晰,但效率较低;37版本的逻辑复杂,但效率较高。

2013-08-12 16:16:35 11136 1

原创 TCP的核心系列 — 重传队列的更新和时延的采样(二)

在tcp_clean_rtx_queue()中,并非对每个ACK都进行时延采样。是否进行时延采样,跟这个ACK是否为重复的ACK、这个ACK是否确认了重传包,以及是否使用时间戳选项都有关系。本文主要内容:tcp_clean_rtx_queue()的一些细节,时延采样的条件。

2013-08-12 16:11:31 4842

原创 TCP的核心系列 — 重传队列的更新和时延的采样(一)

重传队列实际上就是发送队列(sk->sk_write_queue),保存着发送且未确认的数据段。当有新的数据段被确认时,需要把这些段从重传队列中删除,同时更新一些变量,包括packets_out、sacked_out、lost_out、retrans_out等。对于非重复的ACK,会进行RTT采样,用于更新srtt和rto等时延信息。本文主要内容:tcp_clean_rtx_queue()的实现。

2013-08-12 16:05:55 5715

原创 TCP的核心系列 — ACK的处理(二)

本文主要内容:tcp_ack()中的一些细节,如发送窗口的更新、持续定时器等。

2013-08-12 16:04:15 9420

原创 TCP的核心系列 — ACK的处理(一)

TCP发送数据包后,会收到对端的ACK。通过处理ACK,TCP可以进行拥塞控制和流控制,所以ACK的处理是TCP的一个重要内容。tcp_ack()用于处理接收到的ACK。本文主要内容:TCP接收ACK处理,tcp_ack()的实现。

2013-08-12 15:58:01 16126 7

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除