关于socket的理解
2010-04-20 23:33
246 查看
转自linux内核中文邮件列表,很精辟...
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了。
|
甚至可以说,一定程度上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了。
相关文章推荐
- 关于socket tcp/ip的理解
- 关于socket通信的理解,socket连接通过IP+端口号的方式,那么如果两个服务器端的应用在同一台机器上,并且位于同一个tomcat容器下,那么岂不是两个服务器都收到了客户端发送的信息
- 说说关于我这两天对socket的理解
- 关于tcp协议断开连接以及在socket编程时候连接的一些理解
- 关于对socket的理解
- Java关于个人对于Socket的理解,Socket多线程批量上传文件,适合新手
- 关于linux下的TCP 的socket server和client,我的理解
- 关于Socket的编程以及信号量的进一步理解
- 关于TCP、HTTP、Socket的自我理解
- 关于C#里面socket编程的一点理解
- 关于socket的一些个人理解
- 关于Socket的编程以及信号量的进一步理解
- 关于socket的套接字中输入输出流的理解
- 关于linux socket 编程 端口复用的理解
- 关于socket的认识理解
- 关于Socket理解
- 关于socket 绑定过程中对地址初始化使用的htonl函数的一些理解(转载)
- 关于C#里面socket编程的一点理解
- 关于linux socket 编程 端口复用的理解
- 关于SocketAsyncEventArgs的一些理解