csapp 第十一章 网络编程
客户端—服务器编程模型
一个应用是由一个服务器进程和一个或者多个客户端进程组成。一对多的关系。
这个模型的基本操作的基本模型就是:
举个例子,当我们在去b站看视频,我们看到了一个比较吸引人的封面,想点进去一探究竟。我们点击视频,然后屏幕上播放视频这个过程就是我们客户端–服务器模型。
1、客户端发送请求。就是我们点击视频,准备播放视频的请求。
2、服务器处理请求。服务器(一个程序)接收我们要播放视频的请求,然后从库中取出这个视频。
3、服务器发送响应。服务器把这个视频发送给我们。
4、客户端处理响应。我们的电脑/手机的软件,收到这个视频,然后播放在屏幕上。
一台主机上可以同时运行许多不同的客户端和服务器,而且一个客户端和服务器的事务可以在同一台或者不同的主机上。
网络
从物理上来说,网络是一个按照远近组成的层次系统。最底层是LAN(局域网),范围只有一栋楼或者校园内。目前,最流行的局域网技术是以太网
一个以太网段由一些电缆和一个叫集线器的小盒子组成
使用电缆和网桥的小盒子,可以组成一个较大的局域网,我们称之为桥接以太网。
多个不兼容的局域网可以通过路由器进行连接,组成一个internet(互联网)。路由器可以用来由各种局域网和广域网构建互联网络。
互联网的一个重要的特性就是能由采用完全不同和不兼容技术的各种局域网和广域网组成 。
互联网兼容如此不同的各种局域网/广域网,是通过协议软件来实现的。
全球IP因特网
在全球因特网下,每个主机运行实现的都是TCP/IP协议(transmission control protocol/internet protocol,暨传输控住协议/互联网网络协议)
- IP地址结构中存放的地址总是以(大端法)网络字节顺序存放的,我们的主机的字节序为小端法。
连接
因特网客户端和服务器通过在连接上发送和接收字节流来通信,连接是点对点的。这里我们就需要知道一个东西。
套接字 是连接的一个端点。每个套接字都有相应的套接字地址,由一个因特网地址和一个16位的整数端口组成,暨地址+端口。
像这样我们的手机的app与b站的服务器的就对接上了。
- 我们的客户端和服务器端使用socket函数来一个套接字描述符
- 客户端通过connect函数来建立和服务器的连接。
- 使用bind函数来告诉内核将addr中的服务器套接字地址和套接字描述符sockfd联系起来
- 服务器用listen函数来对端口进行监听,进而接受来自客户端的连接请求。
- 服务器通过调用accept函数来等待来自客户端的连接请求。
web服务器
web客户端和服务器之间的交互作用的是一个基于文本的应用级协议—–http(超文本协议)
- URL就是我们俗称的网址。