第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> # ...
随机推荐
- Linux脚本开头#!/bin/bash和#!/bin/sh是什么意思以及区别
一.意思 #!/bin/sh是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径. 其实第一句的#!是对脚本的解释器程序路径,脚本的内容是由解释器解释 ...
- socket相关的开机初始化分析
针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...
- $Self~Problem~C~:~Samsara$
题目背景: 在这个\(Canman\)界的人都知道,世界上最伟大的修道者 -- \(Felling\),曾经结束了\(Canman\)的无垠盏之灾,守护了\(Canman\)的和平.在无垠盏之灾的最后 ...
- HDU 2096 小明A+B(%的运用)
传送门: 小明A+B Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- enmu枚举类型
在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把这些量说明为整型,字符型或其它类型显然是不妥当的.为此,C语言提供了一 ...
- dva框架使用详解及Demo教程
dva框架的使用详解及Demo教程 在前段时间,我们也学习讲解过Redux框架的基本使用,但是有很多同学在交流群里给我的反馈信息说,redux框架理解上有难度,看了之后还是一脸懵逼不知道如何下手,很多 ...
- ES5 实现 ES6 的 class以及extends
ts中是这样的 class Greeter { greeting:string; constructor(message:string){ this.greeting = message; } gre ...
- 复习宝典之Git分布式版本控制
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第三章:Git分布式版本控制 1)git文件状态 git中的文件有以下几种状态: 未跟踪(untrack):表示文件为新增加的. 已修改 ...
- 在JSP中使用formatNumber控制要显示的小数位数
先引入标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> 比 ...
- js的单例
对于 JS 来说,巨大的灵活性使得其可以有多种方式实现单例模式,使用闭包方式来模拟私有数据,按照其思路可得: var single = (function(){ var unique; functi ...