网络编程1
深入理解计算机系统
第十一章网络编程(一)
网络基础
硬件上的连接方式
网络一个按照地理远近组成的层次系统
最底层是LAN,最流行的局域网技术是以太网。电缆,双绞线,常常一段点接到主机的适配器,另一端连接到集线器上面。
多个网段使用网桥可以连接形成较大的局域网,网桥可以通过主动学习哪个主机可以通过哪个端口到达,不会将所有的帧都复制到网线上,从而节省服务器带宽。
多个不兼容的局域网可以通过路由器连接起来形成一个互联网络。
网络上的协议
通过协议实现在不同局域网络上由于不兼容的技术产生的差异
全球IP因特网
因特网可以看做世界范围内的主机集合
- 主机集合被映射为一组32位的IP地址
- IP被映射为一组因特网域名标识符
- 因特网主机上的进程通过连接和其他任务因特网上的主机进程通信
客户端-服务器编程模型
客户端和服务器所指的应该是进程
- 客户端和服务器模型的基本失误操作室事务 transaction
struct in_addr{ uint32_t s_addr; }
ip在IP地址结构中的存放地址总是以大端法存放,可以通过Unix函数进行转换,在某个主机中的存放方式不一定是大端法 所以需要通过函数变换
# include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint32_t htons(uint16_t hostshort);
返回值:按照网络字节顺序
# include <arpa/inet.h>
uint32_t ntonl(uint32_t hostlong);
uint32_t ntons(uint16_t hostshort);
返回值:按照注解字节顺序
因特网域名
DNS 域名和 IP地址的映射
因特网链接
客户端发起一个链接请求时,客户端会由内含分配一个套接字地址中的端口,称为临时端口。服务器套接字中的端口是知名端口。
- 如何理解套接字 套接字可以理解为一个文件描述符。
- 套接字对
(cliaddr:cliport, servaddr:servport)
套接字接口
套接字接口是一组函数,和Unix IO函数结合起来来创建网络应用。
主机和服务的转换
Web内容
- Web服务器通过两种不同的方式向客户端提供内容
- 服务静态内容 直接使用磁盘文件的内容返回给客户端
- 服务动态内容
运行动态内容并且获得结果
获取服务的某个规则:
http://bluefish.ics.cs.cmu.edu:8080/cgi-bin/adder?15000&213