既然我刚才提到了协议层,那么现在是讨论网络究竟如何工作和一些 关于 SOCK_DGRAM 包是如何建立的例子。当然,你也可以跳过这一段,如果你认为已经熟悉的话。
现在是学习数据封装(Data Encapsulation) 的时候了!它非常非常重 要。它重要性重要到你在网络课程学习中无论如何也得也得掌握它。主要 的内容是:一个包,先是被第一个协议(在这里是TFTP )在它的报头(也许 是报尾)包装(“封装”),然后,整个数据(包括 TFTP 头)被另外一个协议 (在这里是 UDP )封装,然后下一个(IP ),一直重复下去,直到硬件(物理) 层( 这里是以太网 )。
当另外一台机器接收到包,硬件先剥去以太网头,内核剥去IP和UDP 头,TFTP程序再剥去TFTP头,最后得到数据。
现在我们终于讲到声名狼藉的网络分层模型 (Layered Network Model)。这种网络模型在描述网络系统上相对其它模型有很多优点。例如, 你可以写一个套接字程序而不用关心数据的物理传输(串行口,以太网,连 接单元接口 (AUI) 还是其它介质),因为底层的程序会为你处理它们。实际 的网络硬件和拓扑对于程序员来说是透明的。
不说其它废话了,我现在列出整个层次模型。如果你要参加网络考试,可一定要记住:
l表示层
l会话层
l传输层
l网路层
l数据链路层
l物理层
物理层是硬件(串口,以太网等等)。应用层是和硬件层相隔最远的--它 是用户和网络交互的地方。
这个模型如此通用,如果你想,你可以把它作为维护指南。把它对应到 Unix,结果是:
l应用层(telnet,ftp,etc.)
l主机到主机传输层(TCP,UDP)
l网际层(IP路由)
l网路访问层(以太网,wi-fi,以及任何)
现在,你可能看到这些层次如何协调来封装原始的数据了。
看看建立一个简单的数据包有多少工作?哎呀,你将不得不使用 "cat" 来建立数据包头!这仅仅是个玩笑。对于流式套接字你要作的是 send() 发 送数据。对于数据报式套接字,你按照你选择的方式封装数据然后使用 sendto()。内核将为你建立传输层和Internet 层,硬件完成网络访问层。 这就是现代科技。
现在结束我们的网络理论速成班。哦,忘记告诉你关于路由的事情了。 但是我不准备谈它,如果你真的关心,那么参考 IP RFC。
分享到:
相关推荐
Beej’s Guide to Network Programming
C程序员套接字编程指南。 它提供了同时支持IPv6和IPv4的简单客户端和服务器的完整示例。
Beej's Guide to Network Programming Using Internet Sockets 101
Beej's Guide to Network Programming Using Internet Sockets 大师级人物的杰作 不用多说,只有49页,英文版,读完有种豁然开朗的感觉. 经典中的经典
网络编程经典书,学C++的必看,英文原版
Beej’s Guide to Network Programming Using Internet Sockets,希望对大家有帮助
beej-s-guide-to-network-programming-Chinese-zh.pdf
Beej's Guide to Network Programming has been one of the top socket programming guides on the Internet for the last 15 years, and it's now for the first time available as a lovingly bound paperback ...
Beej’s Guide to Network Programming Using Internet Sockets. 適用於Linux環境的網路程式開發教學文件
比网络编程>更适合初学者的linux网络编程书籍! 该书同样名气也很大!
Beej's Guide to Network Programming Using Internet Sockets For more info please refer to http://beej.us/guide/bgnet/
Beej新版的网络编程教程。增加了对ip v6的支持,层次更加合理。所有代码我都在Ubuntu下面测试过,没有问题。