原文:https://beej.us/guide/bgnet/html/#lowlevel
2.2 网络理论
既然我刚才提到了协议层,那么现在是讨论网络究竟如何工作和一些 关于 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。