版面调整调查!
返回列表 回复 发帖

[原创]浅谈Internet网络协议~(写给新手解惑的~)

(原创文章,转载请注明作者及出处)
刚接触什么网络协议、TCP/IP协议之类的名词大概是大一去图书馆看书的时候,经过一阵子的学习,我终于知道什么叫协议了~~但是,另一个问题又在脑海中出现了?那些什么什么协议到底是个什么东西?比如书上面说HTTP协议是超文本传输协议、FTP协议是文件传输协议等等,这些协议是什么?我当时的理解是“相应的协议应该就是提供了一个相应的包,以供程序调用。那就是像写C语言程序的时候经常会用#include <stdlib.h>,java语言里经常import java.io.* ,stdlib.h和java.io.*就是一个包
呵呵,现在回想起来这种想法有点搞笑:如果是提供的包的话,世界上的编程语言成百上千种,难道如果要使用TCP/IP协议就要实现这几百种语言的包吗?
相信也有人有跟我那时候一样的理解~~其实所谓的协议,就是一种被某个机构定义,同时被公众认可的规范~
所谓规范,具体针对到网络协议,就是说,协议规定了一些数据包的传送方式等等,如果你编写的网络程序是按照某种周知的协议进行数据包传送的,就可以称你的程序是基于那种协议开发的。这么说大家应该都能理解吧?所以,我们也可以自己定义一种数据包的格式用来进行网络通信,这就叫自己定义和开发的协议!
再说端口号,HTTP端口号是80,FTP端口号是21等等,这些特定的端口号是用于指定的数据包通信的端口,也是一种规范!“规范”就是说,如果你自己编写了一个HTTP服务器,你可以把你的数据接收和发送的端口设置为除80以外的其它端口,还记不记得URL里面也有一个端口号,HTTP地址默认的是80端口,当然我们也可以指定成你自己定义的端口!可以通过http://主机地址:端口号/目录/文件名来访问。

说了这么多抽象的东西,来说说一个具体的吧!HTTP协议应该是用得最多的网络协议了,它定义了HTTP请求和HTTP响应。比如说一个最简单的HTTP请求可以是这样的:
GET / HTTP/1.1
Host:www.baidu.com
[空行]

这个HTTP请求的意思就是说向主机www.baidu.com请求得到他的主页。最重要的第一行是HTTP请求头,GET是方法,第一个"/"请求的文件名,这里指主机当前文件名。就是baidu的主页,HTTP/1.1是HTTP版本号。host下面有一个空行,这是必须的,代表HTTP请求头的结束!
如果我们在程序里创建与www.baidu.com的连接后,向它发送这个http请求,www.baidu.com将返回一个HTTP响应,包含HTTP响应头和正文。响应头可以是如下:
HTTP/1.1 200 OK
Date: Wed, 16 Aug 2006 02:25:55 GMT
Server: Apache/1.3.27
Set-Cookie: BAIDUID=ACB27E2842F38AD638BEAF8EB8286008; expires=Wed, 16-Aug-36 02:25:55 GMT; path=/; domain=.baidu.com
Cache-Control: max-age=86400
Expires: Thu, 17 Aug 2006 02:25:55 GMT
Last-Modified: Mon, 07 Aug 2006 18:15:00 GMT
ETag: "794132-aab-44d78324"
Accept-Ranges: bytes
Content-Length: 2731
Content-Type: text/html

然后再是一个空行后加上百度主页的正文。
完整的响应如下:
HTTP/1.1 200 OK
Date: Wed, 16 Aug 2006 02:32:07 GMT
Server: Apache/1.3.27
Set-Cookie: BAIDUID=61B3F255B9E8FC183B9C1587D622E4E7; expires=Wed, 16-Aug-36 02:32:07 GMT; path=/; domain=.baidu.com
Cache-Control: max-age=86400
Expires: Thu, 17 Aug 2006 02:32:07 GMT
Last-Modified: Mon, 07 Aug 2006 18:15:00 GMT
ETag: "53c45f-aab-44d78324"
Accept-Ranges: bytes
Content-Length: 2731
Content-Type: text/html

<html><head><title>百度——全球最大中文搜索引擎  </title><meta http-equiv=Content-Type content="text/html; charset=gb2312">
<style>body{font-family:宋体}img{border:0}td,p{font-size:12px}p{width:600px;margin:0;padding:0}.ff{font-family:Verdana;font-size:16px}
#n{margin:0px auto;font-size:12px;padding:0px;border-bottom:1px solid #00c;BACKGROUND:#eee;width:600px;height:18px}
#n li{float:left;display:block;margin:0px;padding:0px;width:67px}
#n li a{display:block;text-decoration:none;padding:4px 0px 0px 0px;margin:0px;width:100%}
#n li a:hover{text-decoration:underline;background:#FFF;padding:4px 0px 0px 0px;margin:0px}
#n li#h{width:56px;height:18px}#n li#m{width:85px;height:18px}
#n .w{background:#00C;color:#FFF;padding:4px 0px 0px 0px;margin:0px;font-weight:bold}
#b {width:600px;height:30px;padding-top:4px;color:#77c;font-size:12px;font-family:Arial}#b a{color:#77c;font-size:12px}</style><script>
function h(obj,url){obj.style.behavior='url(#default#homepage)';obj.setHomePage(url);}</script></head>
<body bgcolor=ffffff text=000000 link=0000cc vlink=0000cc alink=ff6600 onload=document.f.wd.focus()>
<center><br><img src=http://www.baidu.com/img/logo.gif width=174 height=59 alt="百度"><br><br><br><br>
<div id=n><li id=h></li><li><a href="http://news.baidu.com">资 讯</a></li><li class=w>网 页</li><li><a href="http://post.baidu.com">贴 吧</a></li><li><a href="http://zhidao.baidu.com">知 道</a></li><li><a href="http://mp3.baidu.com">MP3</a></li>
<li><a href="http://image.baidu.com">图 片</a></li><li id=m><a href="http://www.baidu.com/more/index.html">更 多 &gt;&gt;</a></li>
</div><p style=height:44px;>&nbsp;</p><table width=600 border=0 cellpadding=0 cellspacing=0><tr valign=top><td width=92></td><td height=62> <form name=f action=http://www.baidu.com/s><input type=text name=wd class=ff size=35 maxlength=100><input type=hidden name=cl value=3>  <input type=submit value=百度搜索><br><br></form></td><td width=92><a href=/search/jiqiao.html>搜索帮助</a><br><a href=/gaoji/advanced.html>高级搜索</a></td></tr></table><p style=height:60px;>&nbsp;</p><p style=height:30px;><a onclick="h(this,'http://www.baidu.com')" href=http://utility.baidu.com/traf/click.php?id=215&url=http://www.baidu.com>把百度设为首页</a></p>
<p style=height:14px;><a href=http://jingjia.baidu.com/>企业推广</a> | <a href=http://top.baidu.com/>搜索风云榜</a> | <a href=/home.html>关于百度</a> | <a href=http://ir.baidu.com>About Baidu</a></p><p id=b>&copy;2006 Baidu <a href=http://www.baidu.com/duty/>使用百度前必读</a> <a href=http://www.miibeian.gov.cn/ target=_blank>京ICP证030173号</a> <a href=http://www.hd315.gov.cn/beian/view.asp?bianhao=010202001092500412><img src=http://gimg.baidu.com/img/gs.gif></a></p></center></body></html>
而浏览器就是用这个原理,再加上一个HTML解析器就构成了一个浏览器了~



说到网络协议,就不得不提一下另一个名词:RFC(Request For Comment)
RFC是Internet工程任务组的正式文档,由委员会起草,并由感兴趣的团体对其进行编写的。RFC文档包含大量的计算机协议,可以通过查看RFC文档相应的章节可以得到相应的协议十分详细的描述!比如ftp协议定义在RFC959,而在RFC793中是基本的TCP描述。
顺便说一下TCP协议与HTTP、FTP、SMTP这些协议的关系,FTP这些协议可以称为TCP下的子协议~打个简单的比方,TCP协议相当于电信部门,他们提供了通信线路,比如说电话线,电话线供两个不在同一地方的人打电话,而HTTP这些协议相当于两个打电话的人约定所说的语言!比如一个中国人跟一个法国人通电话,如果两个人不会一门共同知道的语言,两人是无法通信的,而那门共同的语言就相当于TCP下的HTTP、FTP等协议了。

最后附上得到上面baidu的HTTP响应的JAVA程序:
import java.io.*;
import java.net.*;

class baidu {
        public static void main(String[] args) throws Exception{
                Socket c = new Socket("www.baidu.com",80);
                BufferedReader in = new BufferedReader(new InputStreamReader(c.getInputStream()));
                PrintWriter out = new PrintWriter(c.getOutputStream(),true);
                out.println("GET / HTTP/1.1");
                out.println("Host:www.baidu.com");
                out.println();
                FileOutputStream out2 = new FileOutputStream("baidu.txt");
                String s;
                while ((s=in.readLine())!=null)
                {
                        out2.write(s.getBytes());
                        out2.write("\n".getBytes());
                }
                in.close();
                out.close();
                out2.close();
                c.close();
        }
}
[ 本帖最后由 大饼先生 于 2006-8-16 10:56 编辑 ]

闲看庭前花开花落

      
           漫随天外云卷云舒
      
借个地方发东西~

[ 本帖最后由 大饼先生 于 2006-8-17 21:48 编辑 ]
附件: 您所在的用户组无法下载或查看附件

闲看庭前花开花落

      
           漫随天外云卷云舒
      
THE WAY
返回列表