您的位置:首页 > 其它

关于socket的理解

2010-04-20 23:33 246 查看
转自linux内核中文邮件列表,很精辟...

zhigang gong

to Lv, 中文内核邮件列表
Socket layer 只是Interface, 而不是协议栈本身。这也就可以解释为什么大部分的协议相关的书不会深入的去讲socket layer,
甚至可以说,一定程度上socket layer是协议无关的。不过同意你的观点,理解socket layer能够有助于看懂下层协议栈的实现,
至少对于data path怎么流动的会比较清晰。如果只关心外部接口,那么看完socket layer也大概够用。

to yanan,

我讲讲自己对于socket的理解,一般来说是一个三元组(three tuple)确定一个socket,(dst_ip,dst_port,PROTO)。
五元组可以确定一个socket pair (src_ip, src_port, dst_ip, dst_port, PROTO).
从输入的角度来看socket的含义比较好理解。当我们创建了一个socket,并且bind了一个端口号以后,就会确定了一个socket (dst_ip就是本地IP,dst_port就是绑定的端口号,PROTO是UDP或者TCP),并且会被socket layer记录下来,会在对应的传输层UDP或者TCP注册相应的PCB (协议控制块)。此后当有数据从底层送上来进入传输层,在传输层会检查PCB table,看看是否有匹配的socket,假若有,就会把数据route到对应的socket buffer中去,并最终copy to user buffer.对于TCP协议,因为是有连接的协议,会稍微复杂一点,会在建立连接的时候产生一个socket pair 把src_ip和src_port都记录下来,以后也都是会先查有没有匹配的socket pair, 如果没有匹配的才会再来检查socket。这一点从tcp server的编程中反应出来,先创建的socket会被用于accept(),这个socket是三元组, 如果有传入的连接会由accept()返回一个新的socket,这个socket其实就对应于一个socket pair了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: