TCP/IP 协议族
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议, 由于各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别。所以需要一种协议来相互之间通信。TCP IP协议族就是不同种操作系统之间通信的协议。
1. 协议分层
1. 数据链路层:SLIP、PPP
2. 网络层:IP、ARP、RARP、ICMP
3. 传输层:TCP、UDP
4. 应用层:FTP、TELNET、SMTP、HTTP、TFTP
2.IP协议 网络层
IP协议是TCP/IP协议族中最为核心的协议,所有的TCP、UDP、ICMP及IGMP数据都以IP数据报格式传输。
IP协议提供不可靠、无连接的数据报传送服务。
IP数据报
版本: 指IP协议所使用的的版本。目前广泛使用的IP协议版本号为4
首部长度: IP首部长度,可表示的最大十进制数值是15。注意:该字段表示首部占32bit(4个字节)的数目。因为最大只能表示15个,所以首部长度最大为60字节
服务类型: 优先级标志位(3bit)和服务类型标志位(4bit分别表示最小时延D,最大吞吐量T,最高可靠性R,最小费用C)以及1bit未用位(置0) 优先权(0-7)数越大,优先级越高。
总长度: 指IP的首部和数据部分的长度,单位为字节。总长度为16位,因此最大长度为2^16- 1 = 65536字节。知道首部长度以及总长度可以得到数据部分的起始位置以及数据长度。
标识: 一个唯一的标识数字,用来标识一个数据报或者被分片数据报的次序
标志: 用来标识一个数据包是否是一组分片数据包的一部分。 最低位MF(More Fragment)。当MF=1表示后面“还有分片”的数据包,MF=0表示这已经是最后一个分片数据了,中间位DF(Dont Fragment)不能分片,只有当DF=0时,才允许分片
片偏移: 一个数据包其中的分片,用于重新组装数据用
生存时间(TTL): 用来定义数据包的生存周期(初始值由源主机设置通常为32/64),经过一个路由器-1。
协议: 用来识别上层协议数据包所属类型
首部检验和: 一个错误的检测机制,确保IP头部没有被修改
源地址: 发送端的IP地址 目的地址:数据包目的的IP地址
可选字段:保留作额外的IP选项
数据部分:需要IP传递的实体数据
数据报的层层封装
通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
封装是从上往下,解析是从下往上,依次解析。
(一)IP协议的功能:
(1)寻址和路由;(根据对方的IP地址,寻找最佳路径传输信息);
(2)传递服务:① 不可靠(IP协议只是尽自己最大努力去传输数据包),可靠性由上层协议提供(TCP协议);② 无连接;(事先不建立会话);
(3)数据包的分片和重组 。
1.IP地址
(1)IPv4
在主机或路由器中存放的IP地址(IPv4)都是32位的二进制代码。它包含了网络号(net-id)和主机号(host-id)两个独立的信息段。网络号用了标识主机或路由器所连接到的网络,主机号用来标识该主机或路由器。
--IP地址分类
A<128 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”,地址范围从1.0.0.0到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。 数字0则表示该地址是本地宿主机,不能传送。
B<192一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机。
C<224一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
D<240D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。
E<255以“llll0”开始,为将来使用保留。全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
--公网IP地址
公有地址分配和管理由Inter NIC(Internet Network Information Center 因特网信息中心)负责。各级ISP使用的公网地址都需要向Inter NIC提出申请,有Inter NIC统一发放,这样就能确保地址块不冲突。
--私网IP地址
创建IP寻址方案的人也创建了私网IP地址。这些地址可以被用于私有网络,在Internet没有这些IP地址,Internet上的路由器也没有到私有网络的路由表。
A类:10.0.0.0 255.0.0.0,保留了1个A类网络。
B类:172.16.0.0 255.255.0.0~172.31.0.0 255.255.0.0,保留了16个B类网络。
C类:192.168.0.0 255.255.255.0~192.168.255.0 255.255.255.0,保留了256个C类网络。
(2)IPv6
IPv6地址长度是128位,由8块(或8个字段)组成,每一块都包含四个16进制数,每块由冒号分隔。
有以下特点:
1、一个块中前导的0不必书写。
2、全0的块可以省略,并用符号::代替。
3、IPv6可以兼容IPv4地址,即可以用IPv6格式表示IPv4地址。
表示方式为:IPv6块值为ffff,其后面紧跟“点分四组”的格式。如:
::ffff:10.0.0.1
可以代表IPv4:10.0.0.1
4、IPv6的低32位通常采用点分四组(就是上面那样)的表示法。
2.子网掩码
(1)子网掩码的概述及作用
子网掩码是一个应用于TCP/IP网络的32位二进制值,每节8位,必须结合IP地址对应使用。
子网掩码32位都与IP地址32位对应,如果某位是网络地址,则子网掩码为1,否则为0。
子网掩码可以通过与IP地址“与”计算,分离出IP地址中的网络地址和主机地址,用于判断该IP地址是在局域网上,还是在广域网上。
子网掩码一般用于将网络进一步划分为若干子网,以避免主机过多而拥堵或过少而IP浪费。能有效的隔离广播域,使得每个广播域的范围不至于太大
(2)子网掩码和IP地址的计算
1、 网络地址 网络号是用于三层寻址的地址,它代表了整个网络本身;另一个是广播地址,它代表了网络全部的主机。网络号是网段中的第一个地址,广播地址是网段中的最后一个地址,这两个地址是不能配置在计算机主机上的。
2、 广播地址 它代表了网络全部的主机
3、 地址范围
4、 本网有几台主机
3.IP寻址
IP数据包的传输过程。
最特殊的情况是目的主机和主机直连,那么主机根本不用寻找路由,直接把数据传递过去就可以了。稍微一般一点的情况是,主机通过若干个路由器(router)和目的主机连接。那么路由器就要通过ip包的信息来为ip包寻找到一个合适的目标来进行传递,比如合适的主机,或者合适的路由。路由器或者主机将会用如下的方式来处理某一个IP数据包。如果IP数据包的TTL(生命周期)以到,则该IP数据包就被抛弃。
1. 搜索路由表,优先搜索匹配主机,如果能找到和IP地址完全一致的目标主机,则将该包发向目标主机
2. 搜索路由表,如果匹配主机失败,则匹配同子网的路由器,这需要“子网掩码”的协助。如果找到路由器,则将该包发向路由器。
3. 搜索路由表,如果匹配同子网路由器失败,则匹配同网号路由器,如果找到路由器,则将该包发向路由器。
4. 搜索路由表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
5. 如果都失败了,就丢掉这个包。
这也证明了,ip包是不可靠的。因为它不保证送达。
网络通信的过程
现在我们假设有2个主机,主机A和主机B通信,首先主机A通过本机的hosts表或者wins系统或dns系统先将主机B的计算机名转换为IP地址,然后用自己的IP地址与子网掩码计算出自己所在的网段,比较目的主机B的ip地址与自己的子网掩码,发现与自己是出于相同的网段,于是在自己的ARP缓存中查找是否有主机B 的mac地址,如果能找到就直接做数据链路层封装并且通过网卡将封装好的以太网帧发送有物理线路上去:如果arp缓存中没有主机B的的mac地址,主机A将启动arp协议通过在本地网络上的arp广播来查询主机B的mac地址,获得主机B的mac地址后写入arp缓存表,进行数据链路层的封装,发送数据。
如果发现A和B不在一个网段中时候,A先找到A的网关C(可以看做路由器),然后网关C会把数据交给另外一个网段的网关D,如果D发现B在这个网段下,就把数据发送给B;如果发现不在,网关D会继续搜索路由表,找到可以到达B的线路。
路由器在其中的作用
所以路由器最主要的作用是维护路由表,寻找最佳路由然后转发报文
路由表的建立与维护
路由表中路由有三类:(1)链路层协议发现的路由(即是直连路由)(2)静态路由(3)动态路由协议发现的路由。
静态路由入口由网络管理员手工配置的静态路由组成,动态路由入口由路由协议如RIP、OSPF、BGP等交换的路由表信息组成。执行路由操作所需要的信息被包含在路由器的路由表中,它们由一个或多个路由选择协议进程生成。路由表的内容被限制为只含有到所有目的地的最佳路由。如果存在多条等佳路径,那么所有这些路径都将被列入路由表。
动态协议更新路由表
RIP
RIP采用距离向量算法。路由器收集所有可到达目的地的不同路径,并且保存有关到达每个目的地的最少站点数的路径信息,除到达目的地的最佳路径外,任何其它信息均予以丢弃。同时路由器也把所收集的路由信息用RIP协议通知相邻的其它路由器。这样,正确的路由信息逐渐扩散到了全网。
0SPF
RIP不能适应大规模异构网络的互连。0SPF是一种基于链路状态的路由协议,需要每个路由器向其同一管理域的所有其它路由器发送链路状态广播信息。在OSPF的链路状态广播中包括所有接口信息、所有的量度和其它一些变量。利用0SPF的路由器首先必须收集有关的链路状态信息,并根据一定的算法计算出到每个节点的最短路径。而基于距离向量的路由协议仅向其邻接路由器发送有关路由更新信息。
与RIP不同,OSPF将一个自治域再划分为区,相应地即有两种类型的路由选择方式:当源和目的地在同一区时,采用区内路由选择;当源和目的地在不同区时,则采用区间路由选择。这就大大减少了网络开销,并增加了网络的稳定性。当一个区内的路由器出了故障时并不影响自治域内其它区路由器的正常工作,这也给网络的管理、维护带来方便。
LAN口不能和WAN口网段相同
如果网段相同,则主机不能判断,访问的是内网还是外网地址,有混乱。并且没有意义
为什么有了IP地址,还要使用MAC地址:
① IP地址一般情况下容易修改和变动,具有随意性,不能在网络上固定标识一台设备;
② MAC地址一般情况出厂时由厂家烧录到网卡中,不容易修改,在局域范围内容易唯一定位一台设备。
③ 从拓扑结构和分层上分析,IP地址属于网络层,主要功能在广域网范围内路由寻址,选择最佳路由,而MAC地址在网络接口层要形成适合于网络媒体上传输的数据帧。
2. ARP 网络层协议
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 当不知道目标主机的mac地址时使用。
ARP协议工作过程:
1. 原理:(ARP协议只使用于局域网中)
1> 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。
2> 在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。
3> ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
4> 点对点的连接是不需要ARP协议的
2. 工作过程:
1> 当主机A向本局域网上的某个主机B发送IP数据报时,就先在自己的ARP缓冲表中查看有无主机B的IP地址。
2> 如果有,就可以查出其对应的硬件地址,再将此硬件地址写入MAC帧,然后通过以太网将数据包发送到目的主机中。
3> 如果查不到主机B的IP地址的表项。可能是主机B才入网,也可能是主机A刚刚加电。其高速缓冲表还是空的。在这中情况下,主机A就自动运行ARP。
(1)ARP进程在本局域网上广播一个ARP请求分组。ARP请求分组的主要内容是表明:我的IP地址是192.168.0.2,我的硬件地址是00-00-C0-15-AD-18.我想知道IP地址为192.168.0.4的主机的硬件地址。
(2)在本局域网上的所有主机上运行的ARP进行都收到此ARP请求分组。
(3)主机B在ARP请求分组中见到自己的IP地址,就向主机A发送ARP响应分组,并写入自己的硬件地址。其余的所有主机都不理睬这个ARP请求分组。ARP响应分组的主要内容是表明:“我的IP地址是192.168.0.4,我的硬件地址是08-00-2B-00-EE-AA”,请注意:虽然ARP请求分组是广播发送的,但ARP响应分组是普通的单播,即从一个源地址发送到一个目的地址。
(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓冲表中写入主机B的IP地址到硬件地址的映射。
反向地址转换协议(RARP:Reverse Address Resolution Protocol) 反向地址转换协议(RARP)允许局域网的物理机器从网关服务器的 ARP 表或者缓存上请求其 IP 地址。
3. ICMP
ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用 。ICMP协议主要用来检测网络通信故障和实现链路追踪
1.ICMP询问报文有四种回送请求和回答,时间戳请求和回答,掩码地址请求和回答,以及路由器询问和通过。
1>ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的机器必须给源主机发送ICMP回送应答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。
2>ICMP时间戳请求允许系统向另一个系统查询当前的时间。该ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间只能提供秒级的分辨率。请求端填写发起时间,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。大多数的实现是把后面两个字段都设成相同的值。
3>主机使用ICMP地址掩码请求报文可向子网掩码服务器得到某个接口的地址掩码。系统广播它的ICMP请求报文。ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回,这样,发送端就可以把应答与请求进行匹配。
4>主机使用ICMP路由器询问和通过报文可了解连接在本网络上的路由器是否正常工作。主机将路由器询问报文进行广播(或多播)。收到询问报文的一个或几个路由器就使用路由器通过报文广播其路由选择信息
ping
因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP;回声请求消息给目的地并报告是否收到所希望的ICMPecho (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令。作为一个生活在网络上的管理员或者黑客来说,ping命令是第一个必须掌握的DOS命令,它所利用的原理是这样的:利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。
1.ping 整体过程
主机A 192.168.0.2 ping B 1.1.1.5
主机A打开命令提示符(具体方法:开始——运行——cmd),命令提示符(>)后输入ping 1.1.1.5 当“ping”这个指令被计算机执行的时候,TCP/IP协议栈会调用该协议栈互联网层的“ICMP”协议封装“ping 1.1.1.5”这个请求。
ICMP协议封装如下:
1->Host A(主机A)若要将这个ICMP协议封装的请求发送给目标主机B(Host B)就必须要使用IP协议来“运输”该请求。此时需要IP协议进行封装,将ICMP这个数据包写上发送者(主机A)的IP地址和接收者(主机B)的IP地址,然后就可以根据这个目标地址传递数据包。
IP协议在封装如下:
2->下一步进行数据链路层的封装。
2-->判断目标主机B在本地网络还是在远程网络。根据IP地址和子网掩码可以计算出了目标主机B在远程网络。
3->主机A首先会查询自己的路由表,看在自己的路由表中能否找到去往目标网络(网络B)的路由条目。若没有则发送到默认网关或缺省网关,由这个默认/缺省网关再将该数据包转发到目标网络。现在主机A知道了默认网关是自己的下一跳地址,主机A开始执行封装。封装信息如下:
4->在以上所封装的寻址信息当中,主机A唯一不知道的就是“下一跳设备的MAC地址”,这里的“下一跳设备MAC地址”是指主机A的默认网关的F0/0接口的MAC地址。首先主机A查看自己的ARP缓存表,每台主机/电脑都有这个ARP缓存表,该缓存表记录着与自己发生过通信的所有的直接相邻设备或主机的硬件地址(MAC地址),ARP缓存表经过一段时间会自动删除,比如Windows 的动态 ARP 缓存条目不超过 10 分钟就会被删除。如果主机A与路由器之前曾发生过通信,主机A自然能在ARP缓存表中找到路由器F0/0的硬件MAC地址,可是如果这是主机A与路由器的第一次通信,则主机A会向网络A上发送发送ARP广播请求数据包,该ARP请求包包含的关键信息如下:
5->以上ARP请求包中封装的三项信息都是已知的,只有“目的MAC地址”这一信息是未知的(全“0”填充)。当该ARP请求包发送到网络A上时,网络A上的设备接收该ARP包并查看该ARP包内的具体封装信息。因为该ARP包中封装的目的IP地址是192.168.0.1,所以只有具有192.168.0.1这个IP的接口或设备才应答该ARP查询请求,应答者会将自己的硬件MAC地址封装到这个ARP应答数据包中。这个ARP应答数据包(本例中由路由器F0/0接口发出ARP应答)封装的关键信息如下:
6->主机A通过ARP协议解析出路由器F0/0接口的MAC地址从而完成了数据链路层的封装。最后主机A完成MAC地址解析后将该帧发送到网络A上,该帧的具体封装如下:
7->因为该帧的目的MAC地址是某个的MAC地址,所以只有路由器的该接口接收并处理该数据帧。路由器将该帧解封装并查看网络层的封装信息,路由器看到该数据包网络层封装的目的地址是1.1.1.5。路由器为了将这个数据包转发到1.1.1.5,进行新一轮的网段查询,发现路由器F0/1接口与主机B网段相同,取得b的mac地址,封装以太网帧转发。
8->这样主机B就收到了该数据帧,主机B对该帧进行解封装看到了网络层封装的目的IP地址,知道这个数据包的目的地是自己后,主机B继续对其拆封装并查看ICMP报头内的信息得出结论:这是一个请求自己进行反馈的数据包,需要自己将这条“数据包已到达主机B”的信息回馈给主机A。因此主机B为了将回馈信息顺利送达主机A需要经过如封装:
主机B在发送应答数据包时封装的目的MAC地址是路由器F0/1接口的MAC地址,这也是主机B通过路由判断和与运算得出的结论,对于主机B来说路由器F0/1接口是它的下一跳。所以相当于原路返回。
从主机A到路由器再到主机B执行的封装过程中可以看出网络层封装的信息是始终不变的:源IP是192.168.0.5 目的IP是1.1.1.5。始终变化的是一跳一跳的硬件MAC地址。
traceroute 路由追踪
traceroute (Windows 系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器。TTL 值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP 呼叫报文的TTL 值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器,Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具。
原理
Traceroute的原理是知道目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发一个TTL=2的UDP数据报给目的主机,然后刺激第二个路由器给主机发ICMP数据报。如此往复直到到达目的主机。这样,traceroute就拿到了所有的路由器ip。