网络协议栈知识点整理

NSA-001

CH1

以太网MTU为1500字节,所以报文长度一般选择在1472以下(UDP 8字节报文头;TCP 20字节报文头;IP 20字节报文头)

T C P / I P插口的类型总是D T Y P E _ S O C K E

1) 我们的进程调用s o c k e t,最后分配了最小未用的描述符(在我们的例子中是3 )。在后
面,所有针对此s o c k e t的系统调用都要用这个描述符。
2) 以下内核数据结构是一起被分配和链接起来的:一个D T Y P E _ S O C K E T类型f i l e结构、
一个s o c k e t结构和一个i n p c b结构。这些结构的很多初始化过程我们并没有说明: f i l e结
构的读写标志(因为调用s o c k e t总是返回一个可读或可写的描述符 );默认的输入和输出缓
存大小被设置在s o c k e t结构中,等等。
3) 我们显示了标准输入、输出和标准错误处理的非s o c k e t描述符的目的是为了说明所有
描述符最后都对应一个f i l e结构,虽然s o c k e t描述符和其他描述符之间有所不同。

U D P检验和计算后存储在U D P首部中。注意,这要求遍历存储在m b u f链表中的所有1 5 0字
节的数据。这样,内核要对这1 5 0字节的用户数据做两次遍历:一次是把用户缓存中的数据复
制到内核中的m b u f中,而现在是计算U D P检验和。对整个数据的额外遍历会降低协议的性能,
在后续章节中我们会介绍另一种可选的实现技术,它可以避免不必要的遍历。

我们在前面说明了在结构m b u f中前两个成员的目的:指针 m _ n e x t把m b u f链接成一个
m b u f链表,而指针m _ n e x t p k t把m b u f链表链接成一个m b u f队列。

有些操作既提供了宏也提供了函数。宏版本的名称是以M开头的大写字母名称,而函数是
以m _开始的小写字母名称。两者的区别是一种典型的时间-空间互换。宏版本在每个被用到的
地方都被C预处理器展开(要求更多的代码空间),但是它在执行时更快,因为它不需要执行函
数调用(对于有些体系结构,这是费时的)。而对于函数版本,它在每个被调用的地方变成了一
些指令(参数压栈,调用函数等),要求较少的代码空间,但会花费更多的执行时间。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇