TCP/IP通信案例:访问Internet上的Web服务器
Web客户端和服务器之间使用HTTP协议通信。
HTTP代理服务器的工作原理
在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。一个HTTP请求可能被多个代理服务器转发,后面的服务器称为前面服务器上的上游服务器。代理服务器按照其使用方式和作用,分为正向代理服务器,反向代理服务器和透明代理服务器。
正向代理:要求客户端自己设置代理服务器的地址。客户的每次请求都会直接发送到该代理服务器,并由代理服务器来请求目标资源。
反向代理:设置在服务器端,因而客户端无须进行任何设置。反向代理是指用代理服务器来接受Internet上的连接请求,然后将请求发送给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。
透明代理:设置在网关上,用户访问Internet的数据报必然都经过网关。透明代理可以看作正向代理的一种特殊情况。
访问DNS服务器
一般来说,通过域名来访问Internet上的某台主机时,需要使用DNS服务来获取该主机的IP地址。
通过读取/etc/resolv.conf文件获得DNS服务器的IP地址,然后把控制权传递给内核中的UDP模块。UDP模块将DNS查询报文封装成UDP数据报,同时把源端口号和目标端口号加入UDP数据报头部,然后UDP模块调用IP服务,IP模块将UDP数据报封装成IP数据报,并把源端IP地址和DNS服务器的IP地址加入IP数据报头部。接下来查询。
本地名称查询
通过主机名访问本地局域网上的机器时,则可通过本地的静态文件来获得该机器的IP地址。Linux将目标主机名及其对应的IP地址存储在/etc/hosts配置文件中。当需要查询某个主机名对应的IP地址时,程序将首要检查这个文件。
HTTP通信
HTTP请求:
第一行是请求行,其中"GET"是请求方法,表示客户端以只读的方式来申请资源。
常见的HTTP请求方法有9种:
HTTP应答:
第一行是状态行。"HTTP/1.0"是服务器使用的HTTP协议的版本号。通常,服务器需要使用和客户端相同的HTTP协议版本。“200 OK"是状态码和状态信息。
常见的状态信息及其含义:
第2~7行是HTTP应答的头部字段。其表示方法与HTTP请求中的头部字段相同。