问个关于网络数据的流向问题
上网的方式有很多种,宽带,光纤,wifi等等,每种都是根据各自的协议来实现,我想问,我应用层的一个应用程序向外部发送数据,send或者sendto。数据通过tcp/ip协议族之后,怎么去选择或者说是决定通过前面所说的三种方式来发送数据呢???
加入当前我是宽带上网,用pppoe拨号,那么根据我的了解数据应该是经过tcp/ip协议后到ppp协议,然后pppoe再获取数据包然后加上pppoe头再发送出去,那么这个选择过程是怎么去选择的呢???为什么它一定是选择ppp不是选择其他呢??这个选择的过程是在哪选择的??
最好能指出代码段,或者大概说说看什么资料.......
先谢谢了~~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
又了解了一下这个ppp应该是在链路层了,链路层可以有多种协议,ppp是其中的一种。
那么这个问题就换成,数据怎么从链路层上层去选择使用哪个链路层呢????
那不得看你发出去的接口时什么类型的么
1.应用层的数据应该从哪个接口出去是由路由表决定的,这个很好理解。
2.这个接口选择哪种方式上行是在你创建这个接口的时候就决定了的。
同样是PPPoE拨号,你在创建这条PPPoE连接的时候,可以使用LAN上行,ADSL上行或pon上行。
你可以看一下pppd这个进程
pppd -c ppp0 -i atm0 -u pub -p *** -f 0
pppoe拨号建立时会创建与eth0相似的ppp0接口。应用层数据发送时就如angeltears兄所说由路由表决定了发送接口,然后调用dev_queue_xmit发送数据, dev_queue_xmit 最后调用接口设备私有的dev->hard_start_xmit。
对应于ppp就是 ppp_start_xmit ,代码在 drivers/net/ppp_generic.c中