深入理解计算机系统(第3版) 第十一章 网络编程

1.客户端--服务器编程模型

采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成。服务器管理某种资源,并通过操作这种资源来为它的客户端提供某种服务。

客户端--服务器模型中的基本操作是事务(transacton),一个客户端--服务器事务由以下四个部分组成:

-->1)当一个客户端需要服务时,它向服务器发送请求,发起一个事务。

-->2)服务器接收到请求后,解释它,并以适当的方式操作它的资源。

-->3)服务器给客户端发送一个响应,并等待下一个请求。

-->4)客户端收到响应并处理它。

 

2.网络

客户端和服务器通常运行在不同的主机上,并且通过计算机的硬件和软件资源来通信。

对主机而言,网络只是又一种I/O设备,是数据源和数据接收方。

一个插到I/O总线扩展槽的适配器提供了到网络的物理接口,从网络上接收到的数据从适配器经过I/O和内存总线复制到内存,通常是通过DMA传送。相似地,数据也能从内存复制到网络。

物理上而言,网络是一个按照地理远近组成的层次系统。最底层是LAN(local area network,局域网),到目前为止,最流行的局域网技术是以太网(ethernet)(适应力极强,从3Mb/S演变到10Gb/S)。

一个以太网段(ethernet segment)包括一些电缆(通常是双绞线)和一个叫做集线器的小盒子,如下图,

使用一些电缆和叫做网桥(bridge)的小盒子,多个以太网段可以连接成较大的局域网,称为桥接以太网,如下图,


在层次的更高级别中,多个不兼容的局域网可以通过叫做路由器(router)的特殊计算机连接起来,组成一个internet(互联网络),如下图,

互联网至关重要的特性是,它能由采用完全不同和不兼容技术的各种局域网和广域网组成,如下图,

 

3.因特网连接

因特网客户端和服务器通过在连接上发送和接收字节流来通信。从连接一对进程的意义而言,连接是点对点的,从数据可以同时双向流动的角度来说,它是全双工的。

一个套接字是连接的一个端点。每个套接字都有相应的套接字地址,是由一个因特网的地址和一个16位的整数端口组成的,用“地址:端口”来表示。

一个连接是由它两端的套接字地址唯一确定的。这对套接字地址叫做套接字对,由元组来表示:(cliaddr:cliport,  servaddr:servport),如下图,

从Linux内核的角度来看,一个套接字就是通信的一个端点;从Linux程序的角度来看,套接字就是一个有相应描述符的打开文件。

客户端和服务器使用socket函数来创建一个套接字描述符(socket descriptor);

客户端通过调用connect函数来建立和服务器的连接;

剩下的套接字函数——bind、listen和accept,服务器用它们来和客户端建立连接。

 

第十一章小结

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值