Linux高性能服务器编程学习笔记——TCP/IP通信案例:访问Internet上的Web服务器

实例总图

Web客户端和服务器之间使用HTTP协议通信。HTTP协议是一种应用层协议,它默认使用的传输层协议是TCP协议。
我们按照如下方法来部署:在Kongming20上运行wget客户端程序,在ernest-laptop上运行squid代理服务器程序。客户端通过代理服务器的中转,获取Internet上的主机www.baidu.com的文档首页index.html,如图所示。
在这里插入图片描述
在HTTP通信链上,客户端和目标服务器之间通常存在某些中转代理服务器,它们提供对目标资源的中转访问。一个http请求可能被多个代理服务器转发,后面的服务器称为前面服务器的上游服务器。代理服务器按照其使用方式和作用,分为正向代理服务器、反向代理服务器和透明代理服务器

  1. 正向代理要求客户端自己设置代理服务器的地址。客户的每次请求都将直接发送到该代理服务器,并由代理服务器来请求目标资源。
  2. 反向代理则被设置在服务器端,因而客户端无需进行任何设置。反向代理是指代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。这种情况下,代理服务器对外就表现为一个真实的服务器。
  3. 透明代理只能设置在网关上,可以看作是正向代理的一种特殊情况。

代理服务器通常还提供缓存目标资源的功能,这样用户下次访问同一资源时速度将很快。
通信过程:

  1. 代理服务器访问DNS服务器以查询域名www.baidu.com对应的IP地址
  2. 代理服务器查询路由器MAC地址的ARP请求和应答
  3. wget客户端和代理服务器之间的HTTP通信
  4. 代理服务器和Web服务器之间的HTTP通信

访问DNS服务器

在这里插入图片描述
通过读取文件获取DNS服务器的IP地址,然后将控制权传递给内核中的UDP模块。UDP模块将DNS查询报文段封装成UDP数据报,然后调用IP模块。IP模块则将UDP数据报封装成IP数据报。IP模块查询路由表以决定如何发送该IP数据报,目标IP地址仅能匹配路由表中的默认路由项,因此该IP数据报先发送至路由器,然后通过路由器来转发。因为ernest-laptop的ARP缓存中没有路由器对应的缓存项,所以需要发起ARP广播以查询路由器的MAC地址。最终以太网驱动程序将IP数据报封装成以太网帧发送给路由器。
IP头部的源端IP地址和目的端IP地址在转发过程中是始终不变的。但帧头部的源端物理地址和目的端物理地址在转发过程中则是一直在变化的。

本地名称查询

一般来说,通过域名来访问Internet上的某台主机时,需要使用DNS服务来获取该主机的IP地址。但如果我们通过主机名来访问本地局域网上的机器,则可通过本地的静态文件来获得该机器的IP地址。如未找到,则将求助于DNS服务器。

HTTP通信

客户端和代理服务器之间的通信过程简化如下:
在这里插入图片描述
通过最后一个确认报文段42的确认值,可以知道数据总长度位8522字节。

HTTP请求

HTTP请求的部分内容如下:
在这里插入图片描述第一行是请求行。其中“GET”是请求方法,表示客户端以只读的方式来申请资源。
“http://www.baidu.com/index.html”是目标资源的URL。其中“http”是所谓的scheme,表示获取目标资源需要使用的而应用层协议。“www.baidu.com”指定资源所在的目标主机。“index.html”指定资源文件的名称。
“HTTP/1.0”表示客户端使用的HTTP的版本号是1.0。

HTTP请求内容中的第2~4行都是HTTP请求的头部字段。一个HTTP请求可以包含多个头部字段。一个头部字段用一行表示,可以按任意顺序排列。
“User-Agent: Wget/1.12(linux-gnu)” 表示客户端使用的程序时wget。
“Host: www.baidu.com” 表示目标主机名是www.baidu.com。
“Connection: close”是我们执行wget命令时传入的,用以告诉服务器处理完这个HTTP请求后就关闭连接。

在所有头部字段之后,HTTP请求必须包含一个空行,以标识头部字段的结束。在空行之后,HTTP请求可以包含可选的消息体。

HTTP应答

在这里插入图片描述
第一行是状态行。“200 OK”
第2~7行是HTTP应答的头部字段。其表示方法与HTTP请求中的头部字段相同。
HTTP协议是一种无状态协议,即每个HTTP请求之间没有任何上下文关系。如果服务器处理后续HTTP请求时需要用到前面的HTTP请求的相关信息,客户端必须重传这些信息,这就导致HTTP请求必须传输更多的数据。
常见的解决方法就是Cookie。Cookie是服务器发送给客户端的特殊信息,客户端每次向服务器发送请求的时候都需要携带上这些信息,这样服务器就可以区分不同的客户了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值