第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> # ...
随机推荐
- fastTime格式化时间
{ field: 'alarmTime', title: '告警时间', align: 'center', width: 90, valign: 'middle', formatter:functio ...
- update会锁表吗?
update会锁表吗? 两种情况: 1.带索引 2.不带索引 前提介绍: 方式:采用命令行的方式来模拟 1.mysq由于默认是开启自动提交事务,所以首先得查看自己当前的数据库是否开启了自动提交事务. ...
- ios Block详细用法
ios Block详细用法 ios4.0系统已开始支持block,在编程过程中,blocks被Obj-C看成是对象,它封装了一段代码,这段代码可以在任何时候执行.Blocks可以作为函数参数或者函数的 ...
- Winodws SNMP服务安装和配置(Windows 2003 & 2008 R2)
简单网络管理协议SNMP服务起着代理的作用,它会收集可以向SNMP管理站或控制台报告的信息.您可以使用SNMP服务来收集数据,并且在整个公司网络范围内管理基于Windows Server 2003.M ...
- 课时46.label标签(掌握)
我们点击QQ注册页面,发现了一个问题,当我们点击密码两个字的时候,输入框聚焦了,而点击确认密码的时候,输入框也聚焦了,而我们上节课做的页面,这么点击,并不聚焦 1.默认情况下文字和输入框是没有关联关系 ...
- 如何在github上实现预览
这个问题在网络上有很多答案,但是真正能解决的寥寥无几!接下来我就来尝试一下网络上疯传的几种方法.准备好了吗?我要开车了!!! PS:以下实验上传到github的demo采取导入本地css,js和网络上 ...
- asp.net mvc5 step by step(三)—— Entity Framework Database First
一.先建数据库. 打开,SQL Server Management 新建数据库Employee 并新建表 /****** Object: Table [dbo].[t_Employee] Script ...
- OOP导论系列---抽象过程
OOP导论系列---抽象过程 所有编程语言都提供抽象机制.可以认为,人们所能解决的问题的复杂性直接取决于抽象的类型和质量.所谓“类型”是指“所抽象的是什么?”你可以抽取待求解问题的任何概念化构件,如: ...
- 用java数组模拟登录和注册功能
package com.linkage.login; import java.util.Scanner; public class user { // 存储用户名和密码 public static S ...
- python函数中闭包的概念说明
函数中闭包的概念说明 闭包: 内层函数对外层函数非全局变量的引用,就叫做闭包 判断闭包方法 ._closure_ : 执行后返回有效信息就是闭包,返回none就不是闭包 举例1: 是闭包 def wr ...