Linux高性能服务器编程-游双——第四章 TCP/IP通信案例:访问Internet上的Web服务器

4.1 实例总图

  • web客户端和服务器治安使用HTTP协议通信
  • HTTP协议属于应用层协议
  • 代理服务器: 主机与web网络的通信都需要经过代理服务器, 由代理服务器代为转达
    在这里插入图片描述

4.2 部署代理服务器

4.2.1 HTTP代理服务器工作原理

  • 分类: 正向代理服务器, 反向代理服务器, 透明代理服务器
  • 正向代理服务器: 需要设置代理服务器的地址, 客户端的每次请求, 都会被发到代理服务器上, 代理服务器再转交给真正需要访问的服务器. 场景: 防火墙内的局域网需要访问Internet, 访问墙外的网站.
  • 反向代理服务器: 设置在服务器端, 对于客户端没什么区别, 就是直接访问需要访问的目标服务器, 反向代理服务器会代理目标服务器接收这个请求, 然后将请求转交给局域网内部的真实服务器.
  • 透明代理服务器: 设置在网关上. 因为用户访问Internet的数据报必然经过网关, 所以在网关上设置的代理服务器, 对用户来讲是透明的, 可以看作正向代理的一种特殊情况.
  • 在这里插入图片描述

4.2.2 部署squid代理服务器

首先需要准备两台机器, 或者虚拟机

4.2.2.1 代理服务器端

  • 在ubuntu上安装squid代理服务器:
sudo apt-get update
sudo apt-get install squid
  • 修改squid配置文件, 位置:sudo gedit /etc/squid/squid.conf
acl localnet src xxx.xxx.xxx.xxx/24
http_access allow localnet

这两行的意思是允许网络xxx.xxx.xxx.xxx上的所有机器通过该代理服务器来访问web网络

  • 添加到acl之后, 大概在900多行
acl SSL_ports port 443
acl Safe_ports port 80		# http
acl Safe_ports port 21		# ftp
acl Safe_ports port 443		# https
acl Safe_ports port 70		# gopher
acl Safe_ports port 210		# wais
acl Safe_ports port 1025-65535	# unregistered ports
acl Safe_ports port 280		# http-mgmt
acl Safe_ports port 488		# gss-http
acl Safe_ports port 591		# filemaker
acl Safe_ports port 777		# multiling http
acl CONNECT method CONNECT

acl localnet src xxx.xxx.xxx.xxx/24
http_access allow localnet
  • 重启服务
sudo service squid restart
  • sudo lsof -i查看squid监听端口, 默认是3218
...
squid     6729  proxy    6u  IPv6  90138      0t0  UDP *:42669 
squid     6729  proxy    8u  IPv4  90139      0t0  UDP *:38723 
squid     6729  proxy   11u  IPv6  90142      0t0  TCP *:3128 (LISTEN)
...

4.2.2.2 客户端配置

  • 设置代理服务器地址: export http_proxy="xxx.xxx.xxx.xxx:3128"

4.3 使用tcpdump抓取数据包

  • 客户端: wget --header="Connection: close" http://baidu.com/index.html--2022-06-27 10:43:28-- http://baidu.com/index.html
$ wget --header="Connection: close" http://baidu.com/index.html
--2022-06-27 10:43:28--  http://baidu.com/index.html
正在连接 192.169.158.128:3128... 已连接。  //连接到代理服务器
已发出 Proxy 请求,正在等待回应... 200 OK
长度: 7387 (7.2K) [text/html]
正在保存至: “index.html.5”
index.html.5        100%[===================>]   7.21K  --.-KB/s    in 0s      
2022-06-27 10:43:28 (828 MB/s) - 已保存 “index.html.5” [7387/7387])

4.4 访问DNS服务器

  • 在这里插入图片描述
  • 代理服务器向DNS服务器询问域名的IP地址, DNS服务器返回域名的别名和两个IP

4.5 本地名称查询

  • 通过主机名访问本地局域网上的机器, 可以用本地静态文件来获取机器的IP地址.
  • 在/etc/hosts配置文件中
  • 当需要查询某一个主机名对应的IP地址时, 程序会先检查这个文件
  • 在这里插入图片描述

4.6 HTTP通信

  • 时序图
    在这里插入图片描述

4.6.1 HTTP请求

在这里插入图片描述

  • 请求方法:
    在这里插入图片描述
  • 对于GET, HEAD, OPTIONS, TRACE, PUT和DELETE方法是等幂的, 也就是连续多次, 重复的请求和只发送一次该请求的效果完全相同
  • POST不同, 不是等幂的, 因为每一次POST都可能会影响到服务器上的资源
  • HTTP/1.1 代表使用的HTTP方法
  • User-Agent代表客户端使用的程序
  • Host 表示要访问的主机名
  • Connect: 表示连接状态, close表示处理完请求就关闭连接, keep-alive表示保持一段时间等待后续请求.

4.6.2 HTTP应答

在这里插入图片描述

  • 状态码: 200 OK
    在这里插入图片描述
  • server: 表示web服务器的名称
  • content-length 表示目标文件长度

4.6.2.1 cookie的用处

  • HTTP是无状态的, 上下文无关, 但目前很多网页是交互式的, 所以需要别的方法来报纸HTTP的状态, 这就是cookie
  • cookie式服务器给客户端的特殊信息, 客户端每次发送都需要携带cookie, 这样服务器就能区分不同的用户.

4.7 实例总结

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值