TCP/IP学习笔记

来源:互联网 发布:国外人工智能发展现状 编辑:程序博客网 时间:2024/06/15 07:07

TCP/IP学习笔记

1.1 引言

T C P / I P起源于6 0年代末美国政府资助的一个分组交换网络研究项目,到9 0年代已发展成为计算机之间最常应用的组网形式。它是一个真正的开放系统,因为协议族的定及其多种实现以不用花钱或花很少的钱就可以公开地得到。它成为被称作“全球互联网”或“因特网( I n t e r n e t )”的基础,该广域网(WA N)已包含超过1 0 0万台遍布世界各地的计算机。由于允许运行不同操作系统的计算机之间相互通信,T C P / I P协议簇已成为实际上国际通用的协议簇。

1.2 分层

网络协议需要分层,不同的层次具有不同的功能:


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则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
这两种运输层协议分别在不同的应用程序中有不同的用途,这一点将在后面看到。
4 ) 应用层负责处理特定的应用程序细节。几乎各种不同的T C P / I P实现都会提供下面这些通用的应用程序:

• Telnet 远程登录。
• FTP 文件传输协议。
• SMTP 简单邮件传送协议。
• SNMP 简单网络管理协议。
假设在一个局域网( L A N)如以太网中有两台主机,二者都运行F T P协议。在图1 - 2中列举了四种不同层次上的协议。


在同一层上,双方都有对应的一个或多个协议进行通信。

我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系统)内核中执行。尽管这不是必需的,但通常都是这样处理的。

顶层与下三层之间还有另一个关键的不同之处。应用层关心的是应用程序的细节,而不是数据在网络中的传输活动。下三层对应用程序一无所知,但它们要处理所有的通信细节。

需要注意的是,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等)。但是,从表面上看,网络层和运输层之间的区别不那么明显。为什么要把它们划分成两个不同的层次呢?为了理解这一点,我们必须把视野从单个网络扩展到一组网络。

在8 0年代,网络不断增长的原因之一是大家都意识到只有一台孤立的计算机构成的“孤岛”没有太大意义,于是就把这些孤立的系统组在一起形成网络。随着这样的发展,到了9 0年代,我们又逐渐认识到这种由单个网络构成的新的更大的“岛屿”同样没有太大的意义。于是,人们又把多个网络连在一起形成一个网络的网络,或称作互连网( i n t e r 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),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。


图1 - 3是一个包含两个网络的互连网:一个以太网和一个令牌环网,通过一个路由器互相连接。尽管这里是两台主机通过路由器进行通信,实际上以太网中的任何主机都可以与令牌环网中的任何主机进行通信。
在图1 - 3中,我们可以划分出端系统( End system )(两边的两台主机)和中间系统(Intermediate system)(中间的路由器)。应用层和运输层使用端到端( En d - t o - e n d)协议。在图中,只有端系统需要这两层协议。但是,网络层提供的却是逐跳( Ho p - b y - h o p)协议,两个端系统和每个中间系统都要使用它。

连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网( L A N)组合在一起,这样对上层来说就好像是一个局域网。

1.3 TCP/IP的分层


T C P和U D P是两种最为著名的运输层协议,二者都使用I P作为网络层协议。虽然T C P使用不可靠的I P服务,但它却提供一种可靠的运输层服务。U D P为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息单元(例如,发送方指定的一定字节数的信息)。但是与T C P不同的是,U D P是不可靠的,它
不能保证数据报能安全无误地到达最终目的。I P是网络层上的主要协议,同时被T C P和U D P使用。T C P和U D P的每组数据都通过端系统和每个中间路由器中的I P层在互联网中进行传输。在图1 - 4中,我们给出了一个直接访问I P的应用程序。这是很少见的,但也是可能的(一些较老的选路协议就是以这种方式来实现的。当然新的运输层协议也有可能使用这种方式)。第3章主要讨论I P协议,但是为了使内容更加有针对性,一些细节将留在后面的章节中进行讨论。第9章和第1 0章讨论I P如何进行选路。
I C M P是I P协议的附属协议。I P层用它来与其他主机或路由器交换错误报文和其他重要信息。尽管I C M P主要被I P使用,但应用程序也有可能访问它。我们将分析两个流行的诊断工具,P i n g和Tr a c e r o u t e,它们都使用了I C M P。I G M P是I n t e r n e t组管理协议。它用来把一个U D P数据报多播到多个主机。A R P(地址解析协议)和R A R P(逆地址解析协议)是某些网络接口(如以太网和令牌环网)使用的特殊协议,用来转换I P层和网络接口层使用的地址。

1.4 互联网的地址

互联网上的每个接口必须有一个唯一的I n t e r n e t地址(也称作I P地址)。I P地址长32 bit。I n t e r n e t地址并不采用平面形式的地址空间,如1、2、3等。I P地址具有一定的结构,五类不同的互联网地址格式如图1 - 5所示。


这些3 2位的地址通常写成四个十进制的数,其中每个整数对应一个字节。这种表示方法称作“点分十进制表示法( Dotted decimal notation)”。

1.5 域名系统
尽管通过I P地址可以识别主机上的网络接口,进而访问主机,但是人们最喜欢使用的还是主机名。在T C P / I P领域中,域名系统( D N S)是一个分布的数据库,由它来提供I P地址和主机名之间的映射信息。现在,我们必须理解,任何应用程序都可以调用一个标准的库函数来查看给定名字的主机的I P地址。类似地,系统还提供一个逆函数—给定主机的I P地址,查看它所对应的主机名。大多数使用主机名作为参数的应用程序也可以把I P地址作为参数。

1.6 封装
当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1 - 7所示。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 )。

图1 - 7中帧头和帧尾下面所标注的数字是典型以太网帧首部的字节长度。以太网数据帧的物理特性是其长度必须在4 6~1 5 0 0字节之间。所有的I n t e r n e t标准和大多数有关T C P / I P的书都使用o c t e t这个术语来表示字节。使用这个过分雕琢的术语是有历史原因的,因为T C P / I P的很多工作都是在D E C - 1 0系统上进行的,但是它并不使用8 bit的字节。由于现在几乎所有的计算机系统都采用8 bit的字节,因此我们在本书中使用字节(byte)这个术语。更准确地说,图1 - 7中I P和网络接口层之间传送的数据单元应该是分组( p a c k e t)。分组既可以是一个I P数据报,也可以是I P数据报的一个片(f r a g m e n t)。


1.7 分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用( D e m u l t i p l e x i n g),图1 - 8显示了该过程是如何发生的。


1.8 客户-服务器模型
大部分网络应用程序在编写时都假设一端是客户,另一端是服务器,其目的是为了让服务器为客户提供一些特定的服务。可以将这种服务分为两种类型:重复型或并发型。重复型服务器通过以下步骤进行交互:

I1. 等待一个客户请求的到来。
I2. 处理客户请求。
I3. 发送响应给发送请求的客户。
I4. 返回I 1步。
重复型服务器主要的问题发生在I 2状态。在这个时候,它不能为其他客户机提供服务。相应地,并发型服务器采用以下步骤:
C1. 等待一个客户请求的到来。
C2. 启动一个新的服务器来处理这个客户的请求。在这期间可能生成一个新的进程、任务
或线程,并依赖底层操作系统的支持。这个步骤如何进行取决于操作系统。生成的新服务器
对客户的全部请求进行处理。处理结束后,终止这个新服务器。
C3. 返回C 1步。
并发服务器的优点在于它是利用生成其他服务器的方法来处理客户的请求。也就是说,每个客户都有它自己对应的服务器。如果操作系统允许多任务,那么就可以同时为多个客户服务。
对服务器,而不是对客户进行分类的原因是因为对于一个客户来说,它通常并不能够辨别自己是与一个重复型服务器或并发型服务器进行对话。

1.9 端口号
服务器一般都是通过知名端口号来识别的。这些知名端口号由I n t e r n e t号分配机构( Internet Assigned Numbers Authority, IANA)来管理。

客户端通常对它所使用的端口号并不关心,只需保证该端口号在本机上是唯一的就可以了。客户端口号又称作临时端口号(即存在时间很短暂)。这是因为它通常只是在用户运行该客户程序时才存在,而服务器则只要主机开着的,其服务就运行。

U n i x系统有保留端口号的概念。只有具有超级用户特权的进程才允许给它自己分配一个保留端口号。

1.10 标准化过程
有四个小组在负责I n t e r n e t技术。
1) Internet协会(I S O C,Internet Society)是一个推动、支持和促进I n t e r n e t不断增长和发展的专业组织,它把I n t e r n e t作为全球研究通信的基础设施。
2) Internet体系结构委员会(I A B,Internet Architecture Board)是一个技术监督和协调的机构。它由国际上来自不同专业的1 5个志愿者组成,其职能是负责I n t e r n e t标准的最后编辑和技术审核。I A B隶属于I S O C。
3) Internet工程专门小组(I E T F,Internet Engineering Task Force)是一个面向近期标准的组织,它分为9个领域(应用、寻径和寻址、安全等等)。I E T F开发成为I n t e r n e t标准的规范。为帮助IETF主席,又成立了Internet工程指导小组(IESG, Internet Engineering Steering Group)。
4) Internet研究专门小组(IR I F,Internet Research Task Force)主要对长远的项目进行研究。I RT F和I E T F都隶属于I A B。文献[Crocker 1993]提供了关于I n t e r n e t内部标准化进程更为详细的信息,同时还介绍了它的早期历史。

1.11 RFC
所有关于I n t e r n e t的正式标准都以R F C(Request for Comment)文档出版。另外,大量的R F C并不是正式的标准,出版的目的只是为了提供信息。R F C的篇幅从1页到2 0 0页不等。每一项都用一个数字来标识,如RFC 11 2 2,数字越大说明R F C的内容越新。所有的R F C都可以通过电子邮件或用F T P从I n t e r n e t上免费获取。如果发送下面这份电子邮件,就会收到一份获取R F C的方法清单:

To: rfc-info@ISI.EDU
Subject: getting rfcs
help: ways_to_get_rfcs
最新的R F C索引总是搜索信息的起点。这个索引列出了R F C被替换或局部更新的时间。下面是一些重要的R F C文档:
1 ) 赋值R F C:列出了所有I n t e r n e t协议中使用的数字和常数;
2) I n t e r n e t正式协议标准:描述了各种I n t e r n e t协议的标准化现状;
3 ) 主机需求R F C:列出了协议中关于“必须”、“应该”、“可以”、“不应该”或者“不能”等特性及其实现细节;
4) 路由器需求R F C:与主机需求R F C类似,但是只单独描述了路由器的需求。

1.12 标准的简单服务
有一些标准的简单服务几乎每种实现都要提供。在本书中我们将使用其中的一些服务程序,而客户程序通常选择Te l n e t。图1 - 9描述了这些服务。从该图可以看出,当使用T C P和U D P提供相同的服务时,一般选择相同的端口号。


如果仔细检查这些标准的简单服务以及其他标准的T C P / I P服务(如Te l n e t、F T P、S M T P等)的端口号时,我们发现它们都是奇数。这是有历史原因的,因为这些端口号都是从N C P端口号派生出来的(N C P,即网络控制协议,是A R PA N E T的运输层协议,是T C P的前身)。N C P是单工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。当T C P和U D P成为标准的运输层协议时,每个应用程序只需要一个端口号,因此就使用了NCP中的奇数。

1.13 互联网
在图1 - 3中,我们列举了一个由两个网络组成的互联网—一个以太网和一个令牌环网。在1 . 4节和1 . 9节中,我们讨论了世界范围内的互联网—I n t e r n e t,以及集中分配I P地址的需要(I n t e r N I C),还讨论了知名端口号( I A N A)。i n t e r n e t这个词第一个字母是否大写决定了它具有不同的含义。i n t e r n e t意思是用一个共同的协议族把多个网络连接在一起。而I n t e r n e t指的是世界范围内通过T C P / I P互相通信的所有主机集合(超过1 0 0万台)。I n t e r n e t是一个i n t e r n e t,但i n t e r n e t不等于I n t e r n e t。

1.14 实现
既成事实标准的T C P / I P软件实现来自于位于伯克利的加利福尼亚大学的计算机系统研究小组。从历史上看,软件是随同4.x BSD系统(Berkeley SoftwareD i s t r i b u t i o n)的网络版一起发布的。它的源代码是许多其他实现的基础。图1 - 1 0列举了各种B S D版本发布的时间,并标注了重要的T C P / I P特性。列在左边的B S D网络版,其所有的网络源代码可以公开得到:包括协议本身以及许多应用程序和工具(如Te l n e t和F T P)。起初关于I n t e r n e t的很多研究现在仍然在伯克利系统中应用—新的拥塞控制算法、多播、“长肥管道”修改以及其他类似的研究。


1.15 应用编程接口
使用T C P / I P协议的应用程序通常采用两种应用编程接口( A P I):s o c k e t和T L I(运输层接口:Transport Layer Interface)。前者有时称作“ Berkeley socket”,表明它是从伯克利版发展而来的。后者起初是由AT & T开发的,有时称作X T I(X / O p e n运输层接口),以承认X / O p e n这个自己定义标准的国际计算机生产商所做的工作。X T I实际上是T L I的一个超集。

1.16 测试网络
图1 - 11是本书中所有的例子运行的测试网络。




1.17 小结
T C P / I P协议族分为四层:链路层、网络层、运输层和应用层,每一层各有不同的责任。在T C P / I P中,网络层和运输层之间的区别是最为关键的:网络层( I P)提供点到点的服务,而运输层( T C P和U D P)提供端到端的服务。一个互联网是网络的网络。构造互联网的共同基石是路由器,它们在I P层把网络连在一起。第一个字母大写的I n t e r n e t是指分布在世界各地的大型互联网,其中包括1万多个网络和超过1 0 0万台主机。在一个互联网上,每个接口都用I P地址来标识,尽管用户习惯使用主机名而不是I P地址。域名系统为主机名和I P地址之间提供动态的映射。端口号用来标识互相通信的应用程序。服务器使用知名端口号,而客户使用临时设定的端口号。

0 0
原创粉丝点击