深入理解计算机系统

第十一章网络编程(一)

网络基础

硬件上的连接方式

网络一个按照地理远近组成的层次系统
最底层是LAN,最流行的局域网技术是以太网。电缆,双绞线,常常一段点接到主机的适配器,另一端连接到集线器上面。
多个网段使用网桥可以连接形成较大的局域网,网桥可以通过主动学习哪个主机可以通过哪个端口到达,不会将所有的帧都复制到网线上,从而节省服务器带宽。 屏幕快照 2019-04-12 08.35.41.png 多个不兼容的局域网可以通过路由器连接起来形成一个互联网络。

网络上的协议

通过协议实现在不同局域网络上由于不兼容的技术产生的差异

全球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函数结合起来来创建网络应用。
    image.png

85A5E323-21ED-405D-B27B-19C920219289.png

主机和服务的转换

可重入函数

Web内容

  • Web服务器通过两种不同的方式向客户端提供内容
    • 服务静态内容 直接使用磁盘文件的内容返回给客户端
    • 服务动态内容 运行动态内容并且获得结果

      获取服务的某个规则:

      http://bluefish.ics.cs.cmu.edu:8080/cgi-bin/adder?15000&213