`
liuxinglanyue
  • 浏览: 564750 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

从一个http请求的详细过程---理解计算机网络

阅读更多

http://duanple.blog.163.com/blog/static/70971767200981101340930/

一个http请求的详细过程

我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切。

首先http是一个应用层的协议,在这个层的协议,只是一种通讯规范,也就是因为双方要进行通讯,大家要事先约定一个规范。

1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。

DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个url发给这个配置的DNS服务器,如果能够找到相应的url则返回其ip,否则该DNS将继续将该解析请求发送给上级DNS,整个DNS可以看做是一个树状结构,该请求将一直发送到根直到得到结果。现在已经拥有了目标ip和端口号,这样我们就可以打开socket连接了。

2.请求 连接成功建立后,开始向web服务器发送请求,这个请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:  GET 路径/文件名 HTTP/1.0
文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。现在可以发送GET命令:

GET /mydir/index.html HTTP/1.0,

3.应答 web服务器收到这个请求,进行处理。从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。

为了告知浏览器,,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。
常用的HTTP头信息有:
  ① HTTP 1.0 200 OK  这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。
  ② MIME_Version:1.0 它指示MIME类型的版本。
  ③ content_type:类型 这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。
  ④ content_length:长度值 它指示HTTP体信息的长度(字节)。


4.关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接。


下面我们具体分析其中的数据包在网络中漫游的经历

在网络分层结构中,各层之间是严格单向依赖的。“服务”是描述各层之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务提供者,上层是请求服务的用户。服务的表现形式是原语(primitive),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。

传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服务方式。通常传输层的服务通过系统调用的方式提供,以socket的方式。对于客户端,要想建立一个socket连接,需要调用这样一些函数socket() bind() connect(),然后就可以通过send()进行数据发送。

现在看数据包在网络中的穿行过程:

应用层

首先我们可以看到在应用层,根据当前的需求和动作,结合应用层的协议,有我们确定发送的数据内容,我们把这些数据放到一个缓冲区内,然后形成了应用层的报文data

传输层

这些数据通过传输层发送,比如tcp协议。所以它们会被送到传输层处理,在这里报文打上了传输头的包头,主要包含端口号,以及tcp的各种制信息,这些信息是直接得到的,因为接口中需要指定端口。这样就组成了tcp的数据传送单位segment。tcp是一种端到端的协议,利用这些信息,比如tcp首部中的序号确认序号,根据这些数字,发送的一方不断的进行发送等待确认,发送一个数据段后,会开启一个计数器,只有当收到确认后才会发送下一个,如果超过计数时间仍未收到确认则进行重发,在接受端如果收到错误数据,则将其丢弃,这将导致发送端超时重发。通过tcp协议,控制了数据包的发送序列的产生,不断的调整发送序列,实现流控和数据完整。

网络层

然后待发送的数据段送到网络层,在网络层被打包,这样封装上了网络层的包头,包头内部含有源及目的的ip地址,该层数据发送单位被称为packet。网络层开始负责将这样的数据包在网络上传输,如何穿过路由器,最终到达目的地址。在这里,根据目的ip地址,就需要查找下一跳路由的地址。首先在本机,要查找本机的路由表,在windows上运行route print就可以看到当前路由表内容,有如下几项:
Active Routes Default Route Persistent Route.

整个查找过程是这样的:
(1)根据目的地址,得到目的网络号,如果处在同一个内网,则可以直接发送。
(2)如果不是,则查询路由表,找到一个路由。
(3)如果找不到明确的路由,此时在路由表中还会有默认网关,也可称为缺省网关,IP用缺省的网关地址将一个数据传送给下一个指定的路由器,所以网关也可能是路由器,也可能只是内网向特定路由器传输数据的网关。
(4)路由器收到数据后,它再次为远程主机或网络查询路由,若还未找到路由,该数据包将发送到该路由器的缺省网关地址。而数据包中包含一个最大路由跳数,如果超过这个跳数,就会丢弃数据包,这样可以防止无限传递。路由器收到数据包后,只会查看网络层的包裹数据,目的ip。所以说它是工作在网络层,传输层的数据对它来说则是透明的。

如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或 “网络不可达”的错误。

 

以windows下主机的路由表为例,看路由的查找过程
======================================================================
Active Routes:
Network Destination            Netmask                      Gateway              Interface                  Metric
0.0.0.0                                 0.0.0.0                       192.168.1.2           192.168.1.101           10
127.0.0.0                             255.0.0.0                   127.0.0.1               127.0.0.1                   1
192.168.1.0                         255.255.255.0           192.168.1.101       192.168.1.101           10
192.168.1.101                     255.255.255.255       127.0.0.1               127.0.0.1                   10
192.168.1.255                     255.255.255.255       192.168.1.101       192.168.1.101           10
 224.0.0.0                            240.0.0.0                   192.168.1.101       192.168.1.101           10
255.255.255.255                 255.255.255.255       192.168.1.101       192.168.1.101           1
Default Gateway:                192.168.1.2

Network Destination 目的网段  
Netmask 子网掩码  
Gateway 下一跳路由器入口的ip,路由器通过interface和gateway定义一调到下一个路由器的链路,通常情况下,interface和gateway是同一网段的。
Interface 到达该目的地的本路由器的出口ip(对于我们的个人pc来说,通常由机算机A的网卡,用该网卡的IP地址标识,当然一个pc也可以有多个网卡)。

网关这个概念,主要用于不同子网间的交互,当两个子网内主机A,B要进行通讯时,首先A要将数据发送到它的本地网关,然后网关再将数据发送给B所在的网关,然后网关再发送给B。
默认网关,当一个数据包的目的网段不在你的路由记录中,那么,你的路由器该把那个数据包发送到哪里!缺省路由的网关是由你的连接上的default gateway决定的,也就是我们通常在网络连接里配置的那个值。

通常interface和gateway处在一个子网内,对于路由器来说,因为可能具有不同的interface,当数据包到达时,根据Network Destination寻找匹配的条目,如果找到,interface则指明了应当从该路由器的那个接口出去,gateway则代表了那个子网的网关地址。

第一条      0.0.0.0   0.0.0.0   192.168.1.2    192.168.1.101   10
0.0.0.0代表了缺省路由。该路由记录的意思是:当我接收到一个数据包的目的网段不在我的路由记录中,我会将该数据包通过192.168.1.101这个接口发送到192.168.1.2这个地址,这个地址是下一个路由器的一个接口,这样这个数据包就可以交付给下一个路由器处理,与我无关。该路由记录的线路质量 10。当有多个条目匹配时,会选择具有较小Metric值的那个。

第三条      192.168.1.0   255.255.255.0  192.168.1.101   192.168.1.101  10
直联网段的路由记录:当路由器收到发往直联网段的数据包时该如何处理,这种情况,路由记录的interface和gateway是同一个。当我接收到一个数据包的目的网段是192.168.1.0时,我会将该数据包通过192.168.1.101这个接口直接发送出去,因为这个端口直接连接着192.168.1.0这个网段,该路由记录的线路质量 10 (因interface和gateway是同一个,表示数据包直接传送给目的地址,不需要再转给路由器)。

一般就分这两种情况,目的地址与当前路由器接口是否在同一子网。如果是则直接发送,不需再转给路由器,否则还需要转发给下一个路由器继续进行处理。

 

查找到下一跳ip地址后,还需要知道它的mac地址,这个地址要作为链路层数据装进链路层头部。这时需要arp协议,具体过程是这样的,查找arp缓冲,windows下运行arp -a可以查看当前arp缓冲内容。如果里面含有对应ip的mac地址,则直接返回。否则需要发生arp请求,该请求包含源的ip和mac地址,还有目的地的ip地址,在网内进行广播,所有的主机会检查自己的ip与该请求中的目的ip是否一样,如果刚好对应则返回自己的mac地址,同时将请求者的ip mac保存。这样就得到了目标ip的mac地址。

链路层

将mac地址及链路层控制信息加到数据包里,形成Frame,Frame在链路层协议下,完成了相邻的节点间的数据传输,完成连接建立,控制传输速度,数据完整。

物理层

物理线路则只负责该数据以bit为单位从主机传输到下一个目的地。

下一个目的地接受到数据后,从物理层得到数据然后经过逐层的解包 到 链路层 到 网络层,然后开始上述的处理,在经网络层 链路层 物理层将数据封装好继续传往下一个地址。

在上面的过程中,可以看到有一个路由表查询过程,而这个路由表的建立则依赖于路由算法。也就是说路由算法实际上只是用来路由器之间更新维护路由表,真正的数据传输过程并不执行这个算法,只查看路由表。这个概念也很重要,需要理解常用的路由算法。而整个tcp协议比较复杂,跟链路层的协议有些相似,其中有很重要的一些机制或者概念需要认真理解,比如编号与确认,流量控制,重发机制,发送接受窗口。

 

tcp/ip基本模型及概念


物理层

设备,中继器(repeater),集线器(hub)。对于这一层来说,从一个端口收到数据,会转发到所有端口。


链路层

协议:SDLC(Synchronous Data Link Control)HDLC(High-level Data Link Control) ppp协议独立的链路设备中最常见的当属网卡,网桥也是链路产品。集线器MODEM的某些功能有人认为属于链路层,对此还有些争议认为属于物理层设备。除此之外,所有的交换机都需要工作在数据链路层,但仅工作在数据链路层的仅是二层交换机。其他像三层交换机、四层交换机和七层交换机虽然可对应工作在OSI的三层、四层和七层,但二层功能仍是它们基本的功能。

因为有了MAC地址表,所以才充分避免了冲突,因为交换机通过目的MAC地址知道应该把这个数据转发到哪个端口。而不会像HUB一样,会转发到所有滴端口。所以,交换机是可以划分冲突域滴。


网络层

四个主要的协议:   
网际协议IP:负责在主机和网络之间寻址和路由数据包。     
地址解析协议ARP:获得同一物理网络中的硬件主机地址。     
网际控制消息协议ICMP:发送消息,并报告有关数据包的传送错误。     
互联组管理协议IGMP:被IP主机拿来向本地多路广播路由器报告主机组成员。

该层设备有三层交换机,路由器。


传输层

两个重要协议 TCP 和 UDP 。

端口概念:TCP/UDP 使用 IP 地址标识网上主机,使用端口号来标识应用进程,即 TCP/UDP 用主机 IP 地址和为应用进程分配的端口号来标识应用进程。端口号是 16 位的无符号整数, TCP 的端口号和 UDP 的端口号是两个独立的序列。尽管相互独立,如果 TCP 和 UDP 同时提供某种知名服务,两个协议通常选择相同的端口号。这纯粹是为了使用方便,而不是协议本身的要求。利用端口号,一台主机上多个进程可以同时使用 TCP/UDP 提供的传输服务,并且这种通信是端到端的,它的数据由 IP 传递,但与 IP 数据报的传递路径无关。网络通信中用一个三元组可以在全局唯一标志一个应用进程:(协议,本地地址,本地端口号)。

也就是说tcp和udp可以使用相同的端口。

可以看到通过(协议,源端口,源ip,目的端口,目的ip)就可以用来完全标识一组网络连接。

应用层

基于tcp:Telnet FTP SMTP DNS HTTP 
基于udp:RIP NTP(网落时间协议)和DNS (DNS也使用TCP)SNMP TFTP

 

参考文献:

读懂本机路由表 http://hi.baidu.com/thusness/blog/item/9c18e5bf33725f0818d81f52.html

Internet 传输层协议 http://www.cic.tsinghua.edu.cn/jdx/book6/3.htm

计算机网络 谢希仁

分享到:
评论

相关推荐

    计算机网络原理实验报告---Wireshark实验:HTTP协议分析

    本次实验是关于计算机网络原理的Wireshark工具使用,主要目标是对HTTP协议进行深入分析。实验过程中,我们使用Wireshark对电脑的WLAN端口进行抓包,观察并解析访问www.baidu.com网站时的网络通信过程。通过对HTTP...

    hnu-计算机网络-socket

    【标题】"hnu-计算机网络-socket" 涉及的是计算机网络中的Socket编程,这是一个重要的网络编程接口,主要用于创建和管理网络通信连接。在本实验中,学生将学习如何利用Socket进行数据的发送与接收,理解TCP/IP协议栈...

    计算机网络-网络命令

    计算机网络是信息技术的基础,它使得数据能够在全球范围内快速、可靠地传输。在计算机网络中,了解和掌握一些基本的网络命令...在学习计算机网络的过程中,不断实践和探索这些命令的应用,将对你的IT职业生涯大有裨益。

    计算机网络-实验指导书.pdf

    计算机网络实验指导书是学习和理解计算机网络原理与实践操作的重要参考资料。本书涵盖了网络的多个核心概念和技术,旨在帮助读者...每个实验都包含详细的步骤和解释,旨在帮助读者逐步深入理解计算机网络的复杂世界。

    哈工大威海-计算机网络-实验报告.pdf

    计算机网络是信息技术的基础,哈工大威海的计算机网络实验报告主要涵盖了网络常用命令的使用、DNS层次结构的理解、SMTP协议分析、捕包软件ethereal的掌握等关键知识点。以下是对这些内容的详细解释: 1. **网络常用...

    计算机考研复试--计算机网络超全篇.doc

    在这一过程中,服务器会维护一个未连接队列,存储等待确认的连接请求。 理解这些基本概念和协议机制是深入学习计算机网络的基础,也是进行网络编程和网络问题排查的关键。对于研究生复试来说,掌握这些知识不仅能...

    计算机网络-HTTP协议实验报告

    ### 计算机网络-HTTP协议实验报告 #### 第一关:HTTP基本请求与应答 **实验目的:** - 分析HTTP请求与应答中各字段的作用及取值。 - 了解HTTP协议的基本结构。 **实验内容与操作步骤:** 1. **背景知识与所需...

    计算机网络课设---ping程序

    在计算机网络中,`ping`程序是一个极其重要的诊断工具,用于测试网络连接和测量网络延迟。它基于Internet控制消息协议(ICMP),通过发送和接收“回显请求”数据包来验证网络上的主机是否可达。这个课设将引导你深入...

    具有HTTP请求接口的OPC-DA客户端

    综上所述,这个“具有HTTP请求接口的OPC-DA客户端”是一个面向开发者的工具,它简化了通过HTTP协议访问OPC DA服务器的过程,使得非OPC DA原生环境下的系统也能轻松获取和操控工业设备的数据。这对于实现远程监控、...

    计算机网络实验/报告-SDU

    而实验报告,作为一种学习与实践相结合的重要方式,可以帮助我们更好地理解和掌握计算机网络的理论知识和技能。 在这个“计算机网络实验/报告-SDU”中,我们将深入学习和实践计算机网络的概念。实验报告通常会涵盖...

    计算机网络实验报告-实验11

    ### 计算机网络实验报告-实验11 #### 实验任务1:分析应用层协议DNS **1. 自己机器配置的本地DNS服务器地址** 根据实验报告中的信息,所使用的本地DNS服务器地址为 **202.196.64.1**。 **2. 使用nslookup命令...

    资源专区-课程设计-编程作业-计算机网络基础资源-计算机网络、现代通信组网相关的教程&案例&相关项目

    在计算机网络的课程设计中,编程作业是一个至关重要的环节。通过编写代码,学生能够深入理解网络协议的工作原理,如TCP/IP协议栈,以及如何实现网络通信。例如,你可以通过编程模拟简单的HTTP请求与响应,从而理解...

    计算机网络--Internet特点和自上而下方法(英文版)

    - 互联网(Internet)是一个由全球范围内相互连接的计算机网络组成的庞大系统。 - 它通过标准化协议(如TCP/IP)来实现不同网络之间的通信。 - 互联网的核心在于其开放性和可扩展性,使得任何人或组织都可以通过...

    哈尔滨工业大学计算机课程实验-计算机网络-内含源码和说明书.zip

    【哈尔滨工业大学计算机网络...总的来说,这个课程实验为学习者提供了一个从理论到实践的桥梁,通过实际操作,不仅可以检验和深化理论知识,还能培养解决实际问题的能力,对于未来从事计算机网络相关工作具有重要意义。

    西北工业大学软件学院计算机网络实验报告

    这部分实验探讨了HTML文档中嵌入图片、脚本或其他资源时的HTTP交互,包括多个GET请求,每个请求对应一个嵌入对象,并可能涉及不同的域名和CDN(内容分发网络)。 通过这些实验,学生可以深入理解HTTP协议的工作原理...

    计算机网络-自顶向下方法(第五版)英文版课后题详解

    ### 计算机网络-自顶向下方法(第五版)英文版课后题详解 #### 知识点一:术语“主机”与“终端系统”的理解 - **知识点概述**:“主机”(Host)和“终端系统”(End System)在计算机网络领域是互换使用的术语,...

    计算机网络--ICMP

    本篇文章将详细探讨计算机网络中的ICMP知识点,特别是通过Ethereal实验来深入了解ICMP的工作原理。 #### 二、ICMP与Ping 1. **ICMP与Ping的关系**: - **Ping程序**:是一种简单的工具,用于验证目标主机是否可达...

    我所理解的计算机网络关键技术

    ### 计算机网络关键技术详解 #### IP地址基础 计算机网络技术的核心在于如何高效地管理和利用网络资源。其中,IP地址作为每一台联网设备的身份标识,对于确保数据准确无误地传输至关重要。以下是对IP地址及其相关...

    计算机网络(谢希仁)课后习题答案

    ### 计算机网络(谢希仁)课后习题答案关键知识点解析 #### 第1章 概述 ...对于理解计算机网络的基础概念及其实际应用非常有帮助。接下来的章节将深入探讨物理层、数据链路层、网络层等具体技术细节。

    广州大学计算机网络实验报告

    本实验报告涵盖了计算机网络中的多个关键知识点,旨在通过实践加深学生对网络原理的理解。以下是报告的主要内容: 1. **Windows网络测试工具**:在Windows操作系统中,内置了一些用于网络诊断和性能测试的工具。...

Global site tag (gtag.js) - Google Analytics