TCP/IP协议学习随笔(一)

                            之前有学过一点http以及TCP,但涉及不深,这就来系统学习下。

第一章:引言

协议:

      一组控制数据通信的规则。

语法:特定的数据结构,如同编程语言用语法写出程序。

语义:二进制比特流传输代表的意义,传输的是什么。比如邮政编码每一位数字的含义。

时序:通信时间,什么时候开始通信。

TCP/IP是事实上的标准。

osi七层计算机网络模型是ISO制定的。

硬件网络协议是IEEE制定。比如无线局域网协议等。

物理传输标准EIA制定。比如以太网双绞线传输标准。

因特网标准:所有网络协议文档都在rfc官网上。

RFC文档示例:

RFC文档会有状态标注,因为后面的RFC会对前面的做出补充或者修改,修改过的,过时的都会有对应的标记。

比较常用的是这个:

第二章:

OSI是个网络结构体系概念模型,不是协议,由ISO组织制定。OSI七层模型:

物理层:网卡,网线,集线器,中继器,调制解调器

数据链路层:网桥,交换机

网络层:路由器

网关工作在第四层传输层及其以上

应用支持层包括:

1.应用层

2.表示层

3.会话层

两台终端之间的协议通信是 对等层 通信的,比如应用层对应用层  , 传输层对传输层进行通信。

服务在协议栈中的概念:

底层对上层提供服务,上层是使用服务的,服务只能在相邻的上下两层间执行,不可能跨越多层,服务只能在同一主机,不可能对  跨主机或者网络设备的相同上层   提供服务。

服务也不可能上层对下层提供服务,下层永远为上层做服务,上层不对下层服务。

接口:

服务的使用与提供都是经过接口(通道)来实现,每一层都会有相应的接口。

不同系统的同一层称对等层

对等层之间的通信的实现靠的是终端的对等进程或者对等实体(在操作系统层次上看就是进程间的通信)。

对等层通信使用的就是相应的对等层协议。

不同功能使用不同协议进行传输,来完成不同功能。

由于同一层上也有很多对等实体,所以对等实体这个概念要有个限制:

实质上各个层之间的通信(是虚线,物理层是实线)都是通过物理层介质将数据送达乙方主机实现的。也就是上层协议栈所有数据一层一层向下转发最终汇聚在物理层,然后送到乙方主机,对等层接受数据(数据依次送往高层)。如图:

通过观察上图可以发现:当数据从顶层往下发送时,每一层都会把来自上一层的数据加上一个头部,如图中:H6  H5,这些头部包含有本层的控制信息。到了数据链路层,除了加上头部,还加上了尾部,用于校验物理链路的数据是否出错,如果出错则丢弃不发送。

接受时:则是相反的动作,物理链路层取出加上的尾部和头部然后向上传,上面的协议也一样取出头部完成功能后,把数据部分再向上传递,一直到最顶层。

对等层的通信是逻辑上的通信,是虚通信。最终要经过物理链路发送。对等层之间传送的信息是无增加无减少的。

各层的PDU都有专业名词:

物理层是没有PDU的。因为每层PDU(数据传输单元)是有自己的格式的,而物理链路层将这些数据转换成了二进制数据流了(比特流)。另外,在OSI参考模型中,物理层(Physical Layer)是参考模型的最低层,也是OSI模型的第一层。物理层的主要功能是:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。物理层的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。使其上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

发送方:一层层的封装。   接受方:一层层的拆。

(有些书籍定义了5层)。

其实OSI模型层和TCP/IP划分是差不多的。

TCP/IP互联设备----路由器

物理网络:物理链路和数据链路层

平等指的是:不能区别对待,不能因为运行机制不同而不传输。

                                               

物理网内部的网络不是因特网(TCP/IP)要解决的,TCP/IP要解决的是主机间的通信。

虽然每一层之间都有一个接口,但传输层与应用层之间的socket接口比较特殊,socket可以做到应用层往传输层的统一。

编址:

因特网常用地址:

物理地址:特点:由于物理层的功能只负责将信息转换为比特流传输到介质上,所以寻址功能是在链路层而不在物理层,也就是说物理地址是链路层地址,不是物理层地址。有时候也称硬件地址,是一种固化在网络接口设备 上的地址(针对局域网),比如每个网卡都有相应的物理地址。

物理地址的格式不是统一的。通信特征也不同,由所在的局域网,广域网决定,并且要在所使用的网络内唯一,在所有的网络内可以不唯一,就是说物理地址只要求在网络内部唯一。

常见的两种获得IP地址的方式:

pppoe是拨号上网方式,连接成功后isp随机给你分配Ip以便你能上网;后面两种方式都用不着使用者这边主动拔号连网,只要路由开机后就可以握手连网成功,这两种不同的是静态ip一般用于专网或单位光纤,由运营商指定后不变,而动态Ip即dhcp 是由运营商DCHP服务器系统在你开机联网时随机分配的ip,以便联网,区别于pppoe就是多一个拨号过程,常用于小型专网或运营商测试帐号,或者路由器级联用。

DHCP 客户,支持为了获取动态租用 IP 配置和相关的可选参数信息而与DHCP 服务器通讯的任意网络启用的设备,一般是路由器。

pppoe,通过宽带连接(诸如单一的 DSL 线路、无线设备或电缆调制解调器)使以太网上的用户连接到 Internet 的规范,使用 PPPoE 和宽带调制解调器,LAN 用户可获得高速数据网络的个人身份验证访问,将以太网和点对点协议 (PPP) 合后,PPPoE 能以高效的方式为每个用户创建到远程服务器的单独连接。

DHCP:全称Dynamic Host Configuration Protocol(动态主机配置协议) 。

DNS:全称Domain Name System(域名服务系统)。

PPPoE:全称PPP over Ethernet(以太网上的点对点协议)。

Dynamic Host Configuration Protocol  动态主机配置协议。  

所有PPPOE、DHCP或者其他上网方式,最后都是为了获得一个能上网的IP而已,一旦获得了这个IP,以后上网的效果都是完全一样的。区别就是:
静态IP,不要认证,直接一开机就能上网。
DHCP,也不要认证,但是你自己开机的时候不知道自己IP多少,要等DHCP的服务器随机从所有能上网的IP里面分配一个给你。
PPPOE就是要先认证,只有帐户密码正确以后才分配一个有效的IP给你。
【拓展资料】
1、静态IP的方式,如果是占用一个INTERNET的IP的话,上网都是很贵的,当然这个也是最方便的,开机就能上网,不用做任何拨号或者认证的过程。
2、PPPOE,只是多了一个获得IP的过程,一旦获得了IP以后,就和静态IP一样了
一般可以这样和静态IP的方式做个比较:
比如你的运营商,手上有1000个静态IP。如果他把这1000个IP分给1000个用户,那这1000个用户就一人有一个IP,这个就是静态IP的模式。这个时候IP的利用率是很底的,因为这1000个人可能很多时候没有上网,这个IP是空闲的。但是事实上,INTERNET的IP现在是很昂贵的,运营商会尽量多利用起这1000个IP,于是他们就想了个办法,就是看谁先上来,他就从这1000个IP里面挑一个给他用,你下网了,他就把这个IP收回去,然后就等准备分给下一个人,这样他就可以有远超过1000个客户了。就是说他保证了这1000个IP几乎每时每刻都在同时被使用。 你获得这个IP的过程就是PPPOE。
3、至于DHCP,其实也和PPPOE有点类似,也是一个获得IP的过程。只是DHCP一般是不要认证的,只要是个人上来他都会分配一个IP给他。而PPPOE的话,要你输入帐户/密码,认证通过以后才会给你分配IP。

常见的物理地址:MAC地址(16进制 表示48比特)

MAC地址英语:Media Access Control Address),直译为媒体访问控制地址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网上设备位置的地址。在OSI模型中,第三层网络层负责IP地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。

MAC(Media Access Control,介质访问控制)地址,也叫硬件地址,长度是48比特(6字节),由16进制的数字组成,分为前24位和后24位:

前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。

后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。

MAC地址对应于OSI参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机MAC地址和自身端口的数据库,交换机根据收到的数据帧中的“目的MAC地址”字段来转发数据帧。

谈起MAC地址,不得不说一下IP地址。IP地址工作在OSI参考模型的第三层网络层。两者之间分工明确,默契合作,完成通信过程。IP地址专注于网络层,将数据包从一个网络转发到另外一个网络;而MAC地址专注于数据链路层,将一个数据帧从一个节点传送到相同链路的另一个节点。

在一个稳定的网络中,IP地址和MAC地址是成对出现的。

IP地址:特点: 32位 十进制表示并且以.分割  

和物理地址不同,IP地址要求在全部物理网络或者逻辑网络内唯一,在因特网内唯一,所以IP和物理地址唯一性的范围不一样。

端口地址:特点:

所有应用都是以进程方式实现的。也就是说由端口标识进程,进程实现应用。

21是FTP的端口    80是HTTP端口  23是talnet端口    25是SMTP端口    

总结一点:物理地址在物理网络内使用 ,IP地址在互联网上使用,端口地址在一个操作系统内(计算机)使用。

PS:

B是Byte的缩写,B就是Byte,也就是字节(Byte);b是bit的缩写,b就是bit,也就是比特位(bit)。B与b不同,注意区分,KB是千字节,Kb是千比特位。

1MB(兆字节)=1024KB(千字节)=1024*1024B(字节)=1048576B(字节);

8bit(比特位)=1Byte(字节);

1024Byte(字节)=1KB(千字节);

1024KB(千字节)=1MB(兆字节);

1024MB=1GB;

1024GB=1TB;

TCP/IP模型与三大地址的对应关系:


可以看到除了端口地址,其它两种地址是对应。而端口地址因为TCP要用端口地址来区分不同的进程,所以作用在TCP层。而应用层不需要端口地址来作用,因为它们本来就是一一对应。

根据通信中的目的地址分类:

主要在物理地址,IP地址的角度分类的。

多播是针对一组有相同特征的接受者。接受者指的是一些应用或者协议。地址特征:物理地址为例,前面24比特固定为0X0100.5E   ip地址的前缀固定为224。

广播则针对所有网络系统。地址特征:全是1。

不满足多播和广播,就是单播

TCP/IP核心是IP协议。

程序:计算机之间的通信实体。

会话:实体通信的一个过程

协议:规定通信的一组规则。

上下层之间首部只有加上或者抽走两种动作。

传输介质不属于7层模型。

IP层以下不属于TCP/IP协议族的内容,是物理网的范畴,是一种底层的网络,不是由ISO组织制定的标准。但是因特网要靠这些底层网路来实现网络互联。像LANS WANS等这些有专属的协议。不过无论如何,这些底层网络都是通过IP层汇聚进而实现终端之间的通信。所以网络连接设备会在两种寻址之间工作:IP地址,物理地址。如果当前的连接设备比如路由器还需要查找下一个网络节点的地址,那么这种寻址就是IP地址,而如果查找的是当前网络范围内的设备,就属于查找物理地址。反正最终也是通过汇聚IP层形成了通信。(当然IP层再继续往上传)

不同的介质对物理层的要求是不一样的。解调调制技术 也应用到物理层。

局域网:

针对OSI的物理层和数据链路层,属于物理网络。

局域网的物理地址称为MAC地址,因为局域网将数据链路层又划分了两层。广域网没有MAC地址。

大部分网络现在采用以太网络,速度高。

如果没有特别提醒,下面谈到物理网络,指的就是以太网。

以太网的封装:

使用 Ethernet(Ethernet帧格式)(LANS的一种技术)封装的数据的地址也称为MAC地址,它封装的上层数据可以来自网络层也就是IP层:

使用IEEE 802.2/802.3技术来封装:

以上两种方法除了一个是type字段一个是Len字段以及它们封装的数据内容不太一样,其余基本相同。但是现在网络大多采用Ethernet封装技术。

以太网的数据帧头尾加起来一个18个字节:2X6个MAC地址 ,Len,FCS尾部。数据字段部分的范围46-1500字节。所以以太网传输的数据帧长大小不能超过或者低于46+18~~1500+18这个范围。

以太网规定数据字段必须最小值是46字节。

为什么以太网要规定最小传输:

在数据链路层(物理网络----以太网)下,很多台主机可能会使用同一条传输介质(即共享介质),如上图,主机A发送的数据是以一种广播的形式发送的,也就是说所有的主机都可以侦听到,如果发送的数据帧中的目的帧(MAC地址)符合自己的MAC地址,那么才会接受。当站点上多个主机要发送数据时,这时候在介质上就有可能冲突:

这时候传输的比特流可能会发生碰撞,结果可能会导致信息的缺失或者错误。所以以太网会有许多机制(比如载波监听,冲突检测)来保障。这是以太网的冲突特性。冲突域:站点使用的共享介质(这条电线)越长,冲突率就越高。

PS:

帧经过交换机时,其源、目标MAC是不会变的,一句话:二层转发不改变帧的MAC地址IP地址
帧经过路由器时,进行路由转发,IP地址是不会变的,但MAC地址必定会变
举个例子:
A----B----C-----D 四个路由器
比如A发送报文给D,
1)A发出的是:源、目标IP是AD,源目标MAC是AB相对接口的MAC
2)B转发给C的是:源目标IP是AD,原目标MAC是BC相对接口的MAC
3)C转发给D的是:源目标IP是AD,原目标MAC是CD相对接口的MAC
D收到的帧是:源目标IP是AD,源目标MAC是CD相对接口的MAC

对帧当中的IP地址的理解:发货人、收货人
对帧当中的MAC地址的理解:
源MAC:货物中途所经过的上一个驿站
目标MAC:货物中途所要到达的下一个驿站

以太网双绞线:

交换机制通常用在网络层或者广域网:

而对于局域网,因为其使用的是广播的方式而不存在交换的概念。在局域网将数据输入某个特定的集线器端口时,除了当前端口不会发送,其它端口都会发送该数据出去,使得其它共享介质上的主机都能进行对数据帧的侦听(这就是广播)。而交换式的发送是彼此之间的数据交换,在路由器的角度,当前特定端口输入与通往目的主机的端口输出;如果是集线器的发送方式,那么就是广播式发送,目的主机侦听目的MAC地址来接受。所以广域网采用的是交换系统,用的是交换机。

交换系统之电路交换:

在局域网中,一个介质上只能有一个主机在发送数据,多个主机不可能同时发送,这个主机发送完其它主机才发送。

而在广域网的电路交换中,每个主机都有自己独立的信道或者介质,所以即便多个主机同时发送数据,相互之间也是不会有影响的。所以电路交换的特性,由于每个主机都有自己的信道,所以在通信的时候两台通信的主机是不占其它主机通信介质的,也就是只独占当前的连接介质。当然,正在通信的两台主机,别的主机也就无法与这两台主机取得联系。

局域网是所有主机共享所有通信信道或者介质。所以就不存在什么交换。

分组交换:

1.数据报:

两台主机之间不通过介质或者信道建立连接,而是通过发送数据报文,这些数据报文将会分割成一段一段的,称为分组,然后这些分组将会通过不同的路径运输直到到达目的主机。这些分组由于会经过不同的路径导致到达目的时间不一样,所以它们被接收的先后顺序就有可能会和发送时的顺序不一致。所以数据报方式的分组交换可能会造成数据丢失也就是丢包。

2.虚电路:

两台主机之间会建立一条逻辑上的连接,然后数据被分成了一块块的,也是一种分组的形式,由于建立连接,到达目的主机的分组和发送时候的分组先后顺序是一致的。

PS:电路交换和虚电路交换区别在于,数据发送一个是整个数据流,一个是数据块也就是分组;建立的连接一个是真正的物理连接,一个是逻辑连接。

广域网:

局域网使用共享介质,使用广播地址,所以没办法远距离传输。

广域网使用独享介质因此才能长距离传输,是点到点式的。

广域网的交换方式有三种:电路交换,分组交换 ,报文交换。

交换报文交换和分组很类似:唯一区别就是以完整报文的方式发送和以分组方式发送。分组发送就相当把报文分割成数据块发送。

现在很少使用报文交换,因为限制于物理网的上限1518字节。

广域网的技术非常多,彼此间的共性少,不像局域网,所以不同的广域网技术差异很大。

广域网VS局域网:

地理范围:现在无法单凭地理范围来辨别LANS和WANS,因为光纤的使用可以使得局域网也能进行长距离传输。

延迟,速率:同样由于使用光纤以及新兴技术,两者速度,延迟上都有很大的进步。现在也无法凭这个比较(速率高延迟低,速率低延迟高)

信道:无论如何变化,广域网是点到点的,而局域网还是广播。

协议:广域网是帧中继协议,局域网是以太网。

两者特征比较:

校园网就是典型的局域网。

上图中网桥设备的功能和交换机相似,转发器功能和集线器功能相似(基本功能一样,差别也就在于端口的多少而已),所以图中用了“/”。

局域网使用集线器,广域网使用交换机。

站在OSI的角度看待这些连接设备:

上图中,上层的域覆盖下层,意思就是,比如转发器只覆盖物理层,网桥则覆盖了数据链路层和物理层,也就是网桥作用于这两层(网桥能和转发器连接并和转发器起作用,又因为它是属于数据链路层的设备所以说它覆盖了这两个层)而转发器只存在于物理层,依次类推。

对于转发器或者集线器:

仅仅作用于物理层,不会修改数据内容,没有其它特别功能,只完成数据比特流的传输。转发器或者集线器的作用相当于信号放大器,转发器可以连接到下一个转发器或者集线器,信号在传输过程中是会衰减的,所以集线器或者转发器具有增强信号的作用,信号增强,可传输的距离会增加。但是由于转发器或者集线器处于的是局域网,是广播式的,那么会影响多台主机的数据发送,所以转发器或者集线器不能连接太多,会造成网络性能的下降(有效带宽被平摊,导致网络带宽下降),因为冲突率会大大提高。

对于网桥或者交换机:

1.网桥和交换机的区别和集线器与转发器一样,都是端口数量的区别,基本功能相似。网桥之间连接方式和集线器之间连接方式差不多。而且网桥和集线器也可以级联。如图:

当两台主机位于网桥的同一个接口时,网桥设备会侦听(进行杂收模式,所有的数据先接收到网桥,根据地址判定是丢弃数据还是转发,一旦网桥选择丢弃,那么物理层的转发器直接工作,也就是进行广播)但不会转发。所以只在物理层输出。

网桥的作用等于在分割整个网络的冲突域,使得每个域之间不会互相干扰。如果改成集线器,那么整个网络的冲突率将大大提升,网络性能也会下降。上图中有8台主机和两条10M的介质,如果中间是集线器,那么相当于8台机器(广播)共享10M,如果使用了网桥,相当于4台机器共享一个10M,并且不会影响另外4台主机的运作。因此使用网桥对网络性能的提升是很大的。

网桥中有MAC地址表,当源地址和目的地址(MAC)在它不同的接口处时,它会执行转发功能。这个转发是这样的:

可以看到比特流跑到数据链路层变为数据帧进行的转发,也就是转发发生在数据链路层。

路由器的功能主要是连接不同的物理网络:

路由器可以连接不同的物理网络,而交换机不行(换句话说数据链路层不行),交换机通常只用在局域网中,因为在局域网中,数据链路层是有共性的地方(LLC子层相同,MAC可以不同),如果没有共性的地方,交换机没办法转发。比如以太网寻址用的是MAC地址,拨号网是用电话号码,在数据链路层上数据帧的结构不一致,自然连接不了。

同样路由器也可以进行级联。路由器与路由器,路由器与交换机/网桥,路由器与集线器。路由器很少直接连接一台主机,因为端口数比集线器或者交换机都要少很多,原因是要减少路由器开销。

网桥和集线器可以扩展局域网(单个物理网),这两种作用于OSI模型第一和第二层的设备都是作用于单个网络。

路由器则互联这些单个网络,形成互联网。

网关:作用覆盖形式:

网关的作用:如果说路由器是连接不同的物理网,那么网关则是连接使用不同协议栈的网络。

PS:属于哪一层的设备意思是指设备执行转发发生在哪一层。比如网桥/交换机转发发生在链路层,所以属于第二层设备。但不代表网桥只存在于第二层。

HUB Switch  Router   Gateway   集线器  交换器  路由器    网关

IP层:

集线器和交换机不需要IP来标识(它们不对网络层作用),而网络层以上需要IP地址来标识。也照应了路由器是IP层设备,IP地址实际上是标记了路由器的接口(标记了不同的网络连接,而不是标记路由器本身),一台路由器上不同的接口有不同的IP地址标记,用来连接不同的网路,也相当标记了不同的网络连接,因为不同的物理网络有不同的接口,通过这些接口才能连接。IP地址也可以标记主机的通信接口也就是网卡。

IP地址结构:

network id:区分不同网络,标记互联网中的网络信息,也就是定位互联网中的哪一个网络块。

host id:标记这个网络块中的特定的设备或者节点,主机。

而在以太网中的物理地址也就是硬件网卡的地址,无论移动到哪个网络,它的物理地址不会改变,这与以太网物理网络的特性相关。

IP地址二进制:

点分十进制方便人为观看。运算方式:

二进制就以2为底数指数为权值,进行次方运算以后相加。

十进制转二进制:

IP地址分类:将32比特空间的地址进行分5类:

A类:

32比特中,有一个比特是用来进行分类,剩余31比特是进行IP层标记。

最左边,也就是最高位,就是用作分类的比特。那么范围就是剩余的31位都是0-1,即0.0.0.0---127.255.255.255

然后如上图,2的7次方意思是最多可以标记的网络块的数量,同理2的24次方是最多可以标记的主机或者设备数量。

B类:用了两个比特位来标记分类,其余同上。

C类:

D类E类地址和以上三类不一样:

以上三类都是标记网络连接的地址,而D,E类是标记多播应用:

E类的地址做保留和实验用:

 

所以ABC类才是标记网络连接。

可以直接看第一段的十进制就能区分类型:

提取netid hostid:

二进制判断:

十进制直接判断:

多接口计算机:

这台计算机虽然能连接多个网络,但不会像路由器的功能为其它终端提供通信功能。

路由器和多接口计算机分配的IP地址只能是A-C类地址。

路由器作为中继节点,它的每一个接口必须接入不同的网络,如果都接入同一个网络会出现错误。

如上图:把分类部分作为一个前缀,同一个前缀的网络可以互相连接(也就是同一类地址的网络的两个设备如主机和路由器,能互相连接),然后地址中携带hostid来标记设备信息,路由器上与该设备的网络前缀相同的接口与之相连。

同样,ABC类地址的网络中也有特殊地址不是用来标记网络连接的:

这些特殊地址中的netid都是包含分类标识的。

最后一栏是指这些特殊的地址是否能标识通信对象(源/目的地址)。

IP地址中netid是标记网络,也就是设备或者终端是处于哪一块网络中,然后的hostid标记当前网络中的设备。

所以如果当hostid全为0,netid不全为0,则表明该地址是一个网络地址。

  

表明这三台主机都在123.0.0.0的网络内,只是hostid的不同来区分当前网络内的不同的连接。

同理:

 

因此网络地址不能作为源,也不能作为目的地址。因为它不能标记任何一个节点设备,但可以用来区分网络,标识不同网络。

直接广播地址:

它的IP组成:

所以直接广播地址只能标记目的地址,因为源的话不可能所有主机都是源(所有主机都是源都发送同一数据乱套了)。源只能是单一的发送方。

直接广播地址的工作模式:

路由器检查netid部分(路由器功能是连接网络的),拿216.45.7.0这个网络地址来说,路由器将数据发送进入这个网络,然后物理网的设备检查hostid部分,发现是255,那么采取广播形式发送,所有主机都会收到数据。所以直接广播地址只在特定的网络中广播(在指定的netid的网络内),不会在其它的网络内广播。

通过上述例子发现,netid和hostid的作用地不同。路由器只检查netid部分,而在该网络中的物理网层技术会检查IP中hostid,从而将数据发送给目的终端。 

受限广播地址(本地广播地址)netid全1(不需要特定就是说不需要网络地址,因此也叫本地广播),hostid全1(广播):

路由器是绝对不会转发受限广播地址的。当一台主机向255.255.255.255发送分组的时候,在该主机所处的网络里面,除了该主机,其它主机以及和该网络直接相连的路由器都会收到分组(路由器有一个接口也接在该网络上)。但是路由器识别到是255.255.255.255时候是绝对不会继续转发。

如果说当前受限地址改为直接广播,并且发送一个netid为当前网络的分组。那么路由器收到后既不会原路返回分组,也不会转发。那么也相当于一种本地的情况。

本网络上的本主机:0.0.0.0(临时使用)

这个特殊的A类地址(第一个IP地址),只会出现在一种场景中。一台主机要获得IP地址可以手动设置,也可以让主机在网络上获取。这个时候由于自身是还未有ip的,所以会临时使用这个0.0.0.0,并且可能会以广播的形式255.255.255.255发送,请求到DCHP(动态主机设置协议(英语:Dynamic Host Configuration Protocol,DHCP)是一个局域网网络协议,使用UDP协议工作,主要有两个用途:用于内部网或网络服务供应商自动分配IP地址;给用户用于内部网管理员作为对所有计算机作中央管理的手段。)服务器后,返回一个IP地址,接着这台主机就会使用这个分配下来的地址。

本网络的特定主机:

netid全为0,hostid特定

如上图:netid是全0,hostid不为0,那么该台主机连接到了当前网络中,就可以通过hostid找到目的主机进行通信。但是实际上基本不使用这样的通信方式。

环回地址:

环回地址很特殊:正常的OSI模型中,数据从上向下传输,连接到物理网,经过路由器,到达目的网络。而环回则不是,当进程1产生的一个分组向下传送到IP层时候,IP检测到这是个127.x.x.x,这是个环回地址。那么不会再向下传输(在IP层就返回,往上层走了),直接将分组传到本主机的进程2,也就是说环回地址让分组只在本台主机内部活动,不会向下传输到物理网,更不可能传输到互联网。是的,最常见的就是127.0.0.1本地IP地址,这也是为什么这个IP地址不需要经过网络的原因,它是个环回地址。

一个IP网络中可以有主机也可以没有,但一定有路由器,因为路由器负责通信。一个网络内的hostid不能全是1或者0 。因为全1或者0的地址不是用来标识网络连接的。路由器和主机连接网络的接口功能是一样的。路由器必须连接不同的网络,所以接口上netid也是不一样的,而hostid可以在不同的网络中不唯一,但在同一网络中也要唯一。netid的唯一就可以决定了IP地址的唯一。

上图讲述的是即使5台主机都在一个以太网内,也有可能相互间不能通信。(即使数据链路上是连通的,后续讲明原因)。这时候路由器的接口同时I/O比特流。

所以1个接口能够连接2个网络连接是逻辑上的,一个物理接口可以有多个逻辑连接,但是多个物理接口不能都连接一个逻辑连接

再次谈及广播,多播,单播:

本地级:本网络内  全局级:互联网内

申请IP地址:

A类要去掉netid全0和全1的地址,所以网络数目是126个, hostid也是要去掉全0和全1,所以是2的24次方减去2。所以总体上,当前网络内,可以分配给设备和主机的IP数就是2的24次方减去2。

B类,C类的主机IP数也要减去全1和全0。(B,C类网络的全1或者全0不影响,但A类就不能)。

每个网络内部自行决定hostid,只要网络内保证唯一即可。

综上,专用网只要求网络内部的地址唯一即可,也就是保证hostID是网络内唯一,在因特网内netid可以不唯一。因为专用网不需要接入互联网。

根据netid划分出公用网和专用网,专用网中,A类有1个,B类16个,C类256个。使用私有地址的网络不能接入因特网,因为它们不能确保唯一。专用地址加上NAT技术可以转换为公网IP,适用于多台主机中只有小部分需要对外通信的情况。

A,B类浪费严重,因为当netid一旦分配,那么就只有这个网络是这个netid,当这个网络只有很少主机的时候,浪费相当多的地址。

解决办法:无类IP编址

子网划分:

将一个IP类(A B   C)网划分成几个较小的子网。

子网划分后,可能多个物理网的netid是相同的,这时候无法根据netid来区分网络。解决办法:

子网划分后,IP地址中原来的两段分成三段,多出来的Subnetid和netid一起来标识物理网络,Subnetid标识子网,netid标识父类网络,hostid标识不同的设备。

原来的IP地址结构:

所谓的划分子网技术其实是把hostid中的几个比特位分出来变成Subnetid:

而且Subnetid的长度是不固定,是变长,所以规模是可变的,不像netid和hostid是固定的,对应的网络规模也是固定的。

子网中,hostid全0,也能标识一个子网络地址。因为Subnetid是变长的,所以hostid也是变长的,所以原来分类网的首字节判定地址的方法失效了:

要采用掩码运算:

它的值是用来表示当前比特值是在IP地址中的哪个部分。它也采用点分十进制表示法。

例子:

首先这个C类网前三段是网络地址部分,所以掩码中1表示网络地址,0表示hostid地址。那么掩码的前三段自然是全为1,后面的hostid部分全为0,前面知道subnetid是变长的,所以后面8个hostid比特中假设最高位的两个比特变成1,那么hostid只有后面6个比特位,这时候标识的主机数量就只有64-2=62台。

掩码指的是某个特定IP网络的大小,如果指定的是子网的大小,会特定指定子网掩码,如果是分类网大小,就会指定的是默认掩码。

衍生下来子网:

如果subnetid全0或者全1,那么这也是理论上的特殊地址。但,实际上subnetid有可能是这些特殊地址。

如果子网下,hostid全0表示子网地址,全1表示子网广播地址。

术语:

  

平常都用连续掩码。

同样可以用点分十进制表示掩码(和IP一样也是32位):

掩码仅仅表示网络大小,这个网络的netid等部分是看不出来的。

掩码的位数表示法:

/  加上netid和subnetid部分的位数,比如说netid和subnetid部分的位数有26个(从左到右),那么表示为:/26      (26个1比特)

特殊值:

地址范围:{算出来的网络地址~~~算出来的网络地址+mask的取反(各段十进制上直接相加即可)}

下面的网络都是网络地址加上子网掩码来表示:

网络地址+子网可以用来区分是分类网还是子网。但只有掩码或者只有网络地址是无法判定分类网还是子网的。还有一种情况,A类子网的掩码和B类网掩码是一样的,所以单纯从掩码上看,也不能区分出是默认掩码还是子网掩码,因此也要结合网络地址。不过掩码如果一样,证明网络大小一样(主机部分的比特位一样)。

要使得IP子网最小,意思就是可标记的主机地址数目最少。如果hostid只有一个比特位,减去全0全1这种特殊情况就等于0.所以hostid为两个比特位是最小的。因此30个1和2个0转换为点分十进制,掩码为255.255.255.252。

上图的意思是,以8个字节为单位的比特位中,从左到右起,当netid和subnetid为/1时,最高位只有一个1,hostid部分就有7个位,就是2的7次方;当netid和subnetid为/2时,最高位只有两个1,hostid部分就有6个位,就是2的6次方。依次类推。

这个规律是,计算hostid部分的位数,即2的X次方,然后IP地址最后8位的十进制值是该2的X次方倍数的话,那么该IP地址是子网地址,如果是该2的X次方倍数-1的话,是子网广播地址;这两种情况都不符合的就是主机地址。

网关是标识路径信息。地址,路径,名字可以标识主机。路径指明数据如何送交到主机。

和一台主机(的物理网络)相连的路由器的接口IP地址就是该主机的默认网关。

子网配置中:2的14次方的主机公约数是64,128.所以如上图。

定长和变长的子网划分的前提是:同一个netid网络下。

使用变长网络划分如图:

通过上图观察可知:网络1连接25台主机和3个路由,所以这三个路由设备也要分配IP地址,然后加上2个特殊地址(全0全1),为     25+3+2,下面的网络2,3同理

使用定长的方式划分:

定长划分的方式是由连接了最大主机数的子网决定的。如图net5连接的主机数最多,在2的6次方内,所以mask=255.255.255.192,所以可以看到net2浪费地址的情况最严重。

上面这种定长划分如果改成了变长划分,所有网络需要的空间只有232,一个C类网就可以满足,而上面的要320个,两个C类网或者一个B类才能满足:

如图,虽然大家的分类网前缀是一样的,但是掩码不同意味着,所在子网网段不一样(虽然大家同处A类网)。如:

上图中net1,32-27=5,2的5次方是32。0是32倍数,所以这是一个子网地址。可以看到5个子网地址都不一样。

这就是变长子网掩码。

观察上图,使用变长掩码划分出来的网路中,net3到net4的地址不是连续。这是因为子网地址的特征造成的,根据net3的特征,hostid是只有6位,然而40和103中,前面两位首先就不符合了。然后一个子网IP地址的范围是全0到全1。而40作为开始处不是全0,103作为结束不是全1.

所以今后子网划分一定要注意子网地址的特征。

如图,全0全1(子网地址和子网广播地址去掉)的情况去除后,剩下的就是可分配的地址。

路由器可能通常会被分配第一个或者最后一个有效主机地址,便于记忆。

路由器不需要默认网关。

请注意:这里将netid的比特位改为1的意思是指,比如要聚合8个C类网,那么必须要向网络号借3个比特位,那么这三个比特位的范围自然是从000~~111,也就是0~~7的数值。所以如果所借比特位刚好为1就要置0.

超网的对象:只针对C类网络。而子网划分没有限制,ABC都可以。

子网的具体应用:地址分配给一个物理网络。超网的具体应用:地址申请,将多个物理网络合并。

路由聚合CIDR,实现超网。

首先要明确,需要的IP地址数量是多少,然后一个C类的地址上限是256,看需要IP地址数量是C类上限的多少倍(超过就算一个倍数),倍数以2的指数n呈现,然后就向netid借n位比特,最终得到的超网地址的第三个点分十进制数值必须是合并的C类网的倍数。

无类别域间路由(CIDR)

是一种路由技术,不是路由协议。它可以针对所有网络使用路由聚合技术。只要聚合好的网络满足超网规则。所以说是无类别。

小结:

对于互联网中的所有节点无论是主机(要选择转发的路由器)还是路由器,都要完成选择路径和转发分组。

物理网络只是传送IP分组,不关心源和目的。路由器和主机网络层实体才考虑。

下图有两种协议完成两个功能:

所以,如上图在这个小节中所说的服务是通信协议。

因此如上图:IP是无连接的。

面向连接的交换方式是虚电路交换,无连接是数据报交换。

OSI每一层都有可能有虚电路和数据报这两种传输方式。

面现象链接特性:从源到目的会建立通道,所有数据严格沿着通道进行传输,如果出错可能会发生重新建立通道。

路由器可以屏蔽物理网络之间的差异。

因为面向连接的特征是要满足各个节点的特性,并且局域网一般都是广播式的传输,明显不符合网络层的情况。并且无连接的特性更加灵活,更适合网络层。

间接交付是在不同IP网络中,上图漏了一个不字。如图:

源IP和目的IP是不会改变,因为这两者一旦改变就会导致信息收发的不正确,所以在直接交付,间接交付不能用源和目的IP作参考,所以用分组的目的和分组的发送点来标记,这里的分组目的指最终目的,发送点指发送接口或者发送节点。

所以,掩码的作用也非常明显,它还可以判定分组的交付方式。

在交付过程中也是经过物理链路的,所以需要解决交付操作----地址映射。因为在IP层来看目的IP永远不变,但是在链路层的传输中,MAC地址是改变的,因为每个节点都有对应的MAC地址,数据经过很多节点才会到目的。所以如上图交付操作。

下一跳指的就是路由器另一个转发接口的IP地址。

上图中:第一次交付的IP地址接口就是默认网关。所以可见,主机一开始要向谁发送数据,关键就在填的默认网关,默认网关在分组传输的路径起着重要作用。

IP地址配置重要的三部件:

IP地址,这个不多说。子网掩码,判定分组的交付方式,如果是间接交付那么,就要用到路由器,进而需要配置默认网关。

默认网关,让主机知道向哪一个(边缘)路由器发送分组,完成间接交付。

所以可以看出,由于数据帧是逐跳改变,作用在物理网,对于物理地址只要在局域网唯一就可以了。而IP是整个互联网唯一。

路由表实现的思想是:使用尽可能少的信息实现选路。路由表上的目的指的是目的网络,因为路由器只关心IP地址中网络地址的部分,具体的目的主机由下面的物理网就可以实现分组传送到位。

使用目的网络特点:1.可以选路    2.节约路由表存储空间,提高查表效率

路由表中为了节约空间和提高效率,只用尽可能少的信息选路,所以表中只会存放下一跳的路由,而不是全部的路由节点信息,这样的每个路由器就有了独立选路的功能。

                                                                                  

主机路由:

全1掩码和路由器相与运算的时候,结果还是等于目的IP,这并不是多余的,实际上路由器只会关注网络号部分,而结果直接等于IP的话,相当于路由器直接将整个IP地址当成网络号取出来,所以全1 掩码可以用来控制特定的主机

 注意:这里全0不是前面的特殊地址,特殊地址是本主机(源主机)上全为0的特殊地址。是默认路由

默认路由设置要谨慎,因为两台直连的路由器一旦设置为默认,很可能会出现默认路由环路。

PS:推导初始路由不是静态也不是动态路由负责,而是配置主机的时候,由主机的直连网关和掩码,IP地址一起推导的。

非直连路由是建立在直连路由的基础上。

路由选择算法:

直连和非直连路由:

直连就是主机和第一台路由进行分组交换,非直连就是有间接交付的过程。

主机路由:

掩码全1,用来特别网络中控制某台主机的路由。

网络路由:

正常选路的网络路由。

因为与运算的结果会有多条,所以找到第一匹配项就停止。

如果发送分组是要发送到的是当前网络之外的主机,那么就会去找默认路由(这就是默认路由存在的意义,不让分组直接被丢弃)

所以得出一条规律,优先查找掩码较长的(最长匹配查找),也就是网络规模较小的路由。

目的地址和目的掩码相与,看看能不能得出和直连路由接口相同的网络号。得不到直连路由,那就是转发路由。在直连路由下,可以不按最长匹配,但是非直连网络就要按照最长匹配查找。

当然还可以通过添加默认路由解决,或者添加特定网络路由帮助它找到转发的路由器。

小结:

IP协议详解:

连接和可靠没有必然联系,但是连接比较容易实现可靠机制,无连接就不容易。

IP数据报结构:

上图可知:从上到下,前5行,也就是一直到目的IP这,一共是固定不变的20字节(160bits/8)。也就是option选项字段是0~~40个字节。

VER IP版本号(IP4,IP6)

PS:头部长度字段是用来说明整个IP数据报的,所以取值范围是20~60,单位是4个字节。

IP分组总长度MAX值:65535字节。

说明:首部长度最少是20个字节所以是以4个字节为一个单位,那么如果头部只有20个字节,那么长度值为5,如果达到最长为60 ,那么长度值为15(理论上是0~15,但是头部最少有20个字节),4个比特中全1的情况是2的4次方是16,所以首部长度是4个bit 。也就是说4个比特是记录长度的值。同理总长度字段,因为总长度是以字节为单位,所以最大的总长度值就是65535,是2的16次方,所以总长度是16个比特位。

前三个比特是优先级:排队处理,丢弃处理。后三个比特如上图,这三个比特不能同时设置,其中一位设置1,其它位必须是0

后面是保留比特,但后来加上了一个标记比特,标记开销。

由于分组选择路径不同,而且IP也不是面向连接,所以要想提高服务质量(指定高质量服务)比较困难。所以服务类型字段很充分利用。所以提供服务质量一般都用一些额外协议来负责。所以IP协议很少会按这个字段来处理分组。

D比特位表示这个分组不能以分片的形式传输必须以完整分组来传输,如果这个分组没办法发送了,就只能丢弃。M比特位表示当前这个分组到底是一个分片还是分组,如果值是1,表示是当前分组还没有完后面还有数据传输,如果值是0,表示是分组最后一个分片,传输即将完成

因为IP数据报通常有可能大于物理网的最大传输单元(1500byte),由于物理网的限制,所以只能进行分片

上图第一个情况是防止默认路由成死循环。生存时间的TTL值实际上是源和目的之间的路由器个数,当被转发一次后TTL会减1,并同时会判断等不等于0。如果等于0这个分组会被丢弃不能转发,如果不等于0,就会沿着路由表继续转发。 目的主机不需要检查TTL值是否为0,因为没有这个必要,所以TTL值只是路由器需要检查。TTL最大值是2的8次方就是255.。

IP数据报中的协议字段:

不光是上层协议会封装在IP分组中,同层的协议也会使用IP数据报来发送。因此IP数据报中的协议字段有8个比特来标记这些协议,比如值为4表示IPv4,41表示IPv6

ip数据报中也提供了微弱的检错机制:校验和字段,封装在IP中的高层协议会校验数据部分。

PS:FCS是冗余循环校验尾部,0x0800是数据帧中类型字段的值,表示封装的分组是IP分组。

分片:

注意上图的MTU不包括帧头部和尾部,仅仅是数据部分。

需要分片的时候:当接收,发送的物理网的MTU不同时就有可能要进行分片,因为长度的限制问题,不同MTU的长度不同。如果当前的MTU不能将这个分组发送就要进行分片。

每个分片都要有IP头,因为无连接,所以IP头的指引非常重要。

分片如图:

上图中IP头占有20个字节,然后数据部分是600,那么像图中这种数据只能分片进行传输。那么,每个分组都会加上IP头,IP头几乎相同,不同的地方是头部中的标志字段和片偏移量要改变。

注意:片偏移和标识字段的区别,标识字段是表明这个分组的唯一序号,即使被分片,那么也会知道这个分片是哪个分组的。而片偏移量意思是分组中的哪一段(第几个字节),然后从这一段序号(第几个字节/8字节)开始截取,表明的是分片是分组的哪一个部分。

注意上图中第二次分片的时候,即使是最后一个分片,标志字段还是1,因为相对整个分组来说不是最后一个分片。

分片操作的缘由是因为不同的物理网络的MTU值(最大传输单元)限制。当MTU不够传输分组,就要分片传输。如果连分片都不允许,那么只能丢弃该分组。

PS:片偏移量,标志字段都是相对原始分组的。例如上图中的数据块二继续分成了两个分片,偏移量从175开始,被分成了175和275,这些都是原始分组上的位置。 

标识字段和源IP的作用,源IP确定是哪一台主机发送的分组,确认发送方,而标识字段是目的主机用来确定分组先后顺序。当分片到达目的主机后,根据标识字段确定分片是属于哪一个分组,根据偏移量(其实偏移字段和标识字段是相似的)确定分片先后顺序,去除头部后接受数据。

实际上重组操作是通过重组表进行的:

IP分组一般不使用选项字段,选项字段一般是给网络管理员测试用的。

第一部分code字段是用来标识选项的类型,length字段是用来标识整个选项的总长度,data就是选项的数据部分。每个分组头里面的选项可以有多个,并且也可以是不同类型的选项。

copy字段为0的时候,表示选项只在片偏移量值为0(也就是第一个分片)中出现,其它分片不会出现copy为0的选项。但如果copy值为1,那么所有分片都要出现这个选项。

class字段有4个值,除了上图中的两个值,剩下的两个值为保留。class字段表示选项的作用,这个选项是用于标识数据报控制还是调试管理。

number真正用来标识选项类型。

单字节选项只有code字段,多字节全都有。

选项是IP协议必须要实现的,但IP头可以不携带。

IP校验和(仅仅校验IP头,数据部分是让上一层协议来校验):

校验和计算方法:

第一步:

校验和是将以上所有字段的值(检验字段独占一行,如图中蓝色部分)相加,结果是肯定多出一位的,将进位的那一位赋给最右边的比特位(也就是最低位被进位的比特位覆盖掉)

取反后的值放入校验字段伴随分组发送给目的主机,然后接收方收到分组后,也会将校验和的字段取出,然后按照上上图进行相加,得到结果取反后如果是原来一开始的全 0就是正确的。

上图有个首部添加模块,上面向下送的数据需要加上头部变成IP分组。process模块负责检查模块到底是向上送还是转发。

一个IP分组到达该路由器后,执行路由模块(查路由表),然后向下传到分片模块,根据所记录的底层物理网的MTU实行分片操作,如果向上送的话就会传到重组模块(把分片内容重组)。如果目的地址是自己则进入重组模式,如果不是则进入路由转发模式。路由模块会把查表的结果下传给分片模块,好让分片模块能找到相应的物理网络特征(MTU值大小),进行分片操作。

IP软件的特点简述:当软件收到一个分组的时候,它会检查目的IP地址,如果发现这个目的IP地址不是自己的,那么进行转发,是自己的,那么进入重组模块,重组完成后进一步往上送。当要发送或者进行转发一个分组的时候,则经过头部添加模块添加好IP头,然后查路由表,然后分片操作,最终转发或者发送。

主机匹配到不属于自己的报文会丢弃,但是路由器则会继续转发,这是不同的地方。

为什么IP要采用面向无连接的呢?

主要有两点原因:(1)为了简化;(2)为了提速。

面向连接比面向无连接处理相对复杂。甚至管理每个连接本身就是一个相当繁琐的事情。此外,每次通信之前都要事先建立连接,又会降低处理速度。需要有连接的时候,可以委托上一层的协议提供此项服务。因此,IP为了实现简单化与高速化采用了面向无连接的方式。

并且,网络通信中如果能够进行有效的分层,就可以明确TCP与IP各自协议的最终目的,也有利于后续对这些协议进行扩展和性能上的优化。

客户和服务器模型:

客户主机主动请求并不一定依赖于TCP,很可能使用其它协议,这里只是说明客户机会发送请求报文给服务器,毕竟只是模型。

服务器资源:服务器的硬件资源比如:硬盘,内存,CPU等,其实服务器能提供给客户机的文件数据等都算是资源。

但一个客户程序不能同时访问多个服务器程序。

UDP服务器是典型的循环,而TCP典型的并发类型服务器。

因为UDP是无连接的,只能采用循环,一个响应完毕后才接着下一个。

 

上图中可以看到,UDP由于实际上只有一个进程在工作,所以只能采取这种循环的处理方式。如果是TCP的进程:

这样的话,服务器主机中启动了一个父进程和多个子进程,在建立多条TCP连接的时候当然也是一条一条的建立,连接建立后就会产生很多子进程,但建立完毕以后,多个TCP是同时的和服务器主机的子进程进行通信的,这就是并发通信(多个程序并行通信)。

基于客户/服务模型的应用层协议:

如果要使用域名,则还要配置域名服务器的IP地址。

通过协议交互获取的信息(主机程序间通信获取的信息)都叫做动态获取/配置,而上图中却是叫做静态配置。因为这里获得的内容是预先配置好的,也就是说管理员预先在服务器上已经设置好了,然后才通过协议进行交互。所以这里的静态配置的对象是获取的内容,而不是指协议交互。 所以bootp比较麻烦,需要人工手动配置绑定MAC地址和IP地址。

BOOTP使用UDP报文传输,并使用保留端口号67(BOOTP服务器)和68(BOOTP客户端)工作。使用BOOTP协议的时候,一般包括Bootstrap Protocol Server(自举协议服务端)和Bootstrap Protocol Client(自举协议客户端)两部分。

BOOTP的一般工作流程就是BOOTP客户端和BOOTP服务器之间的交互,其流程如下:

  1. 由BOOTP启动代码来启动BOOTP客户端,这个时候BOOTP客户端还没有IP地址。

  2. BOOTP客户端使用广播形式的IP地址255.255.255.255向网络中发出IP地址查询要求。

  3. 运行BOOTP协议的服务器接收到这个请求,会根据请求中提供的MAC地址找到BOOTP客户端,并发送一个含有IP地址、服务器IP地址、网关等信息的回应帧。

  4. BOOTP客户端会根据该回应帧来获得自己的IP地址并通过专用文件服务器(如TFTP服务器)下载启动镜像文件,模拟成磁盘来完成启动。

PS:无盘工作站的意思是指除了没有硬盘,其他该有的都有的主机。因为当机器数量非常多的时候,如果说某款软件需要更新,那么所有的主机集群都要更新,这样是非常麻烦的,所有bootp协议是为了解决这种问题而诞生。首先管理员需要在bootp服务器上设置好IP地址和物理地址的绑定(这样当bootp客户机请求的时候才可以申请到地址),然后通过这种方式请求到服务器获取操作系统和应用软件。这样来,只要管理员的机器更新,所有的主机集群就会跟随更新。

我们熟知的DHCP协议是从BOOTP的基础上发展而来的,它们都是主机配置协议,都可以大大减少管理员的工作量。BOOTP可以看成是简单版的DHCP,是对主机的静态配置,而DHCP可以依据一些策略对主机进行动态配置。BOOTP用于无盘工作站的启动和配置,而DHCP更适用于客户端接入变化的网络,即客户端接入时间、接入地点不固定。

bootp的操作非常简单,就只有一个请求和一个响应,当客户机向服务器申请IP地址的时候,服务器会在本地数据库查询(已经预先绑定了MAC地址和IP地址),然后响应一个数据包。

上图中,应用层协议bootp封装在UDP中,UDP含有程序端口号,然后UDP进一步封装在IP分组中,加上了源和目的地址。注意,由于计算机没有IP地址,所以申请的时候要使用特殊IP地址,所以图中可以看到是全0。然后客户机是以广播的方式查询,所以目的IP地址是全1。响应的过程,响应的源地址自然是服务器本身(服务器单播地址),目的地址有两种情况,第一种仍像请求那样使用广播,第二种情况是使用单播(也就是直接响应源主机),这两种方式其实是一样的。响应的IP分组到达了客户机后,客户机在IP层上仍然是无法识别IP目的地址的,因为这个时候客户机本身还没有IP地址,无法使用响应报文中的IP地址来进行判断这个数据包是不是发给自己的。这个时候要继续往上送直到应用层,bootp软件会来识别数据包中的MAC地址,使用MAC地址来判断,如果不是给自己的则丢弃数据包,如果是那么将响应中的数据接收,最后获得IP地址,子网掩码等信息。(MAC地址保存在网卡中)

DHCP:

DHCP如图中所讲,是bootp的增强,因为bootp是需要人工预先手动设置,是一种静态的方式,如果主机集群数量非常大,那么人工设置(要将所有的物理地址,IP地址绑定也是很耗费时间)也非常麻烦。所以DHCP提供了动态设置MAC地址和IP地址绑定的解决办法,同时也可以兼容bootp,但DCHP提供的IP地址是有时间限制的,所以主机在一段时间内获得的IP地址会失效而重新获取了一个新的IP地址,这样的好处就是,当主机集群很大的时候,但所有主机又不一定同时上网,这样就可以提高IP地址的利用率,对IP地址的灵活使用,减少IP浪费。DHCP服务器有一个静态数据库 

DHCP静态配置:预先手动设置物理地址,IP地址,掩码,DNS地址等信息,而DHCP动态配置则不需要这样设置,只需要设置一个IP地址池,只要有请求申请地址就从地址池中把可用的返回回去,所以客户机申请到的IP是会变化的。DHCP交互图:

  

图中可知,DHCP报文比bootp复杂,有4种类型。图中从上到下,第一个报文是客户机请求服务器分配一个IP,第二个报文是服务器收到请求后查自己的地址池或者静态数据库(如果同时设置了数据库和地址池,则先查数据库看看有没有绑定,如果没有再查地址池)如果有地址可分配则响应回去,如果没有则会响应分配失败的相关信息。做完第二个步骤并不意味结束,虽然第二步返回了IP,掩码等信息,但并不一定就可以让客户机使用(避免并发请求地址导致地址冲突等等情况,是个请求时间差问题,所以设置了4个步骤保证无误)。接着第三步,客户机再次发送申请(确认要使用第二步的资源)给服务器。第四步,服务器确认可以使用这个资源。最终客户机才成功获得IP。第五步,允许客户机主动释放IP,让服务器收回这个IP以便继续分配。

bootp的期限是直到管理员删除了地址设置,而DHCP是一定期限就结束,所以客户机会在IP即将到期的时候再发送请求(相当于续约)。

注意:以上内容是写给自己看的,学习记录。提问请留言。

猜你喜欢

转载自blog.csdn.net/qq_37391017/article/details/83720315