CSAPP网络编程
2019-01-26 本文已影响0人
王加冰
客户端服务端模型:每个网络应用都是基于客户端-服务端模型的。采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理着某种资源,并且通过这种资源来为它的客户端提供某种服务。
网络:局域网的大致层次分为三个,集线器、交换机、路由器。互联网最重要的特性是能由采用完全不同和不兼容技术的局域网和广域网组成。通过运行在主机和路由器上的协议软件来消除不同网络之间的差异。
下图展示了主机和路由器如何使用互联网协议在不兼容的局域网间传送数据的一个示例。
1)运行在主机 A 上的客户端进行一个系统调用,从客户端的虚拟地址空间复制数据到内核缓冲区
2)主机 A 上的协议软件通过在数据前附加互联网包头和 LAN1 帧头,创建一个 LAN1 的帧。互联网络包头寻址到互联网络主机 B。LAN1 帧头寻址到路由器。然后它传送到此帧的到适配器。注意,LAN1 帧的有效载荷是一个互联网络包,而互联网络包的有效载荷是实际的用户数据。这种封装是基本的网络互联方法之一
3)LAN1 适配器复制到该帧到网络上
4)当此帧到达路由器时,路由器的 LAN1 适配器从电缆上读取它,并把它传送到协议软件
5)路由器从互联网络包头中提取出目的互联网络地址,并用它作为路由表的索引,确定向哪里转发这个包,在本例中是 LAN2 。路由器剥落旧的 LAN1 的帧头,加上寻址到主机 B 的新的 LAN2 帧头,并把得到的帧传送到适配器
6)路由器 LAN2 适配器复制该帧到网络上
7)当此帧到达主机 B 时,它的适配器从电缆上读到此帧,并将它传送到协议软件
8)最后,主机 B 上的协议软件剥落包头和帧头,当服务器进行一个读取这些数据的系统调用时,协议软件最终将得到的数据复制到服务器的虚拟地址空间。