TCP/IP基础
摘要:TCP/IP是现在数据通信的标准,随着VOIP的推进,电信企业也将从传统的电路交换转移到基于TCP/IP的数据分组交换。本文对TCP/IP协议的历史,IP地址的分配,IP协议,TCP协议及部分应用层协议等关键协议进行了初步的介绍,希望能起到抛砖引玉的作用。
关键词:IP TCP
一:TCP/IP的历史
TCP/IP最初是为满足美国国防部数据通讯需求而设计的。
60年代ARPA开始对建立开放的、基于标准协议的、支持多厂家设备的互联网络。
1969: ARPANET 建成并开始运行 –
他有四个分组交换节点 –
通过56K电路连接 –
使用NCP协议 –
由美国国防部赞助 1974:TCP/IP协议设计完成 1979:TCP/IP 版本4发布 1979:UNIX提供对TCP/IP的支持 1980:ARPA开始使用TCP/IP 1983:ARPA强制所有接入ARPANET的计算机使用TCP/IP
二:TCP/IP协议模型和OSI协议模型的对比
TCP/IP并不是一个单一协议,他是一套协议,分为四层。
网络接入层:他相当于OSI模型的数据链路层和物理层。他主要涉及对物理链路的控制及数据的正确传输。
网络层:他相当于OSI模型的网络层,他的主要功能是网络寻址。这一层的主要协议有IP,ARP,RARP,ICMP,IGMP
传输层:他相当OSI模型的传输层,他的主要功能是提供端到端的可靠性控制和流量控制,他分为UDP和TCP
应用层:他相当OSI模型的上三层,他的主要任务是为用户应用和传输层之间提供接口。
三:IP协议
IP协议特点和主要功能
IP是一个无连接协议,他主要负责网络设备的寻址和对数据包寻路功能。无连接意味作在数据交换之前不需要事先建立会话连接。
由于IP数据包的传递没有保证机制,所以他又是一个相当不可靠的协议。他只能尽力而为的进行数传送,在传送过程中数据可能丢失、乱序、重复、延时等。数据的接收也不需要确认,也没有错误信息反馈给发送方和接收方。这些都由高层协议来完成如TCP IP协议还负责对数据包的分拆和重装,一个大的数据包必须分拆为适合在网络上传送的小数据包,比如FDDI网络能传送的最大数据包为8968BYTE ,而在以太网中,他能传送的最大数据包为1500BYTE.
IP地址分类
A类IP地址是指,在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。网络地址的最高位必须是“0”。
B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码,网络地址的最高位必须是“10”。 C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。网络地址的最高位必须是“110”。
TCP/IP协议规定,凡IP地址中的第一个字节以“11110”开始的地址都叫多点广播地址。因此,任何第一个字节大于223小于240的IP地址是多点广播地址 IP地址中凡是以“11110”的地址都留着将来作为特殊用途使用 IP地址的分配原则
网络ID不能为127 ,要留作环回时用
网络ID和主机ID不能为255(所有位置都为1)
255是一个广播地址
网络ID和主机ID不能为0(所有位置都为0)
0表示“该网络本身”
主机ID对网络来说必须是唯一的
私有IP地址
10.0.0.0
- 10.255.255.255
1 “ A 类 ” 网络
172.16.0.0
- 172.31.255.255
16 “ B 类 ” 网络
192.168.0.0
- 192.168.255.255
256 “ C 类 ” 网络
子网掩码
划分出IP地址部分,以区分网络ID与主机ID。
确定指定目的主机IP地址是位于本地网络上还是远程网络上。
源IP地址和其子网掩码相与。目的IP地址和同一子网掩码相与。如果两个与运算的结果相符,则目的地址在源地址的本地,也就是说在同一子网上
变长子网掩码
变长子网掩码(Variable-Length Subnet Masks,VLSM)的出现是打破传统的以类(class)为标准的地址划分方法,是为了缓解IP 地址紧缺而产生的,他减少了地址浪费。
CIDR
它是为了缓解IP 地址短缺、减小路由表的体积,打破传统的以类划分网络的一种技术。他采用按连续的块进行地址分配的策略。
四:域名解析(DNS)
由于一般用户很难记住数字形式的IP地址,而名字则比号码更容易记忆,为此Internet从1985年起在原有IP地址系统的基础上,开始向用户提供了DNS域名系统(Domain Name System)。 该域名系统使用字符串来代表与识别所要连接的主机和其所属域,或代表其提供的不同信息服务
域名结构及组成“主机名+域名”的多级结构,一般不超过五级 一个DNS服务器怎样知道给定的域名在哪一个DNS服务器呢,其实他也不知道。但是每个服务器知道根服务器的地址。这就能高效的进行域名的翻译。 1.DNS客户端首先发送一个请求给他本地的DNS服务器,询问server1.eng.ericsson.com的IP地址。 2.如果本地DNS服务器不能对其进行翻译,他就进一步发送请求到根DNS服务器。 3.根DNS服务器只能对顶级域进行分析,他告诉COM域名服务器的IP地址给本地DNS服务器。 4.本地DNS进一步发送请求道COM域名服务器。 5.COM域名服务器告诉本地DNS
能进行ericsson.com域名服务器的IP地址。 6.本地DNS进一步发送请求道ericsson.com域名服务器。 7.ericsson.com域名服务器告诉本地DNS eng. ericsson.com域的域名服务器的IP地址。 8.本地DNS进一步发送请求道eng.ericsson.com域名服务器。 9.eng.ericsson.com域名服务器告诉本地DNS server1.eng.ericsson.com的ip地址。 10.本地域名服务器将这个域名及IP 地址的对应关系进行缓存,以便下次使用,同时将该IP地址发给客户端。
五:地址解析(ARP)
网络设备之间只有互相知道硬件地址(MAC)才能相互通信。地址解析就是进行IP地址和硬件地址相对应的过程。
地址解析协议主要用来获取广播网中使用TCP/IP协议的设备的硬件地址。ARP使用包含目的IP地址的广播进行硬件地址的查询。一旦获得硬件地址,这个硬件地址就和IP地址一起作为一个记录存放在本地ARP缓存中,并保留一定的时间。这是动态ARP。在进行硬件地址广播查询之前,总是先看ARP缓存中是否有相应的记录。
还有一种静态ARP。这种情况下,IP地址和硬件地址的映射是由人工指定的。静态ARP减少了广播流量。但是他配置麻烦,且如果硬件地址更改后又可能就不能通信了。 需要主意的是如果目的主机在另外一个网络,ARP请求是发送给下一跳路由器的。
六:反向地址解析(RARP)
ARP解决了IP地址到硬件地址之间的映射问题。但有时又需要解决硬件地址到IP地址之间的映射问题(如无盘工作站)。
RARP协议允许新启动的设备广播说:“我的MAC地址是00-A0-C9-78-9A-BC,谁知道我IP地址?”。服务器看到这个广播,查询他的配置文件,并会送相应的IP地址。这个服务器就是RARP服务器。 为了阻止多个服务器同时响应一个请求而应起冲突,必须指定一个主服务器来响应请求,其他的服务器只听。如果主服务器坏了,客户端在一定时间后会重法RARP请求。当非主用服务器在一定的时间内重复收到RARP请求,他就认为主服务器不可用,并相应这个请求。
七:BOOTP和DHCP协议
BOOTP和DHCP的作用 BOOT和DHCP是上层协议,他们用来启动和配置主机。除了可以用RARP服务器获得IP地址外,一个刚启动的设备也可以用BOOTP和DHCP来获得IP地址、启动文件的位子及配置信息。他们提供了IP地址和配置文件的管理。BOOTP和DHCP实际是一个相同的协议使用不同的选项。DHCP是BOOTP的增强版。 BOOTP首先由客户端发起,客户端首先通过广播在本地网络发送BOOTP请求,这个请求包含客户端的MAC地址。BOOTP服务器收到这请求后,查询相应的IP地址并通过回应消息发送给客户端。同时他还告诉客户端他的启动文件的位置。当客户端接收到这些信息后,就通过TFTP协议将启动文件下载并启动。 DHCP集中管理了客户端的TCP/IP配置信息。解决了手工配置引起的很多麻烦。DHCP客户端首先发送请求,要求DHCP服务器分配IP地址。DHCP服务器收到请求后,他就在他预先配置的地址池中选择IP地址分配给客户端。另外,DHCP服务器也可以提供子网掩码、缺省网关、DNS、WINS等信息。 DHCP地址分配方式
人工分配 使用这种方式,DHCP服务器只是传递预先配置号的信息给客户端。在服务器中有一个预先配置的一对一的配置信息,每个客户端都对应一个固定的IP地址。这种方式要求网络管理员预先提供MAC和IP的对应关系。 自动分配 这种方式和人工分配方式比较近似,他也是在服务器中有一个一对一的配置表。但是在人工分配方式中,这给配置表是由管理员人工配置的。而在自动分配方式中,这个对应关系是由第一次自动分配后形成的,在客户端第一次获得IP地址后,将一直使用这个IP址,不能再改变。 动态分配 这种方式下,DHCP分给客户端的IP地址只能在一定的时间内使用,当租期过后,客户端重新将获得新的IP地址。他不需要管理员预先定义对应关系。由于IP地址的动态使用,提高了地址的使用效率。
八:ICMP协议
ICMP主要用于进行报告网络错误和发送利于IP传输的控制消息。ICMP并不能使IP更可靠,他只是用于错误报告等信息的发送。他也是基于IP的,他的传送也是不可靠的。
回应请求和回应相应消息。最常用的排错工具就是ICMP的回应请求和回应相应消息。一个主机或者路由器发送一个回应请求给一个指定的目的地,接收到回应请求的任何设备立即产生一个回应响应消息发送个请求者。如果请求者没有受到回应相应消息就意味作目的地不可到达。这就是我们经常用到的PING命令。
Traceroute 是一个使用ICMP和IP头中TTL域的应用程序,他是用来查看一个IP数据包从一个主机发送到另一个主机所经过的路由 当路由器收到的数据包的TTL值为0或者为1时,他就不能转发这个数据包,而是丢弃这个数据包,同时向源主机发送IMCP超时消息。TRACEROUTE的关键是他的IP数据包包含以路由器IP地址作为源地址的ICMP消息。 TRACEROUTE的操作顺序如下: 源主机发送TTL为1的数据包给目的主机。第一个路由器收到这个数据包,将其TTL值减1 ,丢弃该数据包并返回ICMP超时消息。这就指出了该路径上的第一个路由器。源主机然后发送TTL为2的数据包给目的主机,第一个路由器将其TTL减1后转发给第二个路由器,第二个路由器再将其TTL减1,这是TTL=0,丢弃该数据报并返回ICMP超时消息。这时就找到了第二个路由器。 如此循环直到数据包到达目的主机。
九:TCP协议
TCP是一个可靠的、面向连接的服务。面向连接就意味作任何需要通信的两个设备都需要事先建立连接。TCP不支持广播和多播。两个互相通信的实体建立有端点,即套接字。每个套接字由设备的IP地址和端口号组成。端口号被传输协议用来确定消息应该发送给哪个应用进程。
TCP将数据流按顺序分段传输,每个段封装在一个IP包中。每个段分配一个序列号,可靠性就是靠序列号实现的。当TCP发送一个数据段时,他就开始计时,在一定时间过后,如果还没收到对端发回的证实消息,他就重传该数据段。 TCP还提供流量控制,由于TCP连接的每个接收者都有一个有限的缓存空间。当一方发送数据太快,另一端就有可能没有空间来接收数据。流量控制就是为了避免这样的事情发生。同时TCP还能调节发送数据的速度,以适应带宽的限制。
TCP使用三次握手消息建立连接。连接发起方首先发送一个请求段,他包含段的序列号,SYN旗标,以及他的缓存空间大小和他能处理的最大分段。当对端收到这个请求后,他会发送一个确认段,这个段中也包含该段的序列号,SYN旗标,对端发过来段的序列号以及他的缓存空间大小和他能处理的最大分段。第三步是发起方确认对端回送的段。
TCP的滑动窗口协议 上图用可视化的方法显示了我们在前一节观察到的滑动窗口协议。
上图TCP滑动窗口的可视化表示在这个图中,我们将字节从1至11进行标号。接收方通告的窗口称为提出的窗口( o ff e r e d w i n d o w),它覆盖了从第4字节到第9字节的区域,表明接收方已经确认了包括第3字节在内的数据,且通告窗口大小为6。我们知道窗口大小是与确认序号相对应的。发送方计算它的可用窗口,该窗口表明多少数据可以立即被发送。当接收方确认数据后,这个滑动窗口不时地向右移动。窗口两个边沿的相对运动增加或减少了窗口的大小。我们使用三个术语来描述窗口左右边沿的运
1) 称窗口左边沿向右边沿靠近为窗口合拢。这种现象发生在数据被发送和确认时。
2) 当窗口右边沿向右移动时将允许发送更多的数据,我们称之为窗口张开。这种现象发
生在另一端的接收进程读取已经确认的数据并释放了T C P的接收缓存时。
3) 当右边沿向左移动时,我们称之为窗口收缩。Host Requirements RFC强烈建议不要使用这种方式。但T C P必须能够在某一端产生这种情况时进行处理。
十:UDP协议
UDP提供了无连接的,尽力而为的服务。他不能保证数据包都按顺序正确到达。UDP主要用来传输不需要确认的数据,以及短小的零时性的数据。
UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。
与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据报的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。
既然UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。
十一:FTP
F T P是另一个常见的应用程序。它是用于文件传输的I n t e r n e t标准。由F T P提供的文件传送是将一个完整的文件从一个系统复制到另一个系统中。要使用F T P,就需要有登录服务器的注册帐号,或者通过允许匿名F T P的服务器来使用,与Te l n e t类似,F T P最早的设计是用于两台不同的主机,这两个主机可能运行在不同的操作系统下、使用不同的文件结构、并可能使用不同字符集
它采用两个T C P连接来传输一个文件。
1) 控制连接以通常的客户服务器方式建立。服务器以被动方式打开众所周知的用于
F T P的端口( 2 1),等待客户的连接。客户则以主动方式打开T C P端口2 1,来建立连
接。控制连接始终等待客户与服务器之间的通信。该连接将命令从客户传给服务器,
并传回服务器的应答。由于命令通常是由用户键入的,所以I P对控制连接的服务类型就是“最大限度地减小迟延”。
2) 每当一个文件在客户与服务器之间传输时,就创建一个数据连接。由于该连接用于传输目的,所以I P对数据连接的服务特点就是“最大限度提高吞吐量”。
其次,FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的
FTP Commands 一下是一些常用的FTP命令 1. open - connect to remote FTP 2. disconnect - terminate FTP session 3. user - send new user information when already connected 4. cd - change remote working directory 5. cdup - change remote working directory to parent directory 6. lcd - change local working directory 7. pwd - print working directory on remote machine 8. prompt - force interactive prompting on multiple commands 9. get/mget - receive file/get multiple files 10. put/mput - send file/send multiple files 11. hash - toggle printing “#” for each buffer transferred 12. binary - set binary transfer type 13. ascii - set ascii transfer type 14. dir/ls - list contents of remote directory 15. help - get help 16. delete - delete a file on the remote directory 17. close - terminate ftp session 18. bye
十二:MAIL
POP的全称是 Post Office Protocol,即邮局协议,用于电子邮件的接收,它使用TCP的110端口。现在常用的是第三版 ,所以简称为 POP3。POP3仍采用Client/Server工作模式,Client被称为客户端,一般我们日常使用电脑都是作为客户端,而Server(服务器)则是网管人员进行管理的。举个形象的例子,Server(服务器)是许多小信箱的集合,就像我们所居住楼房的信箱结构,而客户端就好比是一个人拿着钥匙去信箱开锁取信一样的道理
下面就让我们一起来看看电子邮件软件收取电子邮件的过程,一般我们在电子邮件软件的账号属性上设置一个POP服务器的URL(比如pop.163.com),以及邮箱的账号和密码。这个在收信过程中都是用得到的。当我们按下电子邮件软件中的收取键后,电子邮件软件首先会调用DNS协议对POP服务器进行解析IP地址,当IP地址被解析出来后,邮件程序便开始使用TCP协议连接邮件服务器的110端口,因为POP服务器是比较忙的,所以在这个过程中我们相对要等比较长的时间。当邮件程序成功地连上POP服务器后,其先会使用USER命令将邮箱的账号传给POP服务器,然后再使用PASS命令将邮箱的账号传给服务器,当完成这一认证过程后,邮件程序使用STAT命令请求服务器返回邮箱的统计资料,比如邮件总数和邮件大小等,然后LIST便会列出服务器里邮件数量。然后邮件程序就会使用RETR命令接收邮件,接收一封后便使用DELE命令将邮件服务器中的邮件置为删除状态。当使用QUIT时,邮件服务器便会将置为删除标志的邮件给删了
十三:HTTP
HTTP定义Web客户(即浏览器)如何从web服务器请求Web页面,以及服务器如何把Web页面传送给客户。下图展示了这种请求—响应行为。当用户请求一个Web页面(譬如说点击某个超链接)时,浏览器把请求该页面中各个对象的HTTP请求消息发送给服务器。服务器收到请求后,以运送含有这些对象HTTP响应消息作为响应。到1997年底,基本上所有的浏览器和Web服务器软件都实现了在RFC 1945中定义的HTTP/1.0版本。1998年初,一些Web服务器软件和浏览器软件开始实现在RFC 2616中定义的HTTP/1.1版本。H1TP/1.1与HTTP/1.0后向兼容;运行1.1版本的web服务器可以与运行1.0版本的浏览器“对话”,运行1.1版本的浏览器也可以与运行1.0版本的Web服务器“对话”
HTTP消息分为请求消息和响应稍息两类
HTTP请求消息 下面是一个典型的HTTP请求消息: GET /somedir/page.html H7TP/1.1
Host:www.yesky.com
Connection:close
User-agent:Mozilla/4.0
Accept-language:zh-cn
(额外的回车符和换行符) | 首先,这个消息是用普通的ASCII文本书写的。其次,这个消息共有5行(每行以一个回车符和一个换行符结束),最后一行后面还有额外的一个回车特和换行符。当然,一个请求消息可以不止这么多行,也可以仅仅只有一行。该请求消息的第一行称为请求行(request line),后续各行都称为头部行(header)。请求行有3个宁段:方法字段、URL字段、HTTP版本宇段。方法字段有若干个值可供选择,包括GET、POST和HEAD。HTTP请求消息绝大多数使用GET方法,这是浏览器用来请求对象的方法,所请求的对象就在URL字段中标识。本例表明浏览器在请求对象/somedir/page.html。版本字段是不言自明的;本例中浏览器实现的是HTTP/1.1版本。
HTTP响应消息 下面是一个典型的HTTP响应消息:
HTTP/1.1 200 0K
Connectlon:close
Date: Thu, 13 Oct 2005 03:17:33 GMT
Server: Apache/2.0.54 (Unix)
Last—Nodified:Mon,22 Jun 1998 09;23;24 GMT
Content—Length:682l
Content—Type:text/html (数据
数据
数据
数据
数据…………) | 这个响应消息分为3部分:1个起始的状态行(status line),6个头部行、1个包含所请求对象本身的附属体。状态行有3个字段:协议版本字段、状态码字段、原因短语字段。本例的状态行表明,服务器使用HTTP/1.1版本,响应过程完全正常(也就是说服务器找到了所请求的对象,并正在发送)。
十四:RFC文档
RFC(Request For Comments)-意即“请求注解”,包含了关于Internet的几乎所有重要的文字资料。如果你想成为网络方面的专家,那么RFC无疑是最重要也是最经常需要用到的资料之一,所以RFC享有网络知识圣经之美誉。
一个RFC文件在成为官方标准前一般至少要经历三个阶段:建议标准、草案标准、因特网标准。
作为标准的RFC又分为几种,第一种是提议性的,就是说建议采用这个作为一个方案摆出来,Draft是已经有一部分在用了,希望被采用为正式的标准,还有一种就是完全被认可的标准,这种是大家都在用,而且是不应该改变的。还有一种就是现在的最佳实践法,它相当于一种介绍。这些文件产生的过程是一种从下往上的过程,而不是从上往下,也就是说不是一个由主席,或者由工作组负责人的给一个指令,说是要做什么,要做什么,而是有下边自发的提出,然后在工作组里边讨论,讨论了以后再交给刚才说的工程指导委员会进行审查。但是工程指导委员会只做审查不做修改,修改还是要打回到工作组来做。IETF工作组文件的产生就是任何人都可以来参加会议,任何人都可以提议,然后他和别人进行讨论,大家形成了一个共识就可以产出这样的文件
参考文献: ERICSSON 《TCP/IP BASIC》。
机械工业出版社《TCP/IP详解 协议》
|