HTTP GET请求中所涉及到的网络协议

来源:互联网 发布:杭州微点网络联系方式 编辑:程序博客网 时间:2024/04/28 02:16

HTTP GET请求中所涉及到的网络协议

Puff QQ391741041

 

Java的产生与发展与网络有着密切的关系。所以我们在学习java的同时,应该对网络体系结构和网络协议有一个大概的认识和了解。这样才能有助于我们做出更好的应用程序。

 

在对以下内容进行学习之前,要求你对TCP/IP协议栈有一个简单的了解。要知道网络分层的结构;层与层之间完成相对独立的功能;在上层产生的数据包,会传递给下层,并加上下层的数据包头(header);上层从下层获取数据的过程相反。图1TCP/IP的体系结构图,注意图中对TCP/IP协议栈的协议描述并不完全。之所以会称之为TCP/IP协议,是因为他们是这个协议栈中最为重要的两个协议。

以下根据马萨诸塞州大学计算机科学系Don Towsley2004年秋季的网络课程录像中节选的一小段的内容加以翻译和整理。对我们用http(超文本传输协议)向一个web服务器发出一个GET请求时网络所做的工作、以及都使用了哪些协议加以描述。如果大家对这个课程有兴趣,可以在http://www-net.cs.umass.edu/cs653/下载,不过总的视频文件大小有1.88G,网速慢的就不要下载了:)。

 

1.       用户在web浏览器(如IE)地址栏输入URL(统一资源定位符),比如http://www-net.cs.umass.edu/cs653/。前面的http是协议类型,后面的www-net.cs.umass.edu指被访问的服务器的域名,没有加冒号和端口号表示访问的是默认的端口号80

2.       由于所发出的数据要通过被访问主机的IP地址进行传输和路由,所以要先通过DNS域名服务器服务器将域名解析为IP地址(假设DNS和我们的主机在一个网段):

a)         主机产生一个DNS请求;

                         i.              传递给传输层,通过UDPUser Datagram Protocol, 用户数据报协议)产生一个UDP 报文(Segment);

                       ii.              传递给网络层产生一个IP报文(Packet),目的地址是DNS服务器的IP地址(这个地址可能是手工设置的,也可能是通过DHCP动态主机配置协议)协议自动获得的);

                      iii.              在数据链路层通过ARPAddress Resolution Protocol,地址解析协议)协议得到DNS服务器的MAC媒体访问控制子层)地址

                     iv.              把数据帧(frame)通过以太网传输给DNS服务器

                       v.              DNS服务器将收到的帧向上传给传输层,得到UDP报文。通过UDP报文中指定的端口号传给DNS应用程序。为了表述简单,我们假设要解析的域名在当前的DNS服务器中有相应的表项(如果不在当地,本地DNS服务器还要向上级的DNS服务器发出DNS查询请求,如此递归直到查到要解析的域名的IP地址)。

b)        DNS把通过DNS应答将得到的IP地址返回给请求的主机。(终于知道对方的IP地址了,呵呵

3.       现在,浏览器得到对方的IP地址了。现在可以发出GET请求吗?

a)         首先要和对方服务器建立一个TCP传输控制协议,TCPUDP同属传输层,但是TCP协议时个可靠的面向连接的协议,要比UDP复杂的多。TCP更适合要求可靠传输的应用)连接。建立连接通过三次握手方法。

b)        这里和以下发送的TCP报文同样要传给下一层:网络层。在Internet中也就是我们说的IP层。同样的,IP层给TCP报文加上IP报头,发送给路由器(假设我们的主机和web服务器不在同一个网内),路由器根据报文中的目的IP地址决定下一跳(Next Hop)的IP地址和端口。这个决定需要查询(lookup)它自身的路由表(而路由表的维护需要路由协议,比如OSPF(开放最短路径优先)等)。IP报文可能通过多个路由器的转发,终于到达了对方的服务器。再剥掉IP报头递交给上层。

c)        建立好了TCP连接,以后发送的数据都可以这条可靠的连接传输了。

4.       WEB服务器之间的TCP连接建立成功。就可以发送GET请求啦。

5.       WEB服务器收到请求,就可以将响应信息通过刚才建立好的TCP连接送回给请求方。

6.       如果是一个html文件,浏览器就可以解释并将它显示在我们的显示器上面了。

 

 

注意到这个过程里面的三个重要的地址:域名、IP地址和MAC地址。它们是网络中不同的层,不同的协议所需要的地址。它们之间的关系有点像电话系统中的概念,域名对应人名(不过域名不能重复),IP地址对应电话号码,MAC地址对应程控交换机中这路电话所在的物理位置号。我们打电话首先通过人名找电话,这时电话本就像DNS一样;然后我们拿起电话拨号,程控交换机根据你拨的号码找到其电路所在位置(概念上);在两部电话之间建立一个连接;然后就可以通话了。

 

 

2005-7-1