【阅读】《Linux高性能服务器编程》——第四章:TCP/IP通信案例

4.1 实例总图

  在客户端运行wget客户端程序,在服务器运行squid代理服务器程序。客户端通过代理服务器的中专,获得Internet上主机www.baidu.com的首页文档。
通过代理服务器访问Internet上的Web服务器


4.2 部署代理服务器

4.2.1 HTTP代理服务器的工作原理

  • 在HTTP通信链上,客户端和目标服务器之间通常是存在某些中专代理服务器,其提供对目标资源的中专访问。
  • 一个HTTP请求可能被多个地阿里服务器转发,后面的服务器称为前面服务器的上游服务器。
  • 代理服务器分为正向代理服务器、反向代理服务器和透明代理服务器。
  • 正向代理服务器要求客户端自己设置代理服务器的地址,客户的每次请求都将直接发送到该代理服务器。
  • 反向代理被设置在服务器端,指使用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端。
  • 透明代理只能设置在网关上,可以看作正向代理的一种特殊情况。
  • 代理服务通常还提供缓存目标资源的功能,以便于用户下次访问同一资源时速度增快。
    HTTP通信链上的代理服务器

4.2.2 部署squid代理服务器

  修改squid服务器的配置文件 /etc/squid3/squid.conf:

acl localnet src 192.168.1.0/24
http_access allow localnet

4.3 使用tcpdump抓取传输数据包

将数据包按照逻辑划分:

  • 代理服务器访问DNS服务器以查询域名对应的IP地址;
  • 代理服务器查询路由去MAC地址的ARP请求和应答;
  • wget客户都安和代理服务器之间的HTTP通信;
  • 代理服务器和Web服务器之间的HTTP通信。

4.4 访问DNS服务器

DNS查询

  • squid程序通过读取 /etc/resolv.conf 文件获得DNS服务器的IP地址,然后将控制权转交给内核UDP模块;
  • UDP模块将DNS查询报文分装成UDP数据报,将源端口号和目标端口号加入UDP数据报头部,调用IP服务。
  • IP模块将UDP数据报封装成IP数据报,将源端IP地址和DNS服务器的IP地址加入到IP数据报头部;
  • IP模块查询路由表以确定如何发送IP数据报,通过路由器转发;
  • 以太网驱动程序将IP数据报封装成以太网帧发送给路由器。

4.5 本地名称查询

  Linux将目标主机名及其对应的IP地址存储在 /etc/hosts 配置文件中。


4.6 HTTP通信

wget客户端和squid服务器之间的TCP通信

4.6.1 HTTP请求

GET http://www.baidu.com/index.html HTTP/1.0
User-Agent: Wget/1.12 (linux-gnu)
Host: www.baidu.com
Connection: close

HTTP请求方法

请求方法含 义
GET申请获取资源,且不对服务器产生任何其他影响
HEAD类似GET方法,不过进要求服务器返回头部信息,不需要传输任何实际内容
POST客户端向服务器提交数据的方法,此方法可能会影响服务器;服务器可能会根据收到的数据动态创建新的资源,可能会更新原有的资源
PUT上传某个资源
DELETE删除某个资源
TRACE要求目标服务器返回原始HTTP请求内容,可用来查看中间服务器对HTTP请求的影响
OPTIONS查看服务器对某个特定URL都支持那些请求方法
CONNECT用于某些代理服务器,将请求的连接转化为一个安全隧道
PATCH对某个资源做部分修改
  • 在上述方法中,HEAD、GET、OPTIONS和TARCE为安全方法,其不对服务器产生影响。POST、PUT、DELETE和PATCH对服务器产生影响;
  • GET、HEAD、OPTIONS、TRACE、PUT和DELETE等请求方法被认为是等幂的,即多次连续、重复的请求和只发送一次该请求具有完全相同的效果。但POST方法多次发送同样的请求会影响服务器上的资源;
  • Linux上的命令HEAD、GET和POST和HTTP协议中同名请求方法相同,适合用来快速测试Web服务器;

4.6.1 HTTP应答

HTTP/1.0 200 OK
Server: BES/1.0
Content-Length: 8024
Content-Type: text/html;charset =gbk
Set-Cookie: BAIDUID=A5B6C72D68CF639CE8896FD79A03FBDB; expires=Wed,04 -Jul-42 00:10:47 GMT; path=/; domain=.baidu.com
Via: 1.0 localhost (squid/3.0 STABLE18)
  • 第一行是状态行,包括HTTP协议的版本号、状态码和状态信息;
状态类型状态码和状态信息含 义
1xx信息100 Continue服务器接收到客户端的请求行和头部信息,告诉客户端继续发送数据部分。客户端需要先发送100-continue头部字段告诉服务器自己还有数据要发送
2xx成功200 OK请求成功
3xx重定向301 Moved Permanently资源被转移,请求将被重定向
3xx重定向302 Found通知客户端资源能在其他地方找到,需要使用GET方法获得
3xx重定向304 Not Modified被申请的资源没有更新,和之前获得的相同
3xx重定向307 Temporary Redirect通知客户端资源可以在其他地方找到,可以使用原始请求相同的请求方法来访问目标资源
4xx客户端错误400 Bad Request通知客户请求错误
4xx客户端错误401 Unauthorized请求需要认证信息
4xx客户端错误403 Forbidden访问本服务器禁止
4xx客户端错误404 Not Found资源没找到
4xx客户端错误407 Proxy Authentication Required客户端需要先获得代理服务器的认证
5xx服务器错误500 Internal Server Error通用服务器错误
5xx服务器错误503 Server Unavailable暂时无法访问服务器
  • 2~7行是HTTP应答头部字段;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

甄姬、巴豆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值