11TCPIP协议教程.docx
《11TCPIP协议教程.docx》由会员分享,可在线阅读,更多相关《11TCPIP协议教程.docx(7页珍藏版)》请在冰豆网上搜索。
11TCPIP协议教程
11TCPIP协议教程【简介】
这个tcp/ip的教程时主要是考虑到现在的网际网路几乎全都是基于tcp/ip协议的,所以我们应该明白的一点就是这个tcp/ip的架构究竟是什么?
它怎样为我们服务。
它成为被称作“全球互联网”或“因特网(Internet)”的基础,能够将绝大部分的计算机连接起来,不管你用什么操作系统,可见tcp/ip体系是本世纪互联网发展的根本基石。
对于网络程序员来说;了解tcp/ip的机理,可以有构造任何网络应用程序的基本要素,什么winsocket,串口通讯等等甚至木马,你都会迎刃而解这个tcp/ip的教程时主要是考虑到现在的网际网路几乎全都是基于tcp/ip协议的,所以我们应该明白的一点就是这个tcp/ip的架构究竟是什么?
它怎样为我们服务。
它成为被称作“全球互联网”或“因特网(Internet)”的基础,能够将绝大部分的计算机连接起来,不管你用什么操作系统,可见tcp/ip体系是本世纪互联网发展的根本基石。
对于网络程序员来说;了解tcp/ip的机理,可以有构造任何网络应用程序的基本要素,什么winsocket,串口通讯等等甚至木马,你都会迎刃而解。
一
首先说说网络协议的层次,网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。
一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。
(1)链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算中对应的网络接口卡。
它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
(2)网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。
在TCP/IP协议族中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
(3)运输层,主要为两台主机上的应用程序提供端到端的通信。
在TCP/IP协议族中,有两个互不相同的传输协议:
TCP(传输控制协议)和UDP(用户数据报协议)。
TCP为两台主机提供高可靠性的数据通信。
它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。
由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面,UDP则为应用层提供一种非常简单的服务。
它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。
任何必需的可靠性必须由应用层来提供。
应用层Telnet、FTP和e-mail等
运输层TCP和UDP
网络层IP、ICMP和IGMP
链路层设备驱动程序及接口卡
(4)应用层,负责处理特定的应用程序细节。
几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序:
?
Telnet远程登录,FTP文件传输协议,SMTP简单邮件传送协议,SNMP简单网络管理协议,现在想要给大家说的是大多数的网络应用程序都被设计成客户—服务器模式在同一层上,双方都有对应的一个或多个协议进行通信。
例如,某个协议允许TCP层进行通信,而另一个协议则允许两个IP层进行通信。
这里实际上就是说应用层本身本不注意数据的传递和交换,它一般只是一个用户进程,而上面我提到的运输层及其以下的三层的目的就是处理通信的过程,他们不管你应用程序的事,分工明确。
二
还有一个概念问题,我们平时所听到的诸如tcp,ip,ftp等等,实际上协议本身是独立的,tcp是运输层协议,ip是网络层协议TCP/IP协议族是一组不同的协议组合在一起构成的协议族。
尽管通常称该协议族为TCP/IP,但TCP和IP只是其中的两种协议而已(该协议族的另一个名字是Internet协议族(InternetProtocolSuite))网络接口层和应用层的目的是很显然的—前者处理有关通信媒介的细节(以太网、令牌环网等),而后者处理某个特定的用户应用程序(FTP、Telnet等)。
但是,从表面上看,网络层和运输层之间的区别不那么明显。
构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。
它是一种特殊的用于网络互连的硬件盒。
路由器的好处是为不同类型的物理网络提供连接:
以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等。
这些盒子也称作IP路由器(IPRouter),但我们这里使用路由器(Router)这个术语。
从历史上说,这些盒子称作网关(gateway),在很多TCP/IP文献中都使用这个术语。
现在网关这个术语只用来表示应用层网关:
一个连接两种不同协议族的进程(例如,TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。
在TCP/IP协议族中,网络层IP提供的是一种不可靠的服务。
也就是说,它只是尽可能快地把分组从源结点送到目的结点,但是并不提供任何可靠性保证。
而另一方面,TCP在不可靠的IP层上提供了一个可靠的运输层。
为了提供这种可靠的服务,TCP采用了超时重传、发送和接收端到端的确认分组等机制。
由此可见,运输层和网络层分别负责不同的功能。
至于那些机制是如何工作的,我也是肯定不知道的,呵呵,有电信学方面爱好的朋友可以深入研究一下。
三
这里又有一个新概念:
multihomed,任何具有多个接口的系统,英文都称作是多接口的。
你也许和我一样会问:
我们的主机也是多接口的,可以作router吗?
我们一个主机也可以有多个接口,但一般不称作路由器,除非它的功能只是单纯地把分组从一个接口传送到另一个接口。
同样,路由器并不一定指那种在互联网中用来转发分组的特殊硬件盒。
大多数的TCP/IP实现也允许一个多接口主机来担当路由器的功能,但是主机为此必须进行特殊的配置。
在这种情况下,我们既可以称该系统为主机(当它运行某一应用程序时,如FTP或Telnet),也可以称之为路由器(当它把分组从一个网络转发到另一个网络时),在不同的场合下使用不同的术语。
然后我说说网桥,连接网络的另一个途径是使用网桥。
网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。
网桥使得多个局域网(LAN)组合在一起,这样对上层来说就好像是一个局域网。
四
TCP/IP倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器,其实主要是资料一般比较注重讲这个,我也不能省啊,了解的朋友不要打瞌睡。
TCP和UDP是两种最为著名的运输层协议,二者都使用IP作为网络层协议。
虽然TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务。
IP是网络层上的主要协议,同时被TCP和UDP使用。
TCP和UDP的每组数据都通过端系统和每个中间路由器中的IP层在互联网中进行传输。
ICMP是IP协议的附属协议。
IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
ICMP是IP协议的附属协议。
IP层用它来与其他主机或路由器交换错误报文和其他重要信息。
大家先对这些协议有一个印象,以后我们再继续探讨。
关于ip地址,我想不应该多说了吧,IP地址长32bit,我们平时说ip有三类地址格式,实际上一共有五类:
前三类我就不说了,最基本的,现在说说d类和e类。
d:
1110然后是28位的多播组号
e:
11110后面27位留待后用
这些32位的地址通常写成四个十进制的数,其中每个整数对应一个字节。
这种表示方法称作“点分十进制表示法(Dotteddecimalnotation)”。
需要再次指出的是,多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
由于互联网上的每个接口必须有一个唯一的IP地址,因此必须要有一个管理机构为接入互联网的网络分配IP地址。
这个管理机构就是互联网络信息中心(InternetNetworkInformationCentre),称作InterNIC。
InterNIC只分配网络号。
主机号的分配由系统管理员来负责。
有三类IP地址:
单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机),不同于上面的分类方法了。
五
域名解析系统(dns):
尽管通过IP地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。
在TCP/IP领域中,域名系统(DNS)是一个分布的数据库,由它来提供IP地址和机名之间的映射信息
六
现在说说tcp/ip的封装:
当应用程序用TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。
其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCPsegment)。
IP传给网络接口层的数据单元称作IP数据报(IPdatagram)。
通过以太网传输的比特流称作帧(Frame)。
更准确地说,IP和网络接口层之间传送的数据单元应该是分组(packet)。
我觉得也可以认为是数据包。
分组既可以是一个IP数据报,也可以是IP数据报的一个片(fragment),我认为这是最合理而仔细的解释了,而有些国内的资料在这里是笼统的。
UDP数据与TCP数据基本一致。
唯一的不同是UDP传给IP的信息单元称作UDP数据报(UDPdatagram),而且UDP的首部长为8字节。
由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入某种标识,以表明数据属于哪一层。
为此,IP在首部中存入一个长度为8bit的数值,称作协议域。
1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。
类似地,许多应用程序都可以使用TCP或UDP来传送数据。
运输层协议在生成报文首部时要存入一个应用程序的标识符。
TCP和UDP都用一个16bit的端口号来表示不同的应用程序。
TCP和UDP把源端口号和目的端口号分别存入报文首部中。
网络接口分别要发送和接收IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。
为此,以太网的帧首部也有一个16bit的帧类型域。
七
现在我们讲一下什么叫做分用,分用其实就是一个数据传递的过程。
这样的一个数据传递是逆过程的,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。
每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。
这个过程称作分用(Demultiplexing)。
这样大家也好看得更明白一些。
不知细心的朋友看到没有,在这里的igmp和icmp定位,实际上他们都是被封装在数据包中的,与ip位于同一层,是ip的从属协议,这里不要混淆了。
我在开始就讲过:
大部分的网络应用程序都是被设计成客户端和服务器端的这种模型。
具体为什么我也不知道,有点抽象:
为了适应某些特定的服务。
可以将这种服务分为两种类型:
重复型或并发型。
重复型服务器通过以下步骤进行交互:
重复型服务器通过以下步骤进行交互:
I1.等待一个客户请求的到来。
I2.处理客户请求。
I3.发送响应给发送请求的客户。
并发型服务器采用以下步骤:
C1.等待一个客户请求的到来。
C2.启动一个新的服务器来处理这个客户的请求。
在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。
这个步骤如何进行取决于操作系统。
生成的新服务器对客户的全部请求进行处理。
处理结束后,终止这个新服务器。
C3.返回C1步。
并发型服务器采用以下步骤:
C1.等待一个客户请求的到来。
C2.启动一个新的服务器来处理这个客户的请求。
在这期间可能生成一个新的进程、任务或线程,并依赖底层操作系统的支持。
这个步骤如何进行取决于操作系统。
生成的新服务器对客户的全部请求进行处理。
处理结束后,终止这个新服务器。
C3.返回C1步。
一般来说,TCP服务器是并发的,而UDP服务器是重复的,但也存在一些例外。