atfa 发表于 2003-5-23 23:06:44

TCP/IP协议简易教程

TCP/IP协议教程(一)
转自INTERNET

我在写这些这个tcp/ip的教程时主要是考虑到现在的网际网路几乎全都是基于tcp/ip协议的,所以我们应该明白的一点就是这个tcp/ip的架构究竟是什么?它怎样为我们服务。它成为被称作“全球互联网”或“因特网(Internet)”的基础,能够将绝大部分的计算机连接起来,不管你用什么操作系统,可见tcp/ip体系是本世纪互联网发展的根本基石。对于网络程序员来说,;了解tcp/ip的机理,可以有构造任何网络应用程序的基本要素,什么winsocket,串口通讯等等甚至木马,你都会迎刃而解。当然,网络编程不是这里的内容了,讲也讲不完的,况且本人也在学习之中,可能还没入门,呵呵。
好了,说了这么多开场白,我们开始第一阶段吧。
一.首先说说网络协议的层次,网络协议通常分不同层次进行开发,每一层分别
负责不同的通信功能。一个协议族,比如T C P / I P,是一组不同层次上的多个协议的组合。
1) 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
2) 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。在T C P / I P协议族中,网络层协议包括I P协议(网际协议),I C M P协议(I n t e r n e t互联网控
制报文协议),以及I G M P协议(I n t e r n e t组管理协议)。
3 ) 运输层主要为两台主机上的应用程序提供端到端的通信。在T C P / I P协议族中,有两个互不相同的传输协议: T C P(传输控制协议)和U D P(用户数据报协议)。T C P为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面, U D P则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠
性必须由应用层来提供。
应用层 Telnet、FTP和e-mail等
运输层 TCP和UDP
网络层 IP、ICMP和IGMP
链路层 设备驱动程序及接口卡
4 ) 应用层负责处理特定的应用程序细节。几乎各种不同的T C P / I P实现都会提供下面这些通用的应用程序:?Telnet 远程登录,FTP 文件传输协议,SMTP 简单邮件传送协议,SNMP 简单网络管理协议,现在想要给大家说的是大多数的网络应用程序都被设计成客户—服务器模式在同一层上,双方都有对应的一个或多个协议进行通信。例如,某个协议允许T C P层进行通信,而另一个协议则允许两个I P层进行通信。
这里实际上就是说应用层本身本不注意数据的传递和交换,它一般只是一个用户进程,而上面我提到的运输层及其以下的三层的目的就是处理通信的过程,他们不管你应用程序的事,分工明确。
二.还有一个概念问题,我们平时所听到的诸如tcp,ip,ftp等等,实际上协议本身是独立的,tcp是运输层协议,ip是网络层协议T C P / I P协议族是一组不同的协议组合在一起构成的协议族。尽管通常称该协议族为T C P / I P,但T C P和I P只是其中的两种协议而已(该协议族的另一个名字是I n t e r n e t协议族(Internet Protocol Suite))网络接口层和应用层的目的是很显然的—前者处理有关通信媒介的细节(以太网、令牌环网等),而后者处理某个特定的用户应用程序( F T P、Te l n e t等)。但是,从表面上看,网络层和运输层之间的区别不那么明显。
构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。它是一种特殊的用于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和F D D I(光纤分布式数据接口)等等。这些盒子也称作I P路由器(IP Router),但我们这里使用路由器( R o u t e r )这个术语。
从历史上说,这些盒子称作网关( g a t e w a y),在很多T C P / I P文献中都使用这个术语。
现在网关这个术语只用来表示应用层网关:一个连接两种不同协议族的进程(例如,TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。在T C P / I P协议族中,网络层I P提供的是一种不可靠的服务。也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。而另一方面, T C P在不可靠的I P层上提供了一个可靠的运输层。为了提供这种可靠的服务, T C P采用了超时重传、发送和接收端到端的确认分组等机制。由此可见,运输层和网络层分别负责不同的功能。至于那些机制是如何工作的,我也是肯定不知道的,呵呵,有电信学方面爱好的朋友可以深入研究一下。
三.这里又有一个新概念:multihomed,任何具有多个接口的系统,英文都称作是多接口的。你也许和我一样会问:我们的主机也是多接口的,可以作router吗?我们一个主机也可以有多个接口,但一般不称作路由器, 除非它的功能只是单纯地把分组从一个接口传送到另一个接口。同样,路由器并不一定指那种在互联网中用来转发分组的特殊硬件盒。大多数的T C P / I P实现也允许一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。在这种情况下,我们既可以称该系统为主机(当它运行某一应用程序时,如F T P或Te l n e t),也可以称之为路由器(当它把分组从一个网络转发到另一个网络时),在不同的场合下使用不同的术语。(其实我也很不喜欢术语,老外的东西,呵呵)
然后我说说网桥,连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网( L A N)组合在一起,这样对上层来说就好像是一个局域网。

atfa 发表于 2003-5-23 23:07:11

TCP/IP协议教程(二)

四.TCP /IP倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器,其实主要是资料一般比较注重讲这个,我也不能省啊,了解的朋友不要打瞌睡啊,呵呵。T C P和U D P是两种最为著名的运输层协议,二者都使用I P作为网络层协议。虽然T C P使用不可靠的I P服务,但它却提供一种可靠的运输层服务。I P是网络层上的主要协议,同时被T C P和U D P使用。T C P和U D P的每组数据都通过端系统和每个中间路由器中的I P层在互联网中进行传输。I C M P是I P协议的附属协议。I P层用它来与其他主机或路由器交换错误报文和其他重要信息。I C M P是I P协议的附属协议。I P层用它来与其他主机或路由器交换错误报文和其他重要信息。大家先对这些协议有一个印象,以后我们再继续探讨。
关于ip地址,我想不应该多说了吧,I P地址长32 bit,我们平时说ip有三类地址格式,实际上一共有五类:前三类我就不说了,最基本的,现在说说d类和e类。
d:1 1 1 0 然后是28位的多播组号
e:1 1 1 1 0 后面27位留待后用

这些3 2位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十进制表示法( Dotted decimal notation)”。需要再次指出的是,多接口主机具有多个I P地址,其中每个接口都对应一个I P地址。
由于互联网上的每个接口必须有一个唯一的I P地址,因此必须要有一个管理机构为接入互联网的网络分配I P地址。这个管理机构就是互联网络信息中心( Internet Network InFORMationC e n t r e),称作I n t e r N I C。I n t e r N I C只分配网络号。主机号的分配由系统管理员来负责。有三类I P地址:单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机),不同于上面的分类方法了。

五.域名解析系统(dns):尽管通过I P地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。在T C P / I P领域中,域名系统( D N S)是一个分布的数据库,由它来提供I P地址和机名之间的映射信息

六.现在说说tcp/ip的封装:当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),T C P传给I P的数据单元称作T C P报文段或简称为T C P段(T C Ps e g m e n t)。I P传给网络接口层的数据单元称作I P数据报(IP datagram)。通过以太网传输的比特流称作帧(Fr a m e )。
更准确地说,I P和网络接口层之间传送的数据单元应该是分组( p a c k e t)。我觉得也可以认为是数据包。分组既可以是一个I P数据报,也可以是I P数据报的一个片(f r a g m e n t),我认为这是最合理而仔细的解释了,而有些国内的资料在这里是笼统的。
U D P数据与T C P数据基本一致。唯一的不同是U D P传给I P的信息单元称作U D P数据报(UDP datagram),而且U D P的首部长为8字节。由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为8 b i t的数值,称作协议域。1表示为I C M P协议, 2表示为I G M P协议, 6表示为T C P协议, 1 7表示为U D P协议。类似地,许多应用程序都可以使用T C P或U D P来传送数据。运输层协议在生成报文首部
时要存入一个应用程序的标识符。T C P和U D P都用一个1 6 b i t的端口号来表示不同的应用程序。T C P和U D P把源端口号和目的端口号分别存入报文首部中。网络接口分别要发送和接收I P、A R P和R A R P数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个16 bit的帧类型域。

atfa 发表于 2003-5-23 23:07:45

TCP/IP协议教程(三)

七.现在我们讲一下什么叫做分用,分用其实就是一个数据传递的过程。这样的一个数据传递是逆过程的,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用( D e m u l t i p l e x i n g),如图所示:

这样大家也好看得更明白一些。不知细心的朋友看到没有,在这里的igmp和icmp定位,实际上他们都是被封装在数据包中的,与ip位于同一层,是ip的从属协议,这里不要混淆了。
我在开始就讲过:大部分的网络应用程序都是被设计成客户端和服务器端的这种模型。具体为什么我也不知道,有点抽象:为了适应某些特定的服务。可以将这种服务分为两种类型:重复型或并发型。重复型服务器通过以下步骤进行交互:重复型服务器通过以下步骤进行交互:
I1. 等待一个客户请求的到来。
I2. 处理客户请求。
I3. 发送响应给发送请求的客户。
并发型服务器采用以下步骤:
C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务
或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器
对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3. 返回C 1步。并发型服务器采用以下步骤:
C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务
或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器
对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3. 返回C 1步。
一般来说, T C P服务器是并发的,而U D P服务器是重复的,但也存在一些例外。


八.现在讲一下什么是端口号,这块可能很多人都比较清楚了,哪一些端口是做什么用的。我认为大家已经基本了解端口的一些基本知识,如果你有什么疑问,可以找一些其他资料来看。任何T C P / I P实现所提供的服务都用知名的1~1 0 2 3之间的端口号。这些知名端口号由I n t e r n e t号分配机构( Internet Assigned Numbers Authority, IANA)来管理,服务器一般都是通过知名端口号来识别的,但是客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着的,其服务就运行。大多数T C P / I P实现给临时端口分配1 0 2 4~5 0 0 0之间的端口号。但也有例外,比如有名的Solaris 2.2,U n i x系统有保留端口号的概念。只有具有超级用户特权的进程才允许给它自己分配一个保留端口号。具体的我也不清楚,呵呵。

minlau 发表于 2003-5-24 21:55:45

真是太感谢啦

yuch 发表于 2003-6-3 14:18:55

thanks!
页: [1]
查看完整版本: TCP/IP协议简易教程