TCP/IP和HTTP协议代理

TCP/IP协议族

TCP/IP(传输控制协议/网际协议)是用于计算机通信的一个协议族。

TCP/IP协议族包括诸如Internet协议(IP)、地址解析协议(ARP)、互联网控制信息协议(ICMP)、用户数据报协议(UDP)、传输控制协议(TCP)、路由信息协议(RIP)、Telnet、简单邮件传输协议(SMTP)、域名系统(DNS)等协议。

1. 应用层 应用层包含一切与应用相关的功能,我们经常使用的HTTP、FTP,Telnet、SMTP等协议都在这一层实现。

2. 传输层 传输层负责提供可靠的传输服务。在该层中,典型的协议是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。其中,TCP提供可靠、有序的,面向连接的通信服务;而UDP则提供无连接的、不可靠用户数据报服务。

3. 网际层 网际层负责网络间的寻址和数据传输,在该层中,典型的协议是IP(Internet Protocol)。

4. 网络接口层 最下面一层是网络接口层,负责数据的实际传输.网络接口层在发送端将上层的IP数据报封装成帧后发送到网络上;数据帧通过网络到达接收端时,该结点的网络接口层对数据帧拆封,并检查帧中包含的MAC地址。如果该地址就是本机的MAC地址或者是广播地址,则上传到网络层,否则丢弃该帧。

图1 TCP/IP协议栈

HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个HTTP请求到服务器上指定端口(默认端口为80)。我们称这个客户端为用户代理程序(user agent)。应答的服务器上存储着一些资源,比如HTML文件和图像。我们称这个应答服务器为源服务器(origin server)。在用户代理和源服务器中间可能存在多个中间层,比如代理,网关,或者隧道(tunnel)。

尽管TCP/IP协议是互联网上最流行的应用,HTTP协议中,并没有规定必须使用它或它支持的层。事实上,HTTP可以在任何互联网协议上,或其他网络上实现。HTTP假定其下层协议提供可靠的传输。因此,任何能够提供这种保证的协议都可以被其使用。因此也就是其在TCP/IP协议族使用TCP作为其传输层。

通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息。

图2 组成元素

如图,web服务器接入于公网,ip地址为61.155.154.42, url为www.demo.com。 资源文件包括index.html,index.js,index.css,others位于服务器的虚拟根目录下,index.html索引文件index.js,index.cs

若用户在浏览器的地址栏中输入www.demo.com并回车键确认,则将触发以下流程:

· 浏览器所在客户端主机通过DNS查询,获取www.demo.com所对应的ip地址,并作为客户端与该ip地址对应的服务端建立http连接

· 浏览器向服务器发起http根请求,浏览器从本机取出根文件index.html并回应浏览器

· 浏览器从根请求回应中解析index.html文件中所引入的资源文件列表index.js,index.css等文件

· 浏览器再次分别向服务器发起index.js,index.css等文件请求

· 浏览器获取所有文件之后,解析渲染出所有资源文件,提供ui接口给用户

图4 资源获取流程

http代理服务器即是一个http协议的中继。其所完成的任务是插入浏览器与服务器之间的通信,截获浏览器的http请求,并模拟浏览器向服务器发起http请求,并把服务器的http回应,转回应于浏览器。这个动作对应浏览器来说,是透明的,

但是对于开发者来说,可以在代理服务器上做手脚,修改双向的报文。可以通过两种方式来实现http代理,其一为应用程序代理,其二tcp代理,其特征分别为:

应用层代理,浏览器与代理服务器,代理服务器与服务器两个通信组队之间,分别建立tcp连接,并进行tcp数据传输。代理服务器与浏览器握手之后,截获浏览器发出的GET报文,获取HOST字段与服务器握手,并把GET报文进行处理之后,转发给服务器,等待服务器的回包,并转发给浏览器。整个流程可以在应用层完成。

可以看出代理服务器对客户端上来的GET报文有修改

1、HTTP/1.1修改为HTTP/1.0, 这样修改有两个作用,服务器对HTTP/1.0请求的回应报文没有Content-Length, 或CHUNCK的标示,而这两个标示与应用程序数据的长度相关,如果采用HTTP/1.1的请求,则在修改服务器的回包之后(回包长度发生变化),需要重新修改Content-Length或CHUNCK两个属性的值,而这两个值的修改增加了开发的难度;

2、服务器对HTTP/1.0回应不会保持长连接,即图中服务器响应index.html之后,tcp连接关闭,这样对于代理软件来说,软件容易稳定,降低了开发难度。

TCP层代理

? TCP报文插入

在TCP层做报文注入,涉及到了修改报文双向sequence, ack-sequence值的问题。原因在于seq值与ack值与实际报文长度相关,如果修改了报文长度,显然需要修改seq, ack值:

图6 TCP之SEQ与ACK

? TCP层代理报文插入

如图7所示,代理需要维护两个状态机,收到服务端带fin报文的数据包之后,和服务端完成结束握手;同时去除fin报文的fin标志,把改报文发给浏览器,同时完成和浏览器的报文插入以及结束握手:

图7 TCP之SEQ与ACK

? TCP层代理状态机

1. Eth0收到http报文的结束帧(带fin)

2. 代理去掉fin标志

3. 代理插入一段报文,并加上fin标志

4.浏览器对原始的http结束报文回应fin:

问题:看起来服务器到浏览器的fin报文,并没有被代理扔掉,故而浏览器收到了两帧fin报文。

时间: 2024-08-05 02:32:55

TCP/IP和HTTP协议代理的相关文章

OSI,TCP/IP,五层协议的体系结构,以及各层协议

以下整理的是计算机网络的OSI,TCP/IP,五层协议的体系结构,以及各层协议,便于以后查看: OSI分层,自上而下分别是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 TCP/IP分层:网络接口层(对应OSI的物理层和数据链路层),网际层(对应OSI的网络层,定义了标准的分组格式和协议,即IP协议,当前采用ip4,下一版为ip6),运输层(对应OSI的传输层),应用层(对应OSI的会话层,表示层和应用层) 五层协议分别为:物理层,数据链路层,网络层,传输层,应用层 物理层:作用:

TCP/IP 7 应用层协议

第8章 应用层协议 8.1 TCP/IP应用层协议主要是指OSI参考模型中的第5层.第6层.第7层上半部分的协议.(会话层,表示层,应用层) 应用层协议定义: 利用网络的应用程序有很多,包括web浏览器.电子邮件.远程登陆.文件传输.网络管理等.能够让这些应用进行特定通信处理的正是应用协议. TCP和IP等下层协议是不依赖于上层应用类型.适用性非常广的协议.而应用协议则是为了实现某种应用而设计和创造的协议. 应用协议与协议的分层: 应用可以直接享用传输层以下的基础部分.因为开发者只要关心选用哪种

TCP/IP体系结构及协议

一.TCP/IP是当前使用最广泛的因特网体系结构,它是一个四层协议系统. 每一层负责不同的功能: ①应用层:负责处理特定的应用程序细节: ②运输层:为两台主机上的应用程序提供端到端的通信: ③网络层:处理分组在网络中的活动如分组的选路: ④数据链路层:也叫网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡. TCP/IP协议的工作流程:(应用层传输文件采用文件传输协议FTP) ①在目的主机上,应用层将一串数据流传送给运输层: ②运输层将数据流截成分组,并加上TCP报头形成TC

TCP/IP的ICMP协议,端口号,TCP建立连接的3次握手

ICMP协议(Internet Control Message Protocol) 1.1. 定义:用于主机或路由器向源点发送差错信息或查询信息的协议. 1.2. 报文结构 IP首部(20个字节)注:ICMP的报文是封装在IP报文里面的,所以要包含IP首部 报文类型(2个字节) 报文字段(2个字节) 校验和(4个字节) ICMP报文内容(长度取决于ICMP报文的类型) 注:这里前八个字节为IP数据包的前八个字节,他们包含了应用程序在源目的主机上的端口号. 1.3. 报文类型 发生报文的情形分为2

TCP/IP篇--各协议简介

--百家菜 在学习网络方面的知识过程中,不可避免地要接触到各种协议,对于一开始接触协议的我们来说对于协议实在没有太多的概念和接触,如果你也是这样,那么博主的这一篇博文可能给你一些关于协议的概念.其中的部分介绍为博主自己总结而出,如有欠缺不当的地方,欢迎通过发表评论或线下交流的方式斧正. 关于协议数据的具体格式和数字表示可上网(百度等网站)或者抓包(抓包方式详细见博主的相关博文-<抓包篇--wireshark使用!>,链接http://powersource.blog.51cto.com/113

柯南君:看TCP/IP 之一 (协议分层)

柯南君:今天无意中翻到一本书<TCP/IP 详解 >,据说是一本不错的书,就情不自禁的读了起来,果不其然,很不错,通俗易懂,在这里,就加一点自己的想法,和大家分享一下: 为什么需要TCP/IP? 很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但T C P / I P协议族允许它们互相进行通信.这一点很让人感到吃惊,因为它的作用已远远超出了起初的设想.T C P / I P起源于6 0年代末美国政府资助的一个分组交换网络研究项目,到9 0年代已发展成为计算机之间最常应用的组网形

tcp/ip (网络通讯协议)

介绍 TCP: 传输控制协议, IP: 网际协议, TCP/IP: 供已连接互联网的计算机之间进行通信的通信协议 在tcp/ip内部 , 包含一系列处理数据通信的协议: tcp.udp.icmp.dhcp ip负责将每个包路由至它的目的地.(网络层) tcp用于应用程序之间的通信, 负责处理ip包.(传输层) RFC是tcp/ip协议的标准文档. tcp/ip, 又名: 网络通讯协议. 寻址 ip地址: 每个计算机必须有ip地址才能够接入互联网, 每个ip包必须有一个地址才能够发送到目的计算机.

前端工程师如何理解 TCP/IP 传输层协议?

网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信等规则都需要事先确定.不同的硬件.操作系统之间的通信,所有的这一切都需要一种规则.而我们就把这种规则称为协议(protocol). TCP/IP 是互联网相关的各类协议族的总称,比如:T

tcp+ip+http+以太网协议+socket++(概述)

这几个东西一点都不会混乱,因为都不是一层面上的东东,现在想想早期我之所以觉着有些搞不懂是因为对协议所处的抽象层不清楚,可见知识应该是从底层扎实走的. 首先协议一点都不高大上,协议就是双方达成的必须共同遵守的规范,仅此而已. 互联网之间的数据传输都是在以太网上的,数据在放在以太网之前需要做一些加工,假设我们要发一个http请求头,http请求头是应用层面上的,我们自己根据http协议的规范拼写了一个http的request,我们拼写完毕之后需要把这个放在以太网上才能发送给另一台计算机,然而我们是不