﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-GONE WITH THE WIND::不能让生活没有目标。-随笔分类-web html css</title><link>http://www.blogjava.net/zhangyy130/category/38679.html</link><description>--&lt;span style="font-size:15px;"&gt;tomorrow is another day::地方门户的目标不能变&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Mon, 13 Apr 2009 05:10:25 GMT</lastBuildDate><pubDate>Mon, 13 Apr 2009 05:10:25 GMT</pubDate><ttl>60</ttl><item><title>CSS教程：li和ul标签用法举例</title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/13/265215.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Mon, 13 Apr 2009 01:22:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/13/265215.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/265215.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/13/265215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/265215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/265215.html</trackback:ping><description><![CDATA[<p>LI代码的格式化:<br />
A).运用CSS格式化列表符： ul li{<br />
list-style-type:none;<br />
}<br />
B).假如你想将列表符换成图像，则： ul li{<br />
list-style-type:none;<br />
list-style-image: url(/blog/images/icon.gif);<br />
}<br />
C).为了左对齐，可以用如下代码： ul{<br />
list-style-type:none;<br />
margin:0px;<br />
}<br />
D).假如想给列表加背景色，可以用如下代码： ul{<br />
list-style-type: none;<br />
margin:0px;<br />
}<br />
ul li{<br />
background:#CCC;<br />
}<br />
E).假如想给列表加MOUSEOVER背景变色效果，可以用如下代码： ul{ list-style-type: none; margin:0px; }<br />
ul li a{ display:block; width: 100%; background:#ccc; }<br />
ul li a:hover{ background:#999; }说明：display:block;这一行必须要加的，这样才能块状显示！</p>
<p>F).LI中的元素水平排列,要害FLOAT:LEFT： ul{<br />
list-style-type:none;<br />
width:100%;<br />
}<br />
ul li{<br />
width:80px;<br />
float:left;<br />
} <br />
&lt;ul&gt;&lt;li&gt;的区别<br />
&lt;LI&gt; 的参数设定（常用）： <br />
&nbsp;</p>
<p><br />
例如： &lt;li type="square" value="4"&gt;</p>
<p>type="square"<br />
只适用于非顺序清单，设定符号款式，其值有三种，如下，内定为 type="disc"：<br />
符号 是当 type="disc" 时的列项符号。<br />
符号 if" width=10 height=10 border=0&gt; 是当 type="circle" 时的列项符号。<br />
符号 是当 type="square" 时的列项符号。<br />
value="4"<br />
只适用于顺序清单，设定该一项的数目，其後各项将以此作为起始数目而递增，但前面各项则不受影响，其值只能是 1,2,3.. 等整数，没有内定值。<br />
&lt;UL&gt;称为无序清单标记。<br />
所谓无序清单就是在每一项前面加上 、、等符号，故又称符号清单。<br />
&lt;UL&gt; 的参数设定（常用）：<br />
例如： &lt;UL type="square"&gt;</p>
<p>type="square"<br />
设定符号款式，其值有三种，如下，内定为 type="disc"：<br />
符号 是当 type="disc" 时的列项符号。<br />
符号 是当 type="circle" 时的列项符号。<br />
符号 是当 type="square" 时的列项符号。</p>
<p>&lt;ul&gt;是项目列表，&lt;li&gt;是列表项，项目列表就是用符号来列的，所以你列出来默认的就是黑点啦，还有一个是&lt;ol&gt;这个是编号列表，用数字来列的，也是用&lt;li&gt;做列表项 </p>
<p>&nbsp;</p>
<p><br />
&lt;li&gt;是 list item 即列表项，但列表有很两种，所以外面得有 &lt;ul&gt; 或者 &lt;ol&gt; 用来区别无序列表（小点点）和有序列表（1,2,3...）。 <br />
</p>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/265215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-13 09:22 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/13/265215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>规范CSS样式书写顺序 </title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264435.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Wed, 08 Apr 2009 04:31:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264435.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/264435.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264435.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/264435.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/264435.html</trackback:ping><description><![CDATA[<div class="postText">(from:http://www.0574dh.com/article.asp?id=420)<br />
<br />
/* mozilla.org Base Styles <br />
* maintained by fantasai <br />
* (classes defined in the Markup Guide - <a href="http://mozilla.org/contribute/writing/markup" target="_blank">http://mozilla.org/contribute/writing/markup</a>) <br />
*/ <br />
/* Suggested order: <br />
//显示属性 <br />
* display <br />
* list-style <br />
* position <br />
* float <br />
* clear <br />
//自身属性 <br />
* width <br />
* height <br />
* margin <br />
* padding <br />
* border <br />
* background <br />
//文本属性 <br />
* color <br />
* font <br />
* text-decoration <br />
* text-align <br />
* vertical-align <br />
* white-space <br />
* other text <br />
* content <br />
* <br />
*/ </div>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/264435.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-08 12:31 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/08/264435.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>优化代码：网页技术CSS的font属性的缩写的技巧</title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264434.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Wed, 08 Apr 2009 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264434.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/264434.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/264434.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/264434.html</trackback:ping><description><![CDATA[(from: http://www.webwoo.net/bc/bencandy-38-20144-1.htm)<br />
优化代码：网页技术CSS的font属性的缩写的技巧，缩写有利于减少代码，优化CSS，使之更加合理。
<p>　　css font属性是用来控制文字字体、颜色、大小等。而font的属性有多种，在通常情况下，我们用缩写的办法将多种属性概括在一句css代码中。这样极大的减小了代码，优化css文件。</p>
<p>　　我们常用的font属性有下面这六种：</p>
<p class="code">font-style设定斜体　如：font-style: italic;<br />
font-weight设定文字粗细　如：font-weight: bold;<br />
font-size设定文字大小　如：font-size: 12px;<br />
line-height设定行距　如：line-height: 150%;<br />
color设定文字颜色（注意不是font-color）　如：color: red;<br />
font-family设定字体　如：font-family : "Lucida Grande", Verdana, Lucida, Arial, Helvetica, 宋体,sans-serif;</p>
<p>　　上述的属性，我们可以概括写在一行font属性里。需要注意的是color属性我们需要单独定义。</p>
<p class="code">font: italic bold 12px/150% "Lucida Grande", Verdana, Lucida, Arial, Helvetica, 宋体,sans-serif;}</p>
<p>　　上面的例子用一行来定义font属性，分别是：font-style font-weight font-size line-height font-family；而color设定文字颜色需要单独进行定义。</p>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/264434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-08 12:30 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/08/264434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML和PHP代码分离</title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264433.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Wed, 08 Apr 2009 04:29:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264433.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/264433.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/264433.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/264433.html</trackback:ping><description><![CDATA[使用PHP编程的人都会碰到这样一个问题：当PHP代码和HTML代码在一起的时候，看PHP代码很费劲，整个文件也无法用Dreamweaver来编辑，这对于PHP程序员和美工来讲，修改这样的文件就象一个噩梦。 <br />
PHP中的模板(Template)技术就是为了解决这个问题而出现的。PHP模板类有很多，比较常见的是 FastTemplate 和 PHPLib， 因为出现得早，在PHP编程界名声很大。PHP程序员不知道这两个类，就象VB程序员不知道MsgBox函数一样，是一件不可思议的事情。 <br />
以前我们需要去下载PHP模板类，现在PHP4有了自己的模板类 IntegratedTemplate 和 IntegratedTemplateExtension，功能和PHPLib 差不多。这两个类是子类和父类的关系。一般我们用 IntegratedTemplateExtension 就可以了。让人感到不可思议的是 IntegratedTemplate 不是从 PEAR 类继承过来，无法用到 PEAR 类的 debug 功能。 <br />
以下举例子说明它们的用法，假设 IntegratedTemplate 类和 IntegratedTemplateExtension 类分别在 C:\php4\pear\HTML\ITX.php 和 C:\php4\pear\HTML\ITX.php 中。我们写的代码放在C:\TestPHP\PHP4\Welcome.htm 和 C:\TestPHP\HTML\Welcome.php 中。将C:\TestPHP\PHP4 在Web Server 上设成虚拟目录 /testphp 并且给与脚本执行权限，确认C:\TestPHP\HTML\Welcome.htm 无法通过远端浏览器访问。在 php.ini 里面设置 include_path = ".;C:\php4\pear" <br />
例1： <br />
我们在HTML文件中放置变量的标记，用PHP代码设置变量的值，然后将HTML中的标记替换掉，最后输出到客户浏览器。 <br />
以下是 Welcome.htm 代码，我们放了三个PHP tag(变量标记)为： {WelcomeTitle}、{UserName}、{WelcomeMessage} <br />
<br />
<br />
<br />
<p align="center">您好，{UserName}</p>
<br />
<p align="center">{WelcomeMessage}</p>
<br />
<br />
以下是Welcome.php代码 <br />
&lt;?php <br />
require_once "HTML/ITX.php"; <br />
<br />
//以下是给变量赋值，在实际代码中可能从Database中取得数据然后赋值 <br />
$WelcomeTitle = "欢迎来到网页天堂"; <br />
$UserName = "皮皮鲁"; <br />
$WelcomeMessage = "您的到来让我们深感荣幸！"; <br />
<br />
//一般来说这种全局变量放在单独的一个文件中，便于维护 <br />
$HTML_CODE_FILE_ROOT = "../HTML/"; <br />
<br />
$tpl = new IntegratedTemplateExtension($HTML_CODE_FILE_ROOT); <br />
<br />
指定要替换 tag 的 HTML 文件 <br />
$tpl-&gt;loadTemplatefile("Welcome.htm"); <br />
<br />
替换HTML 文件中的 tag <br />
$tpl-&gt;setVariable( array ( <br />
"WelcomeTitle" =&gt; $WelcomeTitle, <br />
"UserName" =&gt;$UserName, <br />
"WelcomeMessage" =&gt;$WelcomeMessage <br />
) ); <br />
<br />
输出替换后的 HTML <br />
$tpl-&gt;show(); <br />
?&gt; <br />
<br />
这样写好后，Welcome.htm 仍然可以使用网页编辑器如Dreamweaver、FrontPage 进行编辑，Welcome.php中是纯粹的PHP代码，不含HTML，方便以后的代码修改和维护。 <br />
如果将 IntegratedTemplateExtension 类和 PHP4中的 Cache 类 联合使用，在速度上可以得到很好的效果。 <br />
PHP4 模板类还可以使用 Block，配合其他 PHP4 中的类 可以很轻松地实现数据库数据检索的翻页，可以很轻松写出论坛之类的软件。 <br />
<br />
补充说明：为了防止用户直接用 Welcome.htm 看网页，将 Welcome.htm 放在客户访问不到的目录（只要不在Web Server 的虚拟目录下即可）。对于大型的PHP项目，图片、PHP代码、HTML文件、多语言字符串文件都应该放在不同的目录，这样在多人共同做一个项目时不至于混乱。
<img src ="http://www.blogjava.net/zhangyy130/aggbug/264433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-08 12:29 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/08/264433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML分离内容和表现</title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264432.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Wed, 08 Apr 2009 04:28:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264432.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/264432.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264432.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/264432.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/264432.html</trackback:ping><description><![CDATA[<p>分离内容和表现<br />
HTML从来就不是表现的手段，但从用户端结合元素来格式化文本，开发者从中找到操作布局的方法。CSS的强大，使得现在不再需要用HTML做任何表现了，而内容也可以完全从表现（CSS）中分离出来。</p>
<p>这样做有很多好处──通常可以压缩文件容量，有着用一个主要样式表就可控制整个网站而不是单个页面的灵活性，也可能使页面更易用，更具亲和力。</p>
<p>遵循这些基本原则基本上意味着你不应该在HTML内使用样式化的任何事物了。比如font的标签，比如bgcolor的属性不应该再使用。甚至在图像标签img内的边框属性border在XHTML 1.1中也是非法的了。别担心，过时的HTML可以样式化，CSS更可以样式化，而且可以做得更好。</p>
<p>不仅仅是从HTML内剥离表现，内容的结构意味着在适合的地方使用明确的HTML标签。比如，h1，h2等应用在标题上──而不仅仅是使用CSS使字体变大而已。</p>
<p>最佳指引就是一个可视化的浏览器上使用其默认的样式来呈现一个没有样式表（或者有样式表，但不支援样式表的文本浏览器，比如lynx——译者注）的页面。</p>
<p>表格不应该用在布局上──表格用来表示表格式的数据（我们已经不厌其烦地说了很多次──译者注）。也许对于已经习惯传统结构的HTMLer来说，完全改变有很大的技术难度。这个方法很大程度上压缩了文件，而且，基于这些显性代码，它变得更易用，更具亲和力。</p>
<p>关于更多，请阅读CSS高级指南的布局。</p>
<p><br />
在XHTML中所有的标签都必须小写和关闭。没有闭合标签的（如br和img）必须用英文半角正斜杠&#8220;/&#8221;在后面自关闭（如&lt;br /&gt;）。注意在斜杠前应该有一个英文半角空格。</p>
<p>标记也必须是合式的，使元素正确嵌套（比如&lt;strong&gt;&lt;em&gt;this&lt;/em&gt;&lt;/strong&gt;，而不是&lt;strong&gt;&lt;em&gt;this&lt;/strong&gt;&lt;/em&gt;）。</p>
<p>所有的文档都要有html，head，title和body元素。也必须从文档类型声明开始。</p>
<p>文档主体应该从 p， h1，h2， h3，h4，h5，h6，div， pre，address，ins或者del开始。</p>
<p>属性<br />
所有的属性必须是小写的，它们的值也要用英文半角引号括（"）起来。</p>
<p>精简属性是不允许的（比如&lt;input type="checkbox" checked /&gt;）。按惯例，精简属性必须给出跟属性名称一样的值（如 &lt;input type="checkbox" checked="checked" /&gt;）。</p>
<p>名字 name属性不再是合法的了（除了在表单元素中），应该使用id来代替。</p>
<p>目标属性target不是一个合法的属性。庆幸吧，它有些癫狂。</p>
<p>在img里，alt属性是必须的。</p>
<p>亲和力<br />
为残障人士制做具有亲和力网页的理由是不证而明的。不仅是人道的，而且也对老年用户和五官功能减退的用户有利（想一想，有一天我们老了，视力消退，五官不灵，怎么浏览互联网？为年老积点德，现在就考虑亲和力吧！——译者注）。亲和力不仅与有严重残障人士方便，也使大部分少量消退功能（特别是视觉）的用户更为易用。</p>
<p>这个问题越来越牵涉法律问题了，比如美国的&#8220;508条款&#8221;的采用，试图积极推动强制使用亲和力；在英国，所有的政府网站必须有一个指定的亲和力程度。什么时候才可以有像在建筑物上的亲和措施的立法，以便普遍用在商业网站上？（中国还不知道什么时候有这种立法呢！但不等于我们就不要关注我们设计的网页的合法性。——译者注）</p>
<p>如果能遵循上述的建议，你的HTML应该已经具备了为残障用户服务的高度亲和力。还有更多的创作使你的亲和力更上一层楼，而且不难。见亲和连接和亲和表单指南。</p>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/264432.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-08 12:28 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/08/264432.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>怎么改善现有网站</title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264430.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Wed, 08 Apr 2009 04:21:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264430.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/264430.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/08/264430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/264430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/264430.html</trackback:ping><description><![CDATA[<div class="postText">
<h3>怎么改善现有网站</h3>
<p>我们大部分的设计师依旧在采用传统的表格布局、表现与结构混杂在一起的方式来建立网站。学习使用XHTML CSS的方法需要一个过程，使现有网站符合网站标准也不可能一步到位。最好的方法是循序渐进，分阶段来逐步达到完全符合网站标准的目标。如果你是新手，或者对代码不是很熟悉，也可以采用遵循标准的编辑工具，例如Dreamweaver MX 2004，它是目前支持CSS标准最完善的工具。</p>
<h4>1．初级改善</h4>
<ul>
    <li>为页面添加正确的DOCTYPE </li>
</ul>
<p>很多设计师和开发者都不知道什么是DOCTYPE，DOCTYPE有什么用。DOCTYPE是document type的简写。主要用来说明你用的XHTML或者HTML是什么版本。浏览器根据你DOCTYPE定义的DTD(文档类型定义)来解释页面代码。所以，如果你不注意设置了错误的DOCTYPE，结果会让你大吃一惊。XHTML1.0提供了三种DOCTYPE可选择：</p>
<p>(1)过渡型（Transitional ）</p>
<p class="code"><strong><font color="#60a179">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;</font></strong></p>
<p>(2)严格型（Strict ）</p>
<p class="code"><strong><font color="#60a179">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;</font></strong></p>
<p>(3)框架型（Frameset ）</p>
<p class="code"><strong><font color="#60a179">&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"&gt;</font></strong></p>
<p>对于我们初级改善来说，只要选用过渡型的声明就可以了。它依然可以兼容你的表格布局、表现标识等，不至于让你觉得变化太大，难以掌握。</p>
<p>Tip:你懒得输入上面过渡型代码的话，可以访问http://www.macromedia.com/网站的首页，然后查看源代码，把head区同样的代码拷贝粘贴就可以了。</p>
<ul>
    <li>设定一个名字空间（Namespace） </li>
</ul>
<p>直接在DOCTYPE声明后面添加如下代码：</p>
<p class="code"><strong><font color="#60a179">&lt;html XMLns="http://www.w3.org/1999/xhtml" &gt;</font></strong></p>
<p>一个namespace是收集元素类型和属性名字的一个详细的DTD，namespace声明允许你通过一个在线地址指向来识别你的namespace。只要照样输入代码就可以。</p>
<ul>
    <li>声明你的编码语言 </li>
</ul>
<p>为了被浏览器正确解释和通过标识校验，所有的XHTML文档都必须声明它们所使用的编码语言。代码如下：</p>
<p class="code"><strong><font color="#60a179">&lt;meta http-equiv="Content-Type" content="text/html; charset=GB2312" /&gt;</font></strong></p>
<p>这里声明的编码语言是简体中文GB2312，你如果需要制作繁体内容，可以定义为BIG5。</p>
<ul>
    <li>用小写字母书写所有的标签 </li>
</ul>
<p>XML对大小写是敏感的，所以，XHTML也是大小写有区别的。所有的XHTML元素和属性的名字都必须使用小写。否则你的文档将被W3C校验认为是无效的。例如下面的代码是不正确的：</p>
<p class="code"><strong><font color="#60a179">&lt;TITLE&gt;公司简介&lt;/TITLE&gt;</font></strong></p>
<p>正确的写法是：</p>
<p class="code"><strong><font color="#60a179">&lt;title&gt;公司简介&lt;/title&gt;</font></strong></p>
同样的，&lt;P&gt;改成&lt;p&gt;，&lt;B&gt;改成&lt;b&gt;等等。这步转换很简单。
<ul>
    <li>为图片添加 alt 属性 </li>
</ul>
<p>为所有图片添加alt属性。alt属性指定了当图片不能显示的时候就显示供替换文本，这样做对正常用户可有可无，但对纯文本浏览器和使用屏幕阅读机的用户来说是至关重要的。只有添加了alt属性，代码才会被W3C正确性校验通过。注意的是我们要添加有意义的alt属性，象下面这样的写法毫无意义：</p>
<p class="code"><strong><font color="#60a179">&lt;img src="logo_unc_120x30.gif" alt="logo_unc_120x30.gif"&gt;</font></strong></p>
<p>正确的写法：</p>
<p class="code"><strong><font color="#60a179">&lt;img src="logo_unc_120x30.gif" alt="UNC公司标志，点击返回首页"&gt;</font></strong></p>
<ul>
    <li>给所有属性值加引号 </li>
</ul>
<p>在HTML中，你可以不需要给属性值加引号，但是在XHTML中，它们必须被加引号。</p>
<p>例：height="100"，而不能是height=100。</p>
<ul>
    <li>关闭所有的标签 </li>
</ul>
<p>在XHTML中，每一个打开的标签都必须关闭。就象这样：</p>
<p class="code"><strong><font color="#60a179">&lt;p&gt;每一个打开的标签都必须关闭。&lt;/p&gt;</font></strong></p>
<p class="code"><strong><font color="#60a179">&lt;b&gt;HTML可以接受不关闭的标，XHTML就不可以。&lt;/b&gt;</font></strong></p>
<p>这个规则可以避免HTML的混乱和麻烦。举例来说：如果你不关闭图像标签，在一些浏览器中就可能出现CSS显示问题。用这种方法能确保页面和你设计的一样显示。需要说明的是：空标签也要关闭，在标签尾部使用一个正斜杠"/"来关闭它们自己。例如：</p>
<p class="code"><strong><font color="#60a179">&lt;br /&gt;</font></strong></p>
<p class="code"><strong><font color="#60a179">&lt;img src="webstandards.gif" /&gt;</font></strong></p>
<p>经过上述七个规则处理后，页面就基本符合XHTML1.0的要求。但我们还需要校验一下是否真的符合标准了。我们可以利用W3C提供免费校验服务（http://validator.w3.org/）。发现错误后逐个修改。在后面的资源列表中我们也提供了其他校验服务和对校验进行指导的网址，可以作为W3C校验的补充。当最后通过了XHTML验证，恭喜你已经向网站标准迈出了一大步。不是想象中的那么难吧！</p>
<h4>2．中级改善</h4>
<p>接下来我们的改善主要在结构和表现相分离上，这一步不象第一步那么容易实现，我们需要观念上的转变，以及对CSS2技术的学习和运用。但学习任何新知识都需要花点时间的，不是吗？诀窍在于边做边学。假如你一直采用表格布局，根本没用过 CSS，也不必急于跟表格布局说再见，你可以先用样式表代替 font 标签。随着你学到的越多，你能做的就越多。好，一起来看看我们需要做哪些事：</p>
<ul>
    <li>用CSS定义元素外观 </li>
</ul>
<p>我们在写标识时已经养成习惯，当希望字体大点就用&lt;h1&gt;，希望在前面加个点符号就用&lt;li&gt;。我们总是想&lt;h1&gt;的意思是大的，&lt;li&gt;的意思是圆点，&lt;b&gt;的意思是&#8220;加粗文本&#8221;。而实际上， &lt;h1&gt;能变成你想要的任何样子，通过CSS，&lt;h1&gt;能变成小的字体，&lt;p&gt;文本能够变成巨大的、粗体的，&lt;li&gt;能够变成一张图片等等。我们不能强迫用结构元素实现表现效果，我们应该使用CSS来确定那些元素的外观。例如，我们可以使原来默认的6级标题可以看起来大小一样：</p>
<p class="code"><strong><font color="#60a179">h1, h2, h3, h4, h5, h6{ font-family: 宋体, serif; font-size: 12px; }</font></strong></p>
<ul>
    <li>用结构化元素代替无意义的垃圾 </li>
</ul>
<p>许多人可能从来都不知道HTML和XHTML元素设计本意是用来表达结构的。我们很多人已经习惯用元素来控制表现，而不是结构。例如，一段列表内容可能会使用下面这样的标识：</p>
<p class="code"><strong><font color="#60a179">句子一&lt;br /&gt; 句子二&lt;br /&gt; 句子三&lt;br /&gt;</font></strong></p>
<p>如果我们采用一个无序列表代替会更好：</p>
<p class="code"><strong><font color="#60a179">&lt;ul&gt; &lt;li&gt;句子一&lt;/li&gt; &lt;li&gt;句子二&lt;/li&gt; &lt;li&gt;句子三&lt;/li&gt; &lt;/ul&gt;</font></strong></p>
<p>你或许会说&#8220;但是&lt;li&gt;显示的是一个圆点，我不想用圆点&#8221;。事实上，CSS没有设定元素看起来是什么样子，你完全可以用CSS关掉圆点。</p>
<ul>
    <li>给每个表格和表单加上id </li>
</ul>
<p>给表格或表单赋予一个唯一的、结构的标记，例如</p>
<p class="code"><strong><font color="#60a179">&lt;table id="menu"&gt;</font></strong></p>
<p>接下来，在书写样式表的时候，你就可以创建一个&#8220;menu&#8221;的选择器，并且关联一个CSS规则，用来告诉表格单元、文本标签和所有其他元素怎么去显示。这样，不需要对每个&lt;td&gt;标签附带一些多余的、占用带宽的表现层的高、宽、对齐和背景颜色等等属性。只需要一个附着的标记（标记&#8220;menu&#8221;的id标记），你就可以在一个分离的样式表内为干净的、紧凑的代码标记进行特别的表现层处理。</p>
<p>中级改善我们这里先列主要的三点，但其中包含的内容和知识点非常多，需要我们逐步学习和掌握，直到最后实现完全采用CSS而不才用任何表格实现布局。</p>
</div>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/264430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-08 12:21 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/08/264430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Mysql 4.0 安装</title><link>http://www.blogjava.net/zhangyy130/archive/2009/04/02/263549.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Thu, 02 Apr 2009 07:10:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/04/02/263549.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/263549.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/04/02/263549.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/263549.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/263549.html</trackback:ping><description><![CDATA[<p>CREATE USER 'dream2008'@'%' IDENTIFIED BY 'dream1234';<br />
GRANT ALL PRIVILEGES ON *.* TO 'dream2008'@'localhost' IDENTIFIED BY 'dream1234'WITH GRANT OPTION </p>
<p><br />
MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;</p>
<p>MYSQL数据库实用学习资料之常用命令集合<br />
2007-10-12　源自:赛迪网　网友评论 0 条　进入视频教程<br />
Mysql数据库是一个多用户，多线程的关系型数据库，是一个客户机/服务器结构的应用程序。它是对个人用户和商业用户是免费的. </p>
<p><br />
Mysql数据库具有以下优点： </p>
<p><br />
1.同时访问数据库的用户的数量不受限制 </p>
<p>2.可以保存超过5千万条的记录 </p>
<p>3.是目前市场上现有数据库产品中运行速度最快的数据库系统 </p>
<p>4.用户权限设置简单、有效。 </p>
<p><br />
Mysql数据库常用命令： </p>
<p><br />
启动Mysql数据库 </p>
<p><br />
C:/&gt;cd Mysql5.0/bin </p>
<p>C:/Mysql5.0/bin&gt;mysqld &#8211;install 安装Mysql服务 </p>
<p>C:/Mysql5.0/bin&gt;net start mysql 启动Mysql服务 </p>
<p>请求的服务已经启动。 </p>
<p><br />
连接mysql </p>
<p>用户需要提供Mysql的用户名和密码来连接服务器，如果服务器不是在本机，则还需要一个主机名或IP来指定服务器的位置。 </p>
<p>C:/Mysql5.0/bin&gt;mysql -h localhost -u root -p </p>
<p>Enter password: **** </p>
<p>Welcome to the MySQL monitor. Commands end with ; or /g. </p>
<p>Your MySQL connection id is 6 to server version: 5.0.18-nt </p>
<p><br />
Type 'help;' or '/h' for help. Type '/c' to clear the buffer. </p>
<p><br />
mysql&gt; </p>
<p>使用一条简单的查询语句 </p>
<p><br />
mysql&gt; select version(),current_date; </p>
<p>mysql&gt; select version();select now(); </p>
<p><br />
新建或删除一个数据库 </p>
<p><br />
Mysql&gt;create database mydb; </p>
<p>Mysql&gt; drop database mydb; </p>
<p><br />
打开的数据库的命令 </p>
<p><br />
mysql&gt; use mysql </p>
<p>Database changed </p>
<p><br />
查看数据库的命令 </p>
<p><br />
mysql&gt; show databases; </p>
<p><br />
查看数据表的详细结构 </p>
<p><br />
mysql&gt; desc func; </p>
<p><br />
新建数据库 </p>
<p><br />
mysql&gt; create database school; </p>
<p>Query OK, 1 row affected (0.00 sec) </p>
<p><br />
新建表 </p>
<p><br />
mysql&gt; create table user01( </p>
<p>-&gt; id varchar(20) NOT NULL, </p>
<p>-&gt; userName varchar(10) NOT NULL, </p>
<p>-&gt; age int(11) default'0', </p>
<p>-&gt; sex char(2) NOT NULL default'm', </p>
<p>-&gt; PRIMARY KEY (id) </p>
<p>-&gt; )TYPE=InnoDB; </p>
<p>Query OK, 0 rows affected, 1 warning (0.02 sec)mysql&gt;desc student; </p>
<p><br />
插入和删除表中的数据 </p>
<p><br />
Create table student(stuName varchar(20),age varchar(20),id varchar(20),set0 char(1)); </p>
<p><br />
插入 </p>
<p><br />
mysql&gt; insert into student(id,stuName) values('1','tomcat'); </p>
<p>Query OK, 1 row affected (0.00 sec) </p>
<p><br />
删除 </p>
<p><br />
mysql&gt; delete from student where id='1'; </p>
<p>Query OK, 1 row affected (0.01 sec) </p>
<p><br />
删除表中所有数据 </p>
<p><br />
mysql&gt; truncate table student; </p>
<p>Query OK, 1 row affected (0.01 sec) </p>
<p><br />
删除表 </p>
<p><br />
mysql&gt; create table temp(t varchar(1)); </p>
<p>Query OK, 0 rows affected (0.00 sec) </p>
<p><br />
mysql&gt; drop table temp; </p>
<p>Query OK, 0 rows affected (0.00 sec) </p>
<p><br />
创建新用户并给予权限 </p>
<p><br />
mysql&gt; grant all privileges on *.* to dbuser@localhost identified by '1234' </p>
<p>with grant option; </p>
<p><br />
更改Mysql用户密码 </p>
<p><br />
c:/Mysql5.0/bin&gt;mysqladmin -u root -p password 1234 </p>
<p>Enter password: **** </p>
<p><br />
备份数据库及表 </p>
<p><br />
我们用mysqldump命令来备份数据库 </p>
<p>c:/mysql/bin/&gt;mysqldump &#8211;u root &#8211;p 3306 mysql&gt;d:/backup.sql </p>
<p>执行此语句将把mydb 备份到D盘的backup.sql文件中 </p>
<p><br />
备份多个数据库表 </p>
<p><br />
c:/mysql/bin/&gt;mysqldump &#8211;u root &#8211;p 3306 school user01 user &gt;d:/backup.sql </p>
<p>此句的意思是把school库中的user01表和user表的内容和表的定义备份到D盘backup.sql文件中。 </p>
<p><br />
备份所有的数据库 </p>
<p><br />
c:/myql/bin&gt;mysqldump &#8211;u root &#8211;p 3306 &#8211;all &#8211;database&gt;d:backup.sql </p>
<p><br />
还原Mysql数据库 </p>
<p>c:/mysql/bin/mysql &#8211;u root &#8211;p 3306 school </p>
<p>还原其中的一个表 </p>
<p><br />
mysql&gt; source d:/books.sql; </p>
<p>ERROR: </p>
<p>Unknown command '/b'. </p>
<p>Query OK, 0 rows affected (0.00 sec) </p>
<p>Query OK, 1 row affected (0.00 sec) </p>
<p><br />
退出Mysql连接 </p>
<p><br />
mysql&gt;quit(exit) </p>
<p><br />
关闭mysql服务 </p>
<p><br />
C:/mysql/bin&gt;net mysql </p>
<p>(责任编辑：卢兆林） </p>
<p><br />
mysql4.0.26 win32 下载及安装方法<br />
[color=blue]mysql4.0.26安装方法:[/color]<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 解压下载后的mysql-4.0.26-win32.rar,执行setup.exe,默认安装,一路NEXT就可以了.<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 安装完毕后，在&#8220;开始&#8221;菜单的&#8220;运行&#8221;中输入：C:\MySQL\bin\mysqld-nt.exe -install ([color=Red]这个版本建议安装在C盘[/color])，运行成功之后再在&#8220;开始&#8221;菜单的&#8220;运行&#8221;输入：net mysql start ，将会启动 MySQL 服务.<br />
&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; 默认管理员root 密码空 请使用PHPMYADMIN 修改.</p>
<p>[color=red]注: 这个版本建议安装在C盘,如果安装后不能启动,重启服务器后,请直接到系统服务里面去启动MYSQL.</p>
<p>[/color][color=Blue]怎么删除mysql服务?[/color]<br />
开始-运行-CMD-进入MYsql的安装目录下的bin目录输入下面命令 <br />
D:\mysql5\bin&gt;mysqld-nt.exe -remove</p>
<p>&nbsp;</p>
<p><br />
&nbsp;</p>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/263549.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-04-02 15:10 <a href="http://www.blogjava.net/zhangyy130/archive/2009/04/02/263549.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP/IP协议</title><link>http://www.blogjava.net/zhangyy130/archive/2009/03/31/263062.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Tue, 31 Mar 2009 02:54:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/03/31/263062.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/263062.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/03/31/263062.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/263062.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/263062.html</trackback:ping><description><![CDATA[<h1>TCP/IP协议</h1>
<div id="lemmaContent">　<br />
<br />
　　TCP/IP（Transmission Control Protocol/Internet Protocol)的简写，中文译名为传输控制协议/互联网络协议）协议是<a href="http://baike.baidu.com/view/11165.htm" target="_blank">Internet</a>最基本的协议，简单地说，就是由网络层的IP协议和传输层的TCP协议组成的。<br />
<br />
　　众所周知，如今电脑上因特网都要作TCP/IP协议设置，显然该协议成了当今地球村&#8220;人与人&#8221;之间的&#8220;牵手协议&#8221;。 <br />
<br />
　　1997年，为了褒奖对因特网发展作出突出贡献的科学家，并对TCP/IP协议作出充分肯定，美国授予为因特网发明和定义TCP/IP协议的文顿&#183;瑟夫和卡恩&#8220;国家技术金奖&#8221;。这无疑使人们认识到TCP/IP协议的重要性。 <br />
<br />
　　在阿帕网（ARPR）产生运作之初，通过接口信号处理机实现互联的电脑并不多，大部分电脑相互之间不兼容，在一台电脑上完成的工作，很难拿到另一台电脑上去用，想让硬件和软件都不一样的电脑联网，也有很多困难。当时美国的状况是，陆军用的电脑是DEC系列产品，海军用的电脑是Honeywell中标机器，空军用的是IBM公司中标的电脑，每一个军种的电脑在各自的系里都运行良好，但却有一个大弊病：不能共享资源。 <br />
<br />
　　当时科学家们提出这样一个理念：&#8220;所有电脑生来都是平等的。&#8221;为了让这些&#8220;生来平等&#8221;的电脑能够实现&#8220;资源共享&#8221;就得在这些系统的标准之上，建立一种大家共同都必须遵守的标准，这样才能让不同的电脑按照一定的规则进行&#8220;谈判&#8221;，并且在谈判之后能&#8220;握手&#8221;。 <br />
<br />
　　在确定今天因特网各个电脑之间&#8220;谈判规则&#8221;过程中，最重要的人物当数瑟夫（Vinton G.Cerf）。正是他的努力，才使今天各种不同的电脑能按照协议上网互联。瑟夫也因此获得了与克莱因罗克（&#8220;因特网之父&#8221;）一样的美称&#8220;互联网之父&#8221;。 <br />
<br />
　　瑟夫从小喜欢标新立异，坚强而又热情。中学会书时，就被允许使用加州大学洛杉矶分校的电脑，他认为&#8220;为电脑编程序是个非常激动人心的事，&#8230;只要把程序编好，就可以让电脑做任何事情。&#8221;1965年，瑟夫从斯坦福大学毕业到IBM的一家公司当系统工程师，工作没多久，瑟夫就觉得知识不够用，于是到加州大学洛杉矶分校攻读博士，那时，正逢阿帕网的建立，&#8220;接口信号处理机&#8221;（IMP）的研试及网络测评中心的建立，瑟夫也成了著名科学家克莱因罗克手下的一位学生。瑟夫与另外三位年轻人（温菲尔德、克罗克、布雷登）参与了阿帕网的第一个节点的联接。此后不久，BBN公司对工作中各种情况发展有很强判断能力、被公认阿帕网建成作出巨大贡献的鲍伯&#183;卡恩（Bob Kahn）也来到了加州大学洛杉矶分校。 在那段日子里，往往是卡恩提出需要什么软件，而瑟夫则通宵达旦地把符合要求的软件给编出来，然后他们一起测试这些软件，直至能正常运行。当时的主要格局是这样的，罗伯茨提出网络思想设计网络布局，卡恩设计阿帕网总体结构，克莱因罗克负责网络测评系统，还有众多的科学家、研究生参与研究、试验。69年9月阿帕网诞生、运行后，才发现各个IMP连接的时候，需要考虑用各种电脑都认可的信号来打开通信管道，数据通过后还要关闭通道。否则这些IMP不会知道什么时候应该接收信号，什么时候该结束，这就是我们现在所说的通信&#8220;协议&#8221;的概念。70年12月制定出来了最初的通信协议j 由卡恩开发、瑟夫参与的&#8220;网络控制协议&#8221;（NCP），但要真正建立一个共同的标准很不容易，72年10月国际电脑通信大会结束后，科学家们都在为此而努力。&#8220;包切换&#8221;理论为网络之间的联接方式提供了理论基础。卡恩在自己研究的基础上，认识到只有深入理解各种操作系统的细节才能建立一种对各种操作系统普适的协议，73年卡恩请瑟夫一起考虑这个协议的各个细节，他们这次合作的结果产生了目前在开放系统下的所有网民和网管人员都在使用的&#8220;传输控制协议&#8221;（TCP，Transsmission-Control Protocol）和&#8220;因特网协议&#8221;（IP，Internet Protocol）即TCP/IP协议。 <br />
<br />
　　通俗而言：TCP负责发现传输的问题，一有问题就发出信号，要求重新传输，直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台电脑规定一个地址。1974年12月，卡恩、瑟夫的第一份TCP协议详细说明正式发表。当时美国国防部与三个科学家小组签定了完成TCP/IP的协议，结果由瑟夫领衔的小组捷足先登，首先制定出了通过详细定义的TCP/IP协议标准。当时作了一个试验，将信息包通过点对点的卫星网络，再通过陆地电缆，再通过卫星网络，再由地面传输，贯串欧洲和美国，经过各种电脑系统，全程9.4万公里竟然没有丢失一个数据位，远距离的可靠数据传输证明了TCP/IP协议的成功。 <br />
<br />
　　1983年1月1日，运行较长时期曾被人们习惯了的NCP被停止使用，TCP/IP协议作为因特网上所有主机间的共同协议，从此以后被作为一种必须遵守的规则被肯定和应用。正是由于TCP/IP协议，才有今天&#8220;地球村&#8221;因特网的巨大发展。
<div class="bpctrl"></div>
<h2 class="first">
<div class="text_edit">&nbsp;</div>
什么是 TCP/IP？</h2>
　　TCP/IP 是供已连接因特网的计算机进行通信的通信协议。<br />
<br />
　　TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol)。<br />
<br />
　　TCP/IP 定义了电子设备（比如计算机）如何连入因特网，以及数据如何在它们之间传输的标准。
<div class="bpctrl">&nbsp;</div>
<h2 class="">TCP/IP协议介绍</h2>
　　
<h3>TCP/IP的通讯协议</h3>
<br />
<br />
　　<br />
<br />
　　这部分简要介绍一下TCP/IP的内部结构，为讨论与互联网有关的安全问题打下基础。TCP/IP协议组之所以流行，部分原因是因为它可以用在各种各样的信道和底层协议（例如T1和X.25、以太网以及RS-232串行接口）之上。确切地说，TCP/IP协议是一组包括TCP协议和IP协议，UDP（User Datagram Protocol）协议、ICMP（Internet Control Message Protocol）协议和其他一些协议的协议组。 <br />
<br />
　　
<h3>TCP/IP整体构架概述</h3>
<br />
<br />
　　<br />
<br />
　　TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型，是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构，每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为： <br />
<br />
　　应用层：应用程序间沟通的层，如简单电子邮件传输（SMTP）、文件传输协议（FTP）、网络远程访问协议（Telnet）等。 <br />
<br />
　　传输层：在此层中，它提供了节点间的数据传送服务，如传输控制协议（TCP）、用户数据报协议（UDP）等，TCP和UDP给数据包加入传输数据并把它传输到下一层中，这一层负责传送数据，并且确定数据已被送达并接收。 <br />
<br />
　　互连网络层：负责提供基本的数据封包传送功能，让每一块数据包都能够到达目的主机（但不检查是否被正确接收），如网际协议（IP）。 <br />
<br />
　　网络接口层：对实际的网络媒体的管理，定义如何使用实际网络（如Ethernet、Serial Line等）来传送数据。 <br />
<br />
　　
<h3>TCP/IP中的协议</h3>
<br />
<br />
　　以下简单介绍TCP/IP中的协议都具备什么样的功能，都是如何工作的： <br />
<br />
　　1． IP<br />
<br />
　　网际协议IP是TCP/IP的心脏，也是网络层中最重要的协议。 <br />
<br />
　　IP层接收由更低层（网络接口层例如以太网设备驱动程序）发来的数据包，并把该数据包发送到更高层---TCP或UDP层；相反，IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的，因为IP并没有做任何事情来确认数据包是按顺序发送的或者没有被破坏。IP数据包中含有发送它的主机的地址（源地址）和接收它的主机的地址（目的地址）。 <br />
<br />
　　高层的TCP和UDP服务在接收数据包时，通常假设包中的源地址是有效的。也可以这样说，IP地址形成了许多服务的认证基础，这些服务相信数据包是从一个有效的主机发送来的。IP确认包含一个选项，叫作IP source routing，可以用来指定一条源地址和目的地址之间的直接路径。对于一些TCP和UDP的服务来说，使用了该选项的IP包好像是从路径上的最后一个系统传递过来的，而不是来自于它的真实地点。这个选项是为了测试而存在的，说明了它可以被用来欺骗系统来进行平常是被禁止的连接。那么，许多依靠IP源地址做确认的服务将产生问题并且会被非法入侵。 <br />
<br />
　　2. TCP<br />
<br />
　　如果IP数据包中有已经封好的TCP数据包，那么IP将把它们向&#8216;上&#8217;传送到TCP层。TCP将包排序并进行错误检查，同时实现虚电路间的连接。TCP数据包中包括序号和确认，所以未按照顺序收到的包可以被排序，而损坏的包可以被重传。 <br />
<br />
　　TCP将它的信息送到更高层的应用程序，例如Telnet的服务程序和客户程序。应用程序轮流将信息送回TCP层，TCP层便将它们向下传送到IP层，设备驱动程序和物理介质，最后到接收方。 <br />
<br />
　　面向连接的服务（例如Telnet、FTP、rlogin、X Windows和SMTP）需要高度的可靠性，所以它们使用了TCP。DNS在某些情况下使用TCP（发送和接收域名数据库），但使用UDP传送有关单个主机的信息。 <br />
<br />
　　3.UDP<br />
<br />
　　UDP与TCP位于同一层，但它不管数据包的顺序、错误或重发。因此，UDP不被应用于那些使用虚电路的面向连接的服务，UDP主要用于那些面向查询---应答的服务，例如NFS。相对于FTP或Telnet，这些服务需要交换的信息量较小。使用UDP的服务包括NTP（网络时间协议）和DNS（DNS也使用TCP）。 <br />
<br />
　　欺骗UDP包比欺骗TCP包更容易，因为UDP没有建立初始化连接（也可以称为握手）（因为在两个系统间没有虚电路），也就是说，与UDP相关的服务面临着更大的危险。 <br />
<br />
　　4.ICMP<br />
<br />
　　ICMP与IP位于同一层，它被用来传送IP的的控制信息。它主要是用来提供有关通向目的地址的路径信息。ICMP的&#8216;Redirect&#8217;信息通知主机通向其他系统的更准确的路径，而&#8216;Unreachable&#8217;信息则指出路径有问题。另外，如果路径不可用了，ICMP可以使TCP连接&#8216;体面地&#8217;终止。PING是最常用的基于ICMP的服务。 <br />
<br />
　　5. TCP和UDP的端口结构<br />
<br />
　　TCP和UDP服务通常有一个客户/服务器的关系，例如，一个Telnet服务进程开始在系统上处于空闲状态，等待着连接。用户使用Telnet客户程序与服务进程建立一个连接。客户程序向服务进程写入信息，服务进程读出信息并发出响应，客户程序读出响应并向用户报告。因而，这个连接是双工的，可以用来进行读写。 <br />
<br />
　　两个系统间的多重Telnet连接是如何相互确认并协调一致呢？TCP或UDP连接唯一地使用每个信息中的如下四项进行确认： <br />
<br />
　　源IP地址 发送包的IP地址。 <br />
<br />
　　目的IP地址 接收包的IP地址。 <br />
<br />
　　源端口 源系统上的连接的端口。 <br />
<br />
　　目的端口 目的系统上的连接的端口。 <br />
<br />
　　端口是一个软件结构，被客户程序或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口，例如，SMTP使用25、Xwindows使用6000。这些端口号是&#8216;广为人知&#8217;的，因为在建立与特定的主机或服务的连接时，需要这些地址和目的地址进行通讯。<br />
<br />
　　
<h3>IP协议</h3>
<br />
<br />
　　　IP（Internet Protocol）协议的英文名直译就是：因特网协议。从这个名称我们就可以知道IP协议的重要性。在现实生活中，我们进行货物运输时都是把货物包装成一个个的纸箱或者是集装箱之后才进行运输，在网络世界中各种信息也是通过类似的方式进行传输的。IP协议规定了数据传输时的基本单元和格式。如果比作货物运输，IP协议规定了货物打包时的包装箱尺寸和包装的程序。 除了这些以外，IP协议还定义了数据包的递交办法和路由选择。同样用货物运输做比喻，IP协议规定了货物的运输方法和运输路线。<br />
<br />
　　
<h3>TCP协议</h3>
<br />
<br />
　　　我们已经知道了IP协议很重要，IP协议已经规定了数据传输的主要内容，那TCP（Transmission Control Protocol）协议是做什么的呢？不知大家发现没有，在IP协议中定义的传输是单向的，也就是说发出去的货物对方有没有收到我们是不知道的。就好像8毛钱一份的平信一样。那对于重要的信件我们要寄挂号信怎么办呢？TCP协议就是帮我们寄&#8220;挂号信&#8221;的。TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定。简单的说在TCP模式中，对方发一个数据包给你，你要发一个确认数据包给对方。通过这种确认来提供可靠性。<br />
<br />
　　
<h3>1.1 TCP/IP参考模型</h3>
<br />
<br />
　　TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型，是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网路层、传输层、话路层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构，每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为：<br />
<br />
　　应用层：应用程序间沟通的层，如简单电子邮件传输（SMTP）、文件传输协议（FTP）、网络远程访问协议（Telnet）等。<br />
<br />
　　传输层：在此层中，它提供了节点间的数据传送服务，如传输控制协议（TCP）、用户数据报协议（UDP）等，TCP和UDP给数据包加入传输数据并把它传输到下一层中，这一层负责传送数据，并且确定数据已被送达并接收。 <br />
<br />
　　互连网络层：负责提供基本的数据封包传送功能，让每一块数据包都能够到达目的主机（但不检查是否被正确接收），如网际协议（IP）。 <br />
<br />
　　网络接口层：对实际的网络媒体的管理，定义如何使用实际网络（如Ethernet、Serial Line等）来传送数据。<br />
<br />
　　
<h3>1. 2 网间协议IP</h3>
<br />
<br />
　　　Internet 上使用的一个关键的底层协议是网际协议，通常称IP协议。我们利用一个共同遵守的通信协议，从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。要使两台计算机彼此之间进行通信，必须使两台计算机使用同一种"语言"。通信协议正像两台计算机交换信息所使用的共同语言，它规定了通信双方在通信中所应共同遵守的约定。 <br />
<br />
　　计算机的通信协议精确地定义了计算机在彼此通信过程的所有细节。例如，每台计算机发送的信息格式和含义，在什么情况下应发送规定的特殊信息，以及接收方的计算机应做出哪些应答等等。 <br />
<br />
　　网际协议IP协议提供了能适应各种各样网络硬件的灵活性，对底层网络硬件几乎没有任何要求，任何一个网络只要可以从一个地点向另一个地点传送二进制数据，就可以使用IP协议加入 Internet 了。 <br />
<br />
　　如果希望能在 Internet 上进行交流和通信，则每台连上 Internet 的计算机都必须遵守IP协议。为此使用 Internet 的每台计算机都必须运行IP软件，以便时刻准备发送或接收信息。 <br />
<br />
　　IP协议对于网络通信有着重要的意义：网络中的计算机通过安装IP软件，使许许多多的局域网络构成了一个庞大而又严密的通信系统。从而使 Internet 看起来好像是真实存在的，但实际上它是一种并不存在的虚拟网络，只不过是利用IP协议把全世界上所有愿意接入 Internet 的计算机局域网络连接起来，使得它们彼此之间都能够通信。 <br />
<br />
　　
<h3>1.3 传输控制协议TCP</h3>
<br />
<br />
　　尽管计算机通过安装IP软件，从而保证了计算机之间可以发送和接收资料，但IP协议还不能解决资料分组在传输过程中可能出现的问题。因此，若要解决可能出现的问题，连上 Internet 的计算机还需要安装TCP协议来提供可靠的并且无差错的通信服务。 <br />
<br />
　　TCP协议被称作一种端对端协议。这是因为它为两台计算机之间的连接起了重要作用：当一台计算机需要与另一台远程计算机连接时，TCP协议会让它们建立一个连接、发送和接收资料以及终止连接。 <br />
<br />
　　传输控制协议TCP协议利用重发技术和拥塞控制机制，向应用程序提供可靠的通信连接，使它能够自动适应网上的各种变化。即使在 Internet 暂时出现堵塞的情况下，TCP也能够保证通信的可靠。 <br />
<br />
　　众所周知， Internet 是一个庞大的国际性网络，网络上的拥挤和空闲时间总是交替不定的，加上传送的距离也远近不同，所以传输资料所用时间也会变化不定。TCP协议具有自动调整"超时值"的功能，能很好地适应 Internet 上各种各样的变化，确保传输数值的正确。 <br />
<br />
　　因此，从上面我们可以了解到：IP协议只保证计算机能发送和接收分组资料，而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。 <br />
<br />
　　综上所述，虽然IP和TCP这两个协议的功能不尽相同，也可以分开单独使用，但它们是在同一时期作为一个协议来设计的，并且在功能上也是互补的。只有两者的结合，才能保证 Internet 在复杂的环境下正常运行。凡是要连接到 Internet 的计算机，都必须同时安装和使用这两个协议，因此在实际中常把这两个协议统称作TCP/IP协议。 <br />
<br />
　　
<h3>1.4 IP地址及其分类</h3>
<br />
<br />
　　在Internet上连接的所有计算机，从大型机到微型计算机都是以独立的身份出现，我们称它为主机。为了实现各主机间的通信，每台主机都必须有一个唯一的网络地址。就好像每一个住宅都有唯一的门牌一样，才不至于在传输资料时出现混乱。 <br />
<br />
　　Internet的网络地址是指连入Internet网络的计算机的地址编号。所以，在Internet网络中，网络地址唯一地标识一台计算机。 <br />
<br />
　　我们都已经知道，Internet是由几千万台计算机互相连接而成的。而我们要确认网络上的每一台计算机，靠的就是能唯一标识该计算机的网络地址，这个地址就叫做IP（Internet Protocol的简写）地址，即用Internet协议语言表示的地址。 <br />
<br />
　　目前，在Internet里，IP地址是一个32位的二进制地址，为了便于记忆，将它们分为4组，每组8位，由小数点分开，用四个字节来表示，而且，用点分开的每个字节的数值范围是0~255，如202.116.0.1，这种书写方法叫做点数表示法。 <br />
<br />
　　IP地址可确认网络中的任何一个网络和计算机，而要识别其它网络或其中的计算机，则是根据这些IP地址的分类来确定的。一般将IP地址按节点计算机所在网络规模的大小分为A，B，C三类，默认的网络屏蔽是根据IP地址中的第一个字段确定的。 <br />
<br />
　　1. A类地址 <br />
<br />
　　A类地址的表示范围为：10.0.0.0~126.255.255.255，默认网络屏蔽为：255.0.0.0；A类地址分配给规模特别大的网络使用。A类网络用第一组数字表示网络本身的地址，后面三组数字作为连接于网络上的主机的地址。分配给具有大量主机（直接个人用户）而局域网络个数较少的大型网络。例如IBM公司的网络。 <br />
<br />
　　2. B类地址 <br />
<br />
　　B类地址的表示范围为：127.0.0.0~191.255.255.255，默认网络屏蔽为：255.255.0.0；B类地址分配给一般的中型网络。B类网络用第一、二组数字表示网络的地址，后面两组数字代表网络上的主机地址。 <br />
<br />
　　3. C类地址 <br />
<br />
　　C类地址的表示范围为：192.0.0.0~223.255.255.255，默认网络屏蔽为：255.255.255.0；C类地址分配给小型网络，如一般的局域网，它可连接的主机数量是最少的，采用把所属的用户分为若干的网段进行管理。C类网络用前三组数字表示网络的地址，最后一组数字作为网络上的主机地址。 <br />
<br />
　　RFC 1918留出了3块IP地址空间（1个A类地址段，16个B类地址段，256个C类地址段）作为私有的内部使用的地址。在这个范围内的IP地址不能被路由到Internet骨干网上；Internet路由器将丢弃该私有地址。<br />
<br />
　　IP地址类别　RFC 1918内部地址范围 <br />
<br />
　　A类　10.0.0.0到10.255.255.255 <br />
<br />
　　B类　172.16.0.0到172.31.255.255<br />
<br />
　　C类　192.168.0.0到192.168.255.255<br />
<br />
　　使用私有地址将网络连至Internet，需要将私有地址转换为公有地址。这个转换过程称为网络地址转换（Network Address Translation，NAT），通常使用路由器来执行NAT转换。<br />
<br />
　　实际上，还存在着D类地址和E类地址。但这两类地址用途比较特殊，在这里只是简单介绍一下：D类地址称为广播地址，供特殊协议向选定的节点发送信息时用。E类地址保留给将来使用。 <br />
<br />
　　连接到Internet上的每台计算机，不论其IP地址属于哪类都与网络中的其它计算机处于平等地位，因为只有IP地址才是区别计算机的唯一标识。所以，以上IP地址的分类只适用于网络分类。 <br />
<br />
　　在Internet中，一台计算机可以有一个或多个IP地址，就像一个人可以有多个通信地址一样，但两台或多台计算机却不能共享一个IP地址。如果有两台计算机的IP地址相同，则会引起异常现象，无论哪台计算机都将无法正常工作。 <br />
<br />
　　顺便提一下几类特殊的IP地址： <br />
<br />
　　1. 广播地址 目的端为给定网络上的所有主机，一般主机段为全0 <br />
<br />
　　2. 单播地址 目的端为指定网络上的单个主机地址 <br />
<br />
　　3. 组播地址 目的端为同一组内的所有主机地址 <br />
<br />
　　4. 环回地址 127.0.0.1 在环回测试和广播测试时会使用 <br />
<br />
　　
<h3>1.5 子网的划分</h3>
<br />
<br />
　　<br />
<br />
　　若公司不上Internet,那一定不会烦恼IP地址的问题,因为可以任意使用所有的IP地址,不管是A类或是B类,这个时候不会想到要用子网,但若是上Internet那IP地址便弥足珍贵了,目前全球一阵Internet热,IP地址已经愈来愈少了,而所申请的IP地址目前也趋保守,而且只有经申请的IP地址能在Internet使用,但对某些公司只能申请到一个C类的IP地址,但又有多个点需要使用,那这时便需要使用到子网,这就需要考虑子网的划分，下面简介子网的原理及如何规划。 <br />
<br />
　　1．5．1 子网掩码（Subnet Mask）的介绍 <br />
<br />
　　设定任何网络上的任何设备不管是主机、个人电脑、路由器等皆需要设定IP地址,而跟随着IP地址的是所谓的子网掩码（NetMask,Subnet Mask),这个子网掩码主要的目的是由IP地址中也能获得网络编码,也就是说IP地址和子网掩码作和而得到网络编码,如下所示： <br />
<br />
　　IP地址<br />
<br />
　　192.10.10.6 11000000.00001010.00001010.00000110 <br />
<br />
　　子网掩码<br />
<br />
　　255.255.255.0 11111111.11111111.11111111.00000000 <br />
<br />
　　AND <br />
<br />
　　------------------------------------------------------------------- <br />
<br />
　　Network Number <br />
<br />
　　192.10.10.0 11000000.00001010.00001010.00000000 <br />
<br />
　　子网掩码有所谓的默认值,如下所示 <br />
<br />
　　类 IP地址 范围 子网掩码<br />
<br />
　　A　1.0.0.0-126.255.255.255 255.0.0.0 <br />
<br />
　　B　128.0.0.0-191.255.255.255 255.255.0.0 <br />
<br />
　　C　192.0.0.0-223.255.255.255 255.255.255.0 <br />
<br />
　　在预设的子网掩码（Net Mask）都只有255的值,在谈到子网掩码（Subnet Mask）时这个值便不一定是255了。在完整一组C类地址中如203.67.10.0-203.67.10.255 子网掩码255.255.255.0,203.67.10.0称之网络编码（Network Number，将IP 地址和子网掩码作和),而203.67.10.255是广播的IP地址,所以这两者皆不能使用,实际只能使用203.67.10.1--203.67.10.254等254个IP地址,这是以255.255.255.0作子网掩码的结果,而所谓Subnet Msk尚可将整组C类地址分成数组网络编码,这要在子网掩码上作手脚,若是要将整组C类地址分成2个网络编码那子网掩码设定为255.255.255.128,若是要将整组C类分成8组网络编码则子网掩码要为255.255.255.224,这是怎么来的,由以上知道网络编码是由IP地址和子网掩码作AND而来的,而且将子网掩码以二进制表示法知道是1的会保留,而为0的去掉 <br />
<br />
　　192.10.10.193--11000000.00001010.00001010.11000001 <br />
<br />
　　255.255.255.0--11111111.11111111.11111111.00000000 <br />
<br />
　　-------------------------------------------------------------- <br />
<br />
　　192.10.10.0--11000000.00001010.00001010.00000000 <br />
<br />
　　以上是以255.255.255.0为子网掩码的结果,网络编码是192.10.10.0,若是使用255.255.255.224作子网掩码结果便有所不同 <br />
<br />
　　192.10.10.193--11000000.00001010.00001010.11000001 <br />
<br />
　　255.255.255.224--11111111.11111111.11111111.11100000 <br />
<br />
　　-------------------------------------------------------------- <br />
<br />
　　192.10.10.192--11000000.00001010.00001010.11000000 <br />
<br />
　　此时网络编码变成了192.10.10.192,这便是子网。那要如何决定所使用的子网掩码,255.255.255.224以二进制表示法为11111111.11111111.11111111.11100000,变化是在最后一组,11100000便是224,以三个位（Bit）可表示2的3次方便是8个网络编码<br />
<br />
　　子网掩码二进制表示法可分几个网络<br />
<br />
　　255.255.255.011111111.11111111.11111111.000000001 <br />
<br />
　　255.255.255.128 <br />
<br />
　　11111111.11111111.11111111.100000002 <br />
<br />
　　255.255.255.192 <br />
<br />
　　11111111.11111111.11111111.110000004 <br />
<br />
　　255.255.255.224 <br />
<br />
　　11111111.11111111.11111111.111000008 <br />
<br />
　　255.255.255.240 <br />
<br />
　　11111111.11111111.11111111.1111000016 <br />
<br />
　　255.255.255.248 <br />
<br />
　　11111111.11111111.11111111.1111100032 <br />
<br />
　　255.255.255.252 <br />
<br />
　　11111111.11111111.11111111.1111110064 <br />
<br />
　　以下使用255.255.255.224将C类地址203.67.10.0分成8组网络编码,各个网络编码及其广播IP地址及可使用之IP地址序号网络编码广播可使用之IP地址<br />
<br />
　　（1）203.67.10.0--203.67.10.31 <br />
<br />
　　203.67.10.1--203.67.10.30 <br />
<br />
　　（2）203.67.10.32--203.67.10.63 <br />
<br />
　　203.67.10.33--203.67.10.62 <br />
<br />
　　（3）203.67.10.64--203.67.10.95 <br />
<br />
　　203.67.10.65--203.67.10.94 <br />
<br />
　　（4）203.67.10.96--203.67.10.127 <br />
<br />
　　203.67.10.97--203.67.10.126 <br />
<br />
　　（5）203.67.10.128--203.67.10.159 <br />
<br />
　　203.67.10.129--203.67.10.158 <br />
<br />
　　（6）203.67.10.160--203.67.10.191 <br />
<br />
　　203.67.10.161--203.67.10.190 <br />
<br />
　　（7）203.67.10.192--203.67.10.223 <br />
<br />
　　203.67.10.193--203.67.10.222 <br />
<br />
　　（8）203.67.10.224--203.67.10.255 <br />
<br />
　　203.67.10.225--203.67.10.254 <br />
<br />
　　可验证所使用的IP地址是否如上表所示 <br />
<br />
　　203.67.10.115--11001011.01000011.00001010.01110011 <br />
<br />
　　255.255.255.224--11111111.11111111.11111111.11100000 <br />
<br />
　　-------------------------------------------------------------- <br />
<br />
　　203.67.10.96--11001011.01000011.00001010.01100000 <br />
<br />
　　203.67.10.55--11001011.01000011.00001010.00110111 <br />
<br />
　　255.255.255.224--11111111.11111111.11111111.11100000 <br />
<br />
　　-------------------------------------------------------------- <br />
<br />
　　203.67.10.32--11001011.01000011.00001010.00100000 <br />
<br />
　　其它的子网掩码所分成的网络编码可自行以上述方法自行推演出来。 <br />
<br />
　　1．5．3 子网的应用 <br />
<br />
　　使用子网是要解决只有一组C类地址但需要数个网络编码的问题,并不是解决IP地址不够用的问题,因为使用子网反而能使用的IP地址会变少,子网通常是使用在跨地域的网络互联之中,两者之间使用路由器连线,同时也上Internet,但只申请到一组C 类IP地址,过路由又需不同的网络,所以此时就必须使用到子网,当然二网络间也可以远程桥接（Remote Bridge，字面翻译）连接,那便没有使用子网的问题。<br />
<br />
　　网关地址<br />
<br />
　　若要使两个完全不同的网络（异构网）连接在一起，一般使用网关，在Internet中两个网络也要通过一台称为网关的计算机实现互联。这台计算机能根据用户通信目标计算机的IP地址，决定是否将用户发出的信息送出本地网络，同时，它还将外界发送给属于本地网络计算机的信息接收过来，它是一个网络与另一个网络相联的通道。为了使TCP/IP协议能够寻址，该通道被赋予一个IP地址，这个IP地址称为网关地址。<br />
<br />
　　完美测试TCP/IP协议简介<br />
<br />
　　安装网络硬件和网络协议之后，我们一般要进行TCP/IP协议的测试工作，那么怎样测试才算是比较全面的测试呢?我们认为，全面的测试应包括局域网和互联网两个方面，因此应从局域网和互联网两个方面测试，以下是我们在实际工作中利用命令行测试TCP/IP配置的步骤： <br />
<br />
　　1、 单击&#8220;开始&#8221;/&#8220;运行&#8221;，输入CMD按回车，打开命令提示符窗口。<br />
<br />
　　2、 首先检查IP地址、子网掩码、默认网关、DNS服务器地址是否正确，输入命令ipconfig /all,按回车。此时显示了你的网络配置，观查是否正确。<br />
<br />
　　3、 输入ping 127.0.0.1，观查网卡是否能转发数据，如果出现&#8220;Request timed out&#8221;，表明配置差错或网络有问题。<br />
<br />
　　4、 Ping一个互联网地址，如ping 202.102.128.68,看是否有数据包传回，以验证与互联网的连接性。<br />
<br />
　　5、 Ping 一个局域网地址，观查与它的连通性。<br />
<br />
　　6、 用nslookup测试DNS解析是否正确，输入如nslookup www.ccidnet.com，查看是否能解析。<br />
<br />
　　如果你的计算机通过了全部测试，则说明网络正常，否则网络可能有不同程度的问题。在此不展开详述。不过，要注意，在使用 ping命令时，有些公司会在其主机设置丢弃ICMP数据包，造成你的ping命令无法正常返回数据包，不防换个网站试试。 <br />
<br />
　　补充：
<div class="bpctrl">&nbsp;</div>
<h2 class=""><a name="3"></a>TCP/IP 协议簇</h2>
　　TCP/IP(Transmission Control Protocol/Internet Protocol)已成为一个事实上的工业<br />
<br />
　　标准。<br />
<br />
　　TCP/IP是一组协议的代名词，它还包括许多协议，组成了TCP/IP协议簇。<br />
<br />
　　TCP/IP协议簇分为四层，IP位于协议簇的第二层(对应OSI的第三层)，TCP位于协议簇的第<br />
<br />
　　三层(对应OSI的第四层)。<br />
<br />
　　TCP和IP是TCP/IP协议簇的中间两层，是整个协议簇的核心，起到了承上启下的作用。<br />
<br />
　　1、接口层<br />
<br />
　　TCP/IP的最低层是接口层，常见的接口层协议有：<br />
<br />
　　Ethernet 802.3、Token Ring 802.5、X.25、Frame reley、HDLC、PPP等。<br />
<br />
　　2、网络层<br />
<br />
　　网络层包括：IP(Internet Protocol)协议、ICMP(Internet Control Message Protocol)<br />
<br />
　　控制报文协议、ARP(Address Resolution Protocol)地址转换协议、RARP(Reverse ARP)反向<br />
<br />
　　地址转换协议。<br />
<br />
　　IP是网络层的核心，通过路由选择将下一跳IP封装后交给接口层。IP数据报是无连接服务<br />
<br />
　　。<br />
<br />
　　ICMP是网络层的补充，可以回送报文。用来检测网络是否通畅。<br />
<br />
　　Ping命令就是发送ICMP的echo包，通过回送的echo relay进行网络测试。<br />
<br />
　　ARP是正向地址解析协议，通过已知的IP，寻找对应主机的MAC地址。<br />
<br />
　　RARP是反向地址解析协议，通过MAC地址确定IP地址。比如无盘工作站和DHCP服务。<br />
<br />
　　3、传输层<br />
<br />
　　传输层协议主要是：传输控制协议TCP(Transmission Control Protocol)和用户数据报协<br />
<br />
　　议UDP(User Datagram rotocol)。<br />
<br />
　　TCP是面向连接的通信协议，通过三次握手建立连接，通讯时完成时要拆除连接，由于TCP<br />
<br />
　　是面向连接的所以只能用于点对点的通讯。<br />
<br />
　　TCP提供的是一种可靠的数据流服务，采用&#8220;带重传的肯定确认&#8221;技术来实现传输的可靠<br />
<br />
　　性。TCP还采用一种称为&#8220;滑动窗口&#8221;的方式进行流量控制，所谓窗口实际表示接收能力，用<br />
<br />
　　以限制发送方的发送速度。 <br />
<br />
　　UDP是面向无连接的通讯协议，UDP数据包括目的端口号和源端口号信息，由于通讯不需要<br />
<br />
　　连接，所以可以实现广播发送。<br />
<br />
　　UDP通讯时不需要接收方确认，属于不可靠的传输，可能会出丢包现象，实际应用中要求<br />
<br />
　　在程序员编程验证。<br />
<br />
　　4、应用层<br />
<br />
　　应用层一般是面向用户的服务。如FTP、TELNET、DNS、SMTP、POP3。<br />
<br />
　　FTP(File Transmision Protocol)是文件传输协议，一般上传下载用FTP服务，数据端口<br />
<br />
　　是20H，控制端口是21H。<br />
<br />
　　Telnet服务是用户远程登录服务，使用23H端口，使用明码传送，保密性差、简单方便。<br />
<br />
　　DNS(Domain Name Service)是域名解析服务，提供域名到IP地址之间的转换。<br />
<br />
　　SMTP(Simple Mail Transfer Protocol)是简单邮件传输协议，用来控制信件的发送、中<br />
<br />
　　转。　<br />
<br />
　　POP3(Post Office Protocol 3)是邮局协议第3版本，用于接收邮件。<br />
<br />
　　数据格式：<br />
<br />
　　数据帧：帧头＋IP数据包＋帧尾 (帧头包括源和目标主机MAC地址及类型,帧尾是校验字)<br />
<br />
　　IP数据包：IP头部＋TCP数据信息 (IP头包括源和目标主机IP地址、类型、生存期等)<br />
<br />
　　TCP数据信息：TCP头部+实际数据 (TCP头包括源和目标主机端口号、顺序号、确认号、校<br />
<br />
　　验字等) </div>
<img src ="http://www.blogjava.net/zhangyy130/aggbug/263062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-03-31 10:54 <a href="http://www.blogjava.net/zhangyy130/archive/2009/03/31/263062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP协议</title><link>http://www.blogjava.net/zhangyy130/archive/2009/03/31/263049.html</link><dc:creator>张永耀</dc:creator><author>张永耀</author><pubDate>Tue, 31 Mar 2009 02:06:00 GMT</pubDate><guid>http://www.blogjava.net/zhangyy130/archive/2009/03/31/263049.html</guid><wfw:comment>http://www.blogjava.net/zhangyy130/comments/263049.html</wfw:comment><comments>http://www.blogjava.net/zhangyy130/archive/2009/03/31/263049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zhangyy130/comments/commentRss/263049.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zhangyy130/services/trackbacks/263049.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt"><span style="font-size: 10pt">TCP：Transmission Control Protocol 传输控制协议<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　首先，TCP建立连接之后，通信双方都同时可以进行数据的传输，其次，他是全双工的；在保证可靠性上，采用超时重传和捎带确认机制。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　在流量控制上，采用滑动窗口协议，协议中规定，对于窗口内未经确认的分组需要重传。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　在拥塞控制上，采用慢启动算法。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　注解：该协议主要用于在主机间建立一个虚拟连接，以实现高可靠性的数据包交换。IP协议可以进行IP数据包的分割和组装，但是通过IP协议并不能清楚地了解到数据包是否顺利地发送给目标计算机。而使用TCP协议就不同了，在该协议传输模式中在将数据包成功发送给目标计算机后，TCP会要求发送一个确认；如果在某个时限内没有收到确认，那么TCP将重新发送数据包。另外，在传输的过程中，如果接收到无序、丢失以及被破坏的数据包，TCP还可以负责恢复。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　传输控制协议（Transmission Control Protocol，TCP）是一种面向连接的、可靠的、基于字节流的运输层通信协议，通常由IETF的RFC 793说明。在简化的计算机网络OSI模型中，它完成运输层所指定的功能。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　什么是TCP/IP？<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。它是由ARPANET网的研究机构发展起来的。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　有时我们将TCP/IP描述为互联网协议集\"Internet Protocol Suite\",TCP和IP是其中的两个协议(后面将会介绍)。由于TCP和IP是大家熟悉的协议,以至于用TCP/IP或IP/TCP这个词代替了整个协议集。这尽管有点奇怪,但没有必要去争论这个习惯。例如,有时我们讨论NFS 是基于TCP/IP时,尽管它根本没用到TCP(只用到IP,和另一种交互式 协议UDP而不是TCP)。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　Internet是网络的集合,包括ARPANET、NSFNET、分布在各地的局域网、以及其它类型的网络,如(DDN,Defense Data Network美国国防数据网络),这些统称为Internet。所有这些大大小小的网络互联在一起。(因为大多数网络基本协议是由DDN组织开发的,所以以前有时DDN与Internet在某种意义上具有相同的含义)。网络上的用户可以互相传送信息,除一些有授权限制和安全考虑外。一般的讲,互联网协议文档案是Internet委员会自己采纳的基本标准。 TCP/IP标准与其说由委员会指定,倒不如说由\"舆论\"来开发的。 任何人都可以提供一个文档,以RFC(Request for Comment需求注释) 方式公布。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　TCP/IP的标准在一系列称为RFC的文档中公布。文档由技术专家、特别工作组、或RFC编辑修订。公布一个文档时,该文档被赋予一个RFC量,如RFC959说明FTP、RFC793说明TCP、RFC791说明IP等。 最初的RFC一直保留而从来不会被更新,如果修改了该文档,则该文档又以一个新号码公布。因此,重要的是要确认你拥有了关于某个专题的最新RFC文档。文后会列出主要的RFC文档号。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　不管怎样,TCP/IP是一个协议集。为应用提供一些\"低级\"功能,这些包括IP、TCP、UDP。其它是执行特定任务的应用协议,如计算机间传送文件、发送电子邮件、或找出谁注册到另外一台计算机。因此, 最重要的\"商业\"TCP/IP服务有: <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 文件传送File Transfer。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　文件传送协议FTP(File Transfer Protocol)允许用户从一台计算机到另一台取得文件,或发送文件到另外一台计算机。从安全性方面考虑,需要用户指定一个使用其它计算机的用户名和口令。它不同与NFS(Network File System)和Netbios协议。一旦你要访问另一台 系统中的文件,任何时刻都要运行FTP。而且你只能拷贝文件到自己的机器中去来使用它。(RFC 959中关于FTP的说明) <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 远程登录Remote login <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　网络终端协议TELNET允许用户登录到网络上任一计算机上。你可启动一个远程进程连接到指定的计算机,直到进程结束,期间你所键入的内容被送到所指定的计算机。值得注意的是,这时你实际上是与你的计算机进行对话。TELENET程序使得你的计算机在整个过程中不见了,所敲的每一个字符直接送到所登录的计算机系统。一般的说,这种远程连接是通过类式拨号连接的,也就是,拨通后,远程系统提示你输入注册名和口令,退出远程系统,TELNET程序也就退出,你又与自己的计算机对话了。微电脑中的TELNET工具一般含有一个终端仿真程序。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 计算机邮件Mail <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　允许你发送消息给其它计算机的用户。通常,人们趋向于使用指定的一台或两台计算机。计算机邮件系统只需你简单地往另一用户的邮件文件中添加信息,但随之产生问题,使用的微电脑的环境不同,还有重要的是宏(MICRO)不适合于接受计算机邮件。为了发送电子邮件,邮件软件希望连接到目的计算机,如果是微电脑,也许它已关机,或者正在运行另一个应用程序呢?出于这种原因,通常由一个较大的系统来处理这些邮件,也就是一个一直运行着的邮件服务器。邮件软件成为用户从邮件服务器取回邮件的一个界面。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　任何一个的TCP/IP工具提供上述这些服务。这些传统的应用功能在基于TCP/IP的网络中一直扮演非常重要的角色。目前情况有点变化,这些功能使用也发生变化,如老系统的改造,计算机的发展等,出现了各种安装版本,如:微电脑、工作站、小型机、和巨型机等。这些计算机好像在一起完成指定的任务,尽管有时看来像是只用到某个指定 的计算机,但它是通过网络得到其它计算机系统的服务。服务器Server是为网络上其它提供指定服务的系统,客户Client是得到这种服务的另外计算机系统。(值得注意的是,服务/客户机不一定是不同的计算机,有可能是同一计算机中的不同运行程序)。以下是几种目前计算机上典型的一些服务,这些服务可在TCP/IP网络上调用。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 网络文件系统(NFS) <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　这种访问另一计算机的文件的方法非常接近于流行的FTP。网络文件系统提供磁盘或设备服务,而无需特定的网络实用程序来访问另一系统的文件。可以简单地认为它是一个外加的磁盘驱动器。这种额外\"虚拟\"磁盘驱动器就是其它计算机系统的磁盘。这非常有用。你只需加大几台计算机的磁盘容量,就可使网络上其他用户访问它,且不说所带来的经济效益,它还能够让几台工作的计算机共享相同的文件。它也使得系统维护和备份易如反掌,因为再不必为大量的不同机器上 的文件的升级和备份而担心。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 远程打印(Remote printing) <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　允许你使用其它计算机上的打印机,好像这些打印机直接连到你的计算机上。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 远程执行(Remote execution) <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　允许你请求运行在不同计算机上的特殊程序。当你在一个很小的计算机上运行一个需要大机系统资源的程序时,这时候远程执行非常有用。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 名字服务器(Name servers) <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　在一个大的系统安装过程中,需要用到大量的各种名字,包括用户名、口令,姓名、网络地址、帐号等,管理这些是非常令人乏味的。因此将这些数据形成数据库,放到一个小系统中去,其它系统通过网络来访问这些数据。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　* 终端服务器(Terminal servers) <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　很多的终端连接安装不再直接将终端连到计算机,取而代之的是,将他们连接到终端服务器上。终端服务器是一个小的计算机,它只需知道怎样运行TELNET(或其它一些完成远程登录的协议)。如果你的终端想连上去,只用键入要连的计算机名就可。通常有可能同时有几个这种连接,这时终端服务器采用快速开关技术来切换。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　上述所描述的一些协议是由Berkeley, Sun,或其它组织定义的。因此,它们不是互联网协议集(Internet Protocol Suite)的一部分, 只是使用到TCP/IP的工具,如同一般的TCP/IP 应用协议。因为协议的定义不一致,并且商业支持的TCP/IP工具广泛应用,也许会把这些协议作为互联协议集中的一部分。上述列出的只是基于TCP/IP部分服务的一些简单例子,但包含了一些\"主要\"的应用。 <br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　<strong>TCP的服务</strong><br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　TCP协议提供的是可靠的、面向连接的传输控制协议，即在传输数据前要先建立逻辑连接，然后再传输数据，最后释放连接3个过程。TCP提供端到端、全双工通信；采用字节流方式，如果字节流太长，将其分段；提供紧急数据传送功能。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　尽管TCP和UDP都使用相同的网络层（IP），TCP却向应用层提供与UDP完全不同的服务。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　TCP提供一种面向连接的、可靠的字节流服务。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　面向连接意味着两个使用TCP的应用（通常是一个客户和一个服务器）在彼此交换数据之前必须先建立一个TCP连接。这一过程与打电话很相似，先拨号振铃，等待对方摘机说&#8220;喂&#8221;，然后才说明是谁。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　在一个TCP连接中，仅有两方进行彼此通信。广播和多播不能用于TCP。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　TCP通过下列方式来提供可靠性：<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　&#8226;应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同，应用程序产生的数据报长度将保持不变。由TCP传递给IP的信息单位称为报文段或段（segment）TCP如何确定报文段的长度。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　&#8226;当TCP发出一个段后，它启动一个定时器，等待目的端确认收到这个报文段。如果不能及时收到一个确认，将重发这个报文段。&#8226;当TCP收到发自TCP连接另一端的数据，它将发送一个确认。这个确认不是立即发送，通常将推迟几分之一秒<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　&#8226;TCP将保持它首部和数据的检验和。这是一个端到端的检验和，目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错，TCP将丢弃这个报文段和不确认收到此报文段（希望发端超时并重发）。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　&#8226;既然TCP报文段作为IP数据报来传输，而IP数据报的到达可能会失序，因此TCP报文段的到达也可能会失序。如果必要，TCP将对收到的数据进行重新排序，将收到的数据以正确的顺序交给应用层。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　&#8226;既然IP数据报会发生重复，TCP的接收端必须丢弃重复的数据。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　&#8226;TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务（bytestreamservice）。如果一方的应用程序先传10字节，又传20字节，再传50字节，连接的另一方将无法了解发方每次发送了多少字节。收方可以分4次接收这80个字节，每次接收20字节。一端将字节流放到TCP连接上，同样的字节流将出现在TCP连接的另一端。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　另外，TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据，还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　这种对字节流的处理方式与Unix操作系统对文件的处理方式很相似。Unix的内核对一个应用读或写的内容不作任何解释，而是交给应用程序处理。对Unix的内核来说，它无法区分一个二进制文件与一个文本文件。<br />
<br />
<span style="font-size: 12pt"><span style="font-size: 10pt">　　TCP是因特网中的传输层协议，使用三次握手协议建立连接。当主动方发出SYN连接请求后，等待对方回答SYN，ACK。这种建立连接的方法可以防止产生错误的连接，TCP使用的流量控制协议是可变大小的滑动窗口协议。第一次握手：建立连接时，客户端发送SYN包(SEQ=x)到服务器，并进入SYN_SEND状态，等待服务器确认。第二次握手：服务器收到SYN包，必须确认客户的SYN(ACK=x+1),同时自己也送一个SYN包(SEQ=y),即SYN+ACK包，此时服务器进入SYN_RECV状态。第三次握手：客户端收到服务器的SYN+ACK包，向服务器发送确认包ACK(ACK=y+1),此包发送完毕，客户端和服务器时入Established状态，完成三次握手。<br />
<br />
<span style="font-size: 12pt">　　TCP建立连接时的三次握手<br />
</span><img src ="http://www.blogjava.net/zhangyy130/aggbug/263049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zhangyy130/" target="_blank">张永耀</a> 2009-03-31 10:06 <a href="http://www.blogjava.net/zhangyy130/archive/2009/03/31/263049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>