第4章 TCP/IP通信案例:访问Internet上的Web服务器
第4章 TCP/IP通信案例:访问Internet上的Web服务器
4.2 部署代理服务器
书中为了演示访问Internet上的Web服务器的全过程,使用了squid代理服务器程序模拟了一个代理服务器.
这里了解了一下HTTP代理服务器的工作原理,有三种代理服务器:
正向代理服务器.客户的每次请求都将会直接发送到该代理服务器,并由代理服务器来请求目标资源,服务端并不知道真正客户端的身份,只是把数据交给了代理服务器.案例是搭在国外的VPN.
反向代理服务器.用代理服务器来接收Internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给客户端.客户端并不知道最终为他服务端身份,只关注了是否获得了请求的数据.案例是拨打10086.
透明代理服务器.通常设置在网关上,该代理对用户来说是透明的.透明代理可以看作正向代理的一种特殊情况.
4.3 使用tcpdump抓取数据包
当使用wget www.sina.com 发起请求时,系统会做出如下的反映:
使用DNS解析www.sina.com的IP地址(DNS所使用的协议是UDP,所以不用预先建立连接).
pi@happyPi:~ $ cat /etc/resolv.conf
Generated by resolvconf
nameserver 172.16.8.8
nameserver 202.106.0.20---------------------分割线---------------------
IP 192.168.1.108.40309 > 172.16.8.8.53: 21658+ A? www.sina.com. (30)
IP 192.168.1.108.40309 > 172.16.8.8.53: 5675+ AAAA? www.sina.com. (30)
IP 172.16.8.8.53 > 192.168.1.108.40309: 21658 3/7/7 CNAME us.sina.com.cn., CNAME wwwus.sina.com., A 66.102.251.33 (332)
IP 172.16.8.8.53 > 192.168.1.108.40309: 5675 2/0/0 CNAME us.sina.com.cn., CNAME wwwus.sina.com. (78)根据获取的IP地址查找路由表中的匹配路径,显然,没找到直接匹配的,所以只能去默认的路径了,也就是网关(192.168.1.1).
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
192.168.1.0 * 255.255.255.0 U 202 0 0 eth0由于我删掉了arp中192.168.1.1的MAC缓存地址,所以它会使用广播请求其MAC地址,之后若再次请求将不再需要ARP查询了.
ARP, Request who-has 192.168.1.1 tell 192.168.1.108, length 28
ARP, Reply 192.168.1.1 is-at f4:ee:14:31:8e:2a, length 46建立连接
IP 192.168.1.108.36659 > 66.102.251.33.80: Flags [S], seq 3111597488, win 29200, options [mss 1460,sackOK,TS val 1386538 ecr 0,nop,wscale 7], length 0
IP 66.102.251.33.80 > 192.168.1.108.36659: Flags [S.], seq 1020164898, ack 3111597489, win 4260, options [mss 1440,nop,nop,TS val 2208363296 ecr 1386538,sackOK,eol], length 0
IP 192.168.1.108.36659 > 66.102.251.33.80: Flags [.], ack 1, win 29200, options [nop,nop,TS val 1386560 ecr 2208363296], length 0
关于第1步,当需要查询某个主机名对应的IP地址时,一般会先检查本地文件 "/etc/hosts" , 若文件中未找到目标主机器名对应的IP地址,将会求助于DNS服务.
若我修改了"/etc/hosts"中的内容,使www.sina.com指向192.168.1.106
pi@happyPi:~ $ cat /etc/hosts
127.0.0.1 localhost
192.168.1.106 www.sina.com
---------------------分割线---------------------
IP 192.168.1.108.42445 > 192.168.1.106.80: Flags [S], seq 1217863331, win 29200, options [mss 1460,sackOK,TS val 1744778 ecr 0,nop,wscale 7], length 0
IP 192.168.1.108.42445 > 192.168.1.106.80: Flags [S], seq 1217863331, win 29200, options [mss 1460,sackOK,TS val 1744878 ecr 0,nop,wscale 7], length 0
IP 192.168.1.108.42445 > 192.168.1.106.80: Flags [S], seq 1217863331, win 29200, options [mss 1460,sackOK,TS val 1745078 ecr 0,nop,wscale 7], length 0
则连接的请求会直接发给指定好IP地址.
4.6 HTTP通信
由于HTTP协议的这种无状态特性与当前交互式应用所需的承上启下不太适应,所以需要使用额外的手段来保持HTTP的连接状态,解决方法就是Cookie,在头部字段"Set-Cookie"中.它是服务器发送给客户端的特殊信息.如此服务器可以区分不同的客户,自动登录就是用Cookie实现的.
关于第4章的总结
了解到当一个请求发起的时候,大致所经过的路径是这样的
DNS获取请求目标IP地址. (应用层)
路由表选择下一跳的最优线路.
ARP在当前局域网内部指定转发目标. (数据链路层)
From
2017/1/21 17:56:39
第4章 TCP/IP通信案例:访问Internet上的Web服务器的更多相关文章
- linux高性能服务器编程 (四) --TCP/IP通信案例
第四章 TCP/IP通信案例 HTTP代理服务器的大致工作原理 在HTTP通信链上,客户端和服务器之间通常存在某些中转代理服务器.它们提供对目标资源的中转访问.一个HTTP请求可能被多个 ...
- 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- 第二章 TCP/IP 基础知识
第二章 TCP/IP 基础知识 TCP/IP transmission control protocol and ip internet protocol 是互联网众多通信协议中最为著名的. ...
- TCP/IP 通信
TCP/IP 通信又叫socket 通信,是基于TCP/IP协调面向连接的一个数据传输技术.是属于OSI国际标准的传输层,三次握手 提供数据,有序,安全,端到端的传输和接收.它有三个主要协议:传输控制 ...
- 第6章 TCP/IP路由协议故障处理
第6章 TCP/IP路由协议故障处理 一.缺省网关 当包的目的地址不在路由器的路由表中,如路由器配置了缺省网关,则转发到缺省网关,否则就丢弃. Show ip route :查看Cisco路由器的缺省 ...
- TCP/IP通信网络基础
TCP/IP是互联网相关的各类协议族的总称. TCP/IP的分层管理 分层的优点:如果只有一个协议在互联网上统筹,某个地方修改就要把所有的部分整体换掉,采用分层则只需要改变相应的层.把各个接口部分规划 ...
- 使用Boost asio实现同步的TCP/IP通信
可以先了解一下Boost asio基本概念,以下是Boost asio实现的同步TCP/IP通信: 服务器程序部分,如果想保留套接字之后继续通信,可以动态申请socket_type,保存指针,因为so ...
- 使用Boost asio实现异步的TCP/IP通信
可以先了解一下Boost asio基本概念,以下是Boost asio实现的异步TCP/IP通信: 服务器: #include "stdafx.h" #include <io ...
- tcp/ip通信第5期之服务器端程序
/* 此程序是tcp/ip通信服务器端程序,测试运行在redhat5上 重构readline函数,解决粘包问题——利用“\n”识别一个消息边界 */ #include<stdio.h> # ...
随机推荐
- Mybatis——实体类属性名和数据库字段名不同时的解决方案
数据库的字段: 对应的实体类: 方案一: 在XML映射文件中使用的resultMap,优点:可以被重复使用. <resultMap id="BaseResultMap" ty ...
- mybatis逆向工程mbg
mbg:mybatis generator=mybatis代码生成器 1.看一下项目结构 其中bean文件,mapper接口文件和mapper.xml文件是代码生成器自动生成的. 使用generato ...
- mongo数据库基础语法
http://www.runoob.com/mongodb/mongodb-create-collection.html 很详细
- python入门基础:文件的读写
文件的读写操作运用广泛,无论是何种语言都会涉及到文件的输入输出. 下面简单的总结一下文件的读写: 1:open()函数 f = open('workfile', 'w') 函数 open()返回文件的 ...
- ConcurrentHashMap 中putIfAbsent 和put的区别
putIfAbsent 源代码 public V putIfAbsent(K key, V value) { Segment<K,V> s; if (value == null) thro ...
- 【Node.Js】npm国内被墙的解决方法
移动网就是坑,有VPN也上不去,真操蛋~先吐槽一下@中国移动 折腾了一晚上,总是报连接错误,导致我npm安装不上,查了半天资料,找到个靠谱的,粘贴过来备用. 原文地址:http://snoopyxdy ...
- UIPanGestureRecognizer 拖动TableView改变其高度
需求:项目中要求tableView的高度随着手拖动的位置而改变如下图: 关键代码如下: - (void)viewDidLoad{ panGestureRecognizer = [[UIPanGestu ...
- Windows10 IIS安装php manager和IIS URL Rewrite 2.0组件的方法
Windows10中自带的Server:Microsoft-IIS///8.5/10上安装.微软脑子秀逗,跳过了9,以为能解决版本识别的问题,没想到弄成10,还是出现了版本识别的问题,真是自己打自己的 ...
- Ansible实现主备模式的高可用(Keepalived)
前言 Ansible是一款极其简单的IT自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序 ...
- 关于因为git仓库无法克隆的问题;
有时候会遇见一种情况: 在git clone 时,遇见断开连接或者无法连接git源仓库:连接超时的时候: git clone url(git 仓库源) --depth=n // n 为想要克隆的层 ...