TCP/IP教学扫盲贴
一、TCP/IP概念
TCP/IP的发展历程冗长,一一追溯历史悠久,详细的写出的话比较枯燥了。
简单的来说:
TCP/IP追溯它的源头到1969年一个由美国DARPA(防御高级研究项目代理)创建的一个研究项目。
它是一个实验性网络,ARPANET,在他被证明成功之后,它转化到一个1975年的一个操作。
在1983年,新的协议套组TCP/IP制定为一个标准,网络上的所有主机要求使用它。当ARPANET最终成长为Internet(ARPANET本身在1990年退出历史),TCP/IP的使用传播到超越Internet本身的网络。最为著名的是本地区域网络。但是在快速数字电话设备之前,例如ISDN,它还有一个提升的特征作为一个拨叫网络的传输。
关于发展历史这里可以参考:
http://ebi.seu.edu.cn/tech/ebiz/Internet/history.html
正因为其历史的悠久适用性广泛,TCP/IP经历不断的升级、扩展、整补形成了如今逐渐完善的一个体系,成为目前网络应用中最具有广泛性和代表性的协议群。
TCP/IP是TCP和IP两个协议的集合。它有自己独特的协议模型,被称之为OSI七层模型。(具体见这里吧:http://zh.wikipedia.org/wiki/TCP/IP)
二、关于TCP/IP的版本
随着互联网的发展,目前流行的TCP/IP已经是IPv4协议(IP Version 4,即IP版本四),它已经接近它的功能上限。
IPv4最致命的两个缺陷在与:
地址只有32位(分为四个8位二进制),IP地址空间非常有限;
不支持服务等级(Quality of Service, QoS)的想法,无法管理带宽和优先级,故而不能很好的支持现今越来越多的实时的语音和视频应用。因此IPv6 (IP Version 6, IP版本六)浮出海面,并将最终用以取代IPv4。
三、TCP/IP的是协议的集合
就TCP/IP而言,我们一般了解和使用的相当有限。如大家广泛接触到并熟知的http、ftp、telnet、smtp、pop、snmp等都是属于TCP/IP这个协议簇的一员,TCP/IP是个相当大的家族,其中不仅包括以上广为大家熟悉的协议,还包括了其他相当大部分的不为大家熟知的内容(ARP,IP,ICMP,UDP,BOOTP,TFTP等),并且还在基于不同的新应用不断壮大中。
呵呵,现在已经有的扩展部分的TCP或者基于TCP传输的协议P2P方式的ed2k(我们的小骡子eMule用的协议哦);流媒体方式rstp,mms;基于语音通信的VoIP(或者这个也可以说是基于ip的另类传输应用)等。
四、关于ip地址的表示
也许这部分是许多朋友关心的部分了,我们也开始切入正题了。
目前的互联网协议是第四版本(IPv4),前面也提到了,它是由4个8位二进制数来表示,以点分割。
当然,全是1和0的数值让人眼晕,往往我们也用其转化成为00~FF的两个十六进制数字或者0~255的十进制数字表示。
其转化的方法很简单,十六进制可以以四位为一个节点,分成两部分:
比如10100011就可以分成1010和0011,这样分别得到两个十六进制数值A和3,那么这位的十六进制表示就是A3,呵呵就这么简单。(你不会转十六进制?介个8系偶讨论的范畴,windows计算器看到了吧,用介个吧。)
至于10进制,16进制的十位数乘以1.6加上尾数的数值,A=10,B=11类推,F=15。比如前面的A3就是10*1.6 3=163(因为A=10)。
五、IP地址的局限性
最初的因特网设计者没有预想到可以追溯到因特网发展的早期决策上,IP网络会如此快速地发展,因此现在网络面临的问题都地址的分配更能体现这一点。
目前使用的IPv4地址使用32位的址可用。这样的地址空间在因特网早期看分配给某个组织或公司,而没有考虑到IP地址,即在IPv4的地址空间中有232(约43亿)个地来几乎是无限的,于是便将IP地址根据申请而按类别v4地址空间最终会被用尽。
IPv4地址是按照网”的概念。A、B、C三类IP它们并不利于有效地分配有用,而C类地址所容纳的主限的地址空间,不适合网络络的大小(所使用的IP地址数)地址的定义很容易理解,也很容限的地址空间。对于A、B类地址机数又相对太少。所以,现有类规划。来分类的,它的编址方案使用“类易划分,但是在实际网络规划中,很少有这么大规模的公司能够使别的IP地址并不利于有效地分配。
在这种情况下,人协议并不完善和成熟,还需的过程,在过渡期间我们仍变长子网掩码(VLSM)和无效率的短期解决方案起到了人们开始致力于下一代因特网协议要长期的试验验证,因此,IPv4然需要在IPv4上实现网络间的互类域间路由(CIDR)等机制,作很好的作用。
——IPv6的研究
由于现在IPv6的到IPv6的完全过渡将是一个比较长连。而在20世纪90年代初期引入的为过渡时期提高IPv4地址空间使用。
(8好意思,懒得写,这段是刚刚看到摘抄来的。部分涉及下面讲述的内容,有疑惑请看下去。)
五、掩码
TCP/IP规定了网络ID为同一类的ip地址可以直接传输。但问题是怎么算是同一网络ID呢?
这个需要介绍的一个概念是子网掩码,子网掩码是用来区分ip地址和ip地址之间是否属于同一网络的一个数值,这个数值本机有效,并不传播出去。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
六、IP的分类
互联网是把全世界的无数个网络和主机连接起来的一个庞大的网络,每个网络中的计算机通过其自身的IP地址而被唯一标识的,据此我们也可以设想,在INTERNET上这个庞大的网络中,每个网络也有自己的标识符。这与我们日常生活中的电话号码很相像,例如有一个电话号码为021 163,这个号码中的021表示该电话是属于哪个地区的,后面的数字表示该地区的某个电话号码。非常的类似,我们也把互联网的地址分类:
类别 范围 二进制首位 可变地址位长
A类 0-127 0 24位
B类 128-191 10 16位
C类 192-223 110 8位
D类 224-239 1110 组播地址 (特殊应用)
E类 240-255 1111 保留试验使用 (特殊应用)
由于D类和E类为特殊应用,一般我们这里讨论的将是A、B、C三大类。
七、公有ip和私有ip
一直以来,这部分碰到的问题是最多的。
因为互联网ip资源的缺乏我们的局域网(私有网络,LAN)不可能使用公有地址来标识,这将使原本就稀缺的资源更加紧张。
因而,一般来说我们将内部网络和互联网以路由器分隔开来,形成相对独立的另类网络。
基于ip地址的特有性质,为了避免私有网络的地址被互联网解析、连通带来的不必要的资源浪费、安全性问题和其他麻烦,
在RFC1597中互联网上负责分配IP地址的IANA(Internet Assigned Number Authority)将以下三段分别对应A、B、C类的地址空间保留给私有网络使用:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
这一地址段中的地址在互联网上被标识为无效,仅供各个公司、学校、私人等网络使用。
p.s.:我见过很多人(尤其是早期的教育网特别常见)将公有ip截取某个段分配给自己的网络使用,这点极为不可取。
尽管,这点将不会在你的网络设备上产生错误,但是,当连接互联网的路由器将路由表广播出去后,将造成互联网ip的混乱和私有网络的公开,这里不叙述了,需要知道为什么的可以PM给我。
八、距离、路由和路由器和路由协议
距离是指跨越不同网段的个数,如果从A到B需要经过一个网段,那么距离就是1。
所谓路由,就是互联网上从一个网络访问到另一个一个不同网络的过程。
路由器,就是一台特殊的计算机,它具有:
·处理器(CPU)
·不同种类的内存
·操作系统
·至少两个端口(可以同种类或者不同种类)
它的作用就是实现路由,让你从一个网络访问到另一个不同的网络。
路由协议,是辅助路由器工作,尽量减少它的错误和使之提高效率的跨网间协议,
它最大的作用就是尽量减少访问的距离,减少网络不能到达的状况的发生。
九、端口
本质上说,TCP/IP实现的服务就是基于端口的服务。
不同的端口标识着不同的服务,它的范围是1~65536。
在澄清端口的概念前,我们需要知道TCP和UDP是两个不同的协议,完全不同。
而绝大多数情况下,我们所指的端口是TCP端口。
对计算机来说,端口的标识号就是进程号,一个标志着这个特有进程的id,和我们读书的学号没什么不同。
它分为源端口号和目的端口号。
根据RFC规范:IANA规定用作服务端的TCP端口号是不变的,其中小于等于255的号码是需要特别申请的,
从256到1024的端口号预留给各个著名的独立开发规范标准的软硬件厂商(如微软、CISCO等),
从1024以上的端口号可作为软件编程所使用。
这里值得一提的是,虽然没有规定,Microsoft建议个人使用大于5000的端口号。
尽管端口范围仅仅具有65536个值,但是理论上来说作为服务器端可以提供超过6万个服务,
从这个意义上来讲,端口号是用不完的。
在C/S(客户机/服务器)模式下,对应打开的服务端口会打开一个相应的客户端口,
在这个问题上,IANA规定这个端口将是随机的,并且它的id将大于1024。
关于UDP的端口和TCP并无关联,虽然IANA标准组织有意错开其使用的端口号,
但事实上一旦重复了在技术上也不会有错误,其错开使用是为了防止混淆罢了。
附常用的服务和对应的TCP端口:FTP 20/21(FTP占用两个端口,端口20和大于1023的端口用于传输数据,端口21为命令传输)、Telnet 23、DNS 53(NTP和DNS一样跨越TCP和UDP,端口一样)、SMTP 25、TFTP 69、SNMP 161、POP 110、HTTP 80、HTTPS 443、NTP 123(同DNS)、NNTP 119、X-Windows 6000~6100、RPC 135。
十、TCP和UDP的区别
TCP是个相对可靠的协议,它通过三次握手机制保证数据包传输的不丢失,在牺牲效率的前提下保证恶劣网络环境下数据传输的可靠性。
UDP则相对简单的多,它默认网络状况非常良好,TCP的可靠性机制对它不再重要,它大大提升了传输的效率,却也提供了“无连接”、“不可靠”的数据报服务。(所谓的无连接是指没有握手确认机制,默认连通;不可靠则是相对TCP而言)
子网掩码概念补遗:
Internet上,提供的三类ip地址,
A类:8位的网络标识,24位的地址标识,子网掩码255.0.0.0;
B类:16位的网络标识,16位的地址标识,子网掩码255.255.0.0;
C类:24位的网络标识,8位的地址标识,子网掩码255.255.255.0。
在一个网络上,通信量和主机数量是成正比的,而且,也和每个主机产生的通信量的和成正比。
随着网络规模越来越大,那么这种通信将会达到超出介质承载能力的程度,一旦发生类似问题,
网络的性能将开始下降,并且幅度随着主机数量的增加,下降将成加速度。
那么,减少同一网络的主机通信量到一个合理的水平将是一个主要的问题。
子网掩码正是起了这个作用。
和正常的子网掩码不同,我们将引入可变长子网掩码(VLSM)的概念,
我们知道,计算机是通过将自有地址和子网掩码做并(AND)运算来获知自己的网络id,判断ip包是否需要经过路由的。
这样,通过调节子网掩码的位长,我们将可以自由的控制我们网络的大小和可容纳主机的数量。
可变长子网掩码通过缩减最后的二进制位长来调节自身的长度,收缩网络。
我们所指的位长,即是指二进制的子网掩码的1的个数。
这个调节并非是无限制的,其规则为临近8位的位组边界(即.分隔)开始,
递减为2的次方并且最大不得递减大于128,尽管这是理论值,然而事实上,最低的递减是2位。(本节过后来说明)
通俗的说,既是贴近位组边界,将右方的第一个1变成0,
这样,位长缩减了1位,2^1=1,
相应的,缩减2位就是将靠右的2个1依次缩减,即2^2=4,
缩减三位为2^3=8,类推。
比如,标准的C类子网掩码为:255.255.255.0,位长24,
其二进制表示则为:11111111.11111111.11111111.00000000
当我们把它的位长递减2,则相应变为:11111111.11111111.11111100.00000000(位长22,即255.255.252.0)
递减3位,则是:11111111.11111111.11111000.00000000(位长21位,255.255.248.0)
这里可以来解说为何其实最小的缩减为2位,由于一个网络段的起始ID和结束ID被分别作为网络段的标识ID和广播地址,
那么如果要保证一个网络可用则需要至少4个地址(必须为2的倍数),即一个起始地址,一个结束地址和两个正常使用的地址。
不大于128是因为子网的分割将小于2个,这也不符合子网个数为2的倍数(至少为2)的原则,所以。。。