Tcp/Ip协议笔记
OSI模型
- 应用层:为应用程序提供服务并规定应用程序中通信相关的细节。
- 表示层:将应用处理的信息转换为适合网络传输的格式,或者来自下一层的数据转换成上层能够处理的格式。因此它主要负责数据格式的转换。
- 会话层:负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。
- 传输层:起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。
- 网络层:将数据传输到目标地址。目标地址可以是多个网络通过路由器连接而成的某个地址。因此这一层主要负责寻址和路由选择。
- 数据链路层:负责物理层面上互联的、节点之间的通信传输。
- 物理层:负责0、1比特流与电压高地、光的闪灭之间的互换。
MAC地址(介质访问控制)也称物理地址或者硬件地址。采用MAC地址,目的是为了识别连接在同一个传输介质上的设备。比如电脑连者路由器
网络层与数据链路层都是基于目标地址将数据发送给接收方的,但是网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据。
按接受端数量分类:单播、广播、多播、任播
从通信介质杀那的使用方法上看,网络可以分为共享介质型和非共享介质型。
半双工通信指只发送或只接受的通信方式,它类似无线电收发器,若两端同时说话,是听不见对方说话的。而全双工是指,他允许在同一时间既可以发送数据也可以接受数据。
- IP相当于OSI参考模型中的第三层——网络层
- 网络层与数据链路层的关系
数据链路层只负责某一个区间之间的通讯,就好比我们要去某一个地方,在这个旅程中我们要先做汽车,再做火车,再做公交车,每一张票只能够在某一个限定区间内移动。此处的“区间内”就如同通信网络上的数据链路。而这个区间内的出发地点和目的地点就如同某一个数据链路的源地址和目标地址等首部信息。整个全程的行程表的作用就相当于网络层。
如果我们只有行程表而没有车票,就无法搭乘交通工具到达指定目的地,反之,如果只有车票,恐怕也很难到达目的地,因为你不知道该坐什么样的车,也不知道在哪里换乘。因此只有两者兼备,既有某个区间的车票又有整个旅行的行程表,才能保证到达目的地。与之类似,计算机网络中也需要数据链路层和网络层这个分层才能实现向最终目标地址的通信。 IP分为三大作用模块,他们是IP寻址、路由(最终节点为止的转发)以及IP分包与组包。
- IP地址用于“连接到网路中的所有主机中识别出进行通信的目标地址”。因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址。不论一台主机与哪种数据链路连接,其IP地址的形式都保持不变。
- 路由控制是指将分组数据发送到最终目标地址的功能。多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将目标地址为止的所有通路全指定出来。因为每一个区间(跳)在转发IP数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。就好比我们去某一个车站,我们可以先到一个站点然后询问去下一站怎么走,到了下一站再问下下一站怎么走,重复动作就可以达到终点。
- 路由控制表的作用,为了将数据包发送给目标主机,所有主机都维护着一张路由控指表。该表记录IP数据在下一步应该发给哪个路由器,IP包将根据这个路由表在各个数据链路上传输。从路由控制表可以了解目标地址的方向。
- 数据链路的抽象化:IP是实现多个数据链路之间通信的协议。数据链路根据种类的不同各有特点但是我们可以把数据链路的地址抽象化成IP地址,这样,对IP的上一层来说,不论底层数据链路使用以太网还是无线LAN还是PPP,都将被一视同仁,但是不同数据链路有个最大的区别,就是他们各自的最大传输单位(MTU)不同,就好像人们在邮寄包裹或者行李时有各自的大小限制一样。MTU在以太网中是1500字节,在FDDI中是4352字节,在ATM中是9180字节。为了解决这一个问题,IP进行分片处理。就是指将较大的IP包分成多个较小的IP包。分片的包到了对端目标地址以后会再被组合起来传给上一层。即从IP的上一层来看,它完全可以忽略数据包在途中的各个数据链路上的MTU,而只要按照源地址发送的长度接受数据包。IP就是以这种方式抽象了数据链路层,使得从上层更不容易看到底层网络构造的细节。
- IP为了实现简单化与高速化采用面向无连接的方式。
- 为了提高可靠性,IP上一层的TCP采用面向有连接型。那么为什么不让IP具有可高的传输功能,从而把这两种协议合并到一起呢?
答:如果要一种协议规定所有的功能和作用,那么该协议的具体实施和编程就会遍的非常复杂,无法轻易实现。相比之下,按照网络分层,明确定义每层协议的作用和责任以后,针对每层具体的协议进行编程会更加有利于该协议的实现。
IP地址的基础知识
- IP地址的定义:IP地址(IPV4地址)由32位正整数来表示,每8位一组,分成4组。最大值为2的32次方,约为43亿。实际上43亿台电脑全部联网是不可能的,因为一台主机或路由器就要配置2个以上的IP,所以根本不够。
- IP地址由网络和主机两部分标识组成:网络标识保证相互连接的每个段的地址不相重复,而相同段内连接的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保持每台主机的IP地址都不会相互重叠。即IP地址具有了唯一性。比如192.168.128.10/24表示192.168.128为网络标识,10为主机标识。
- IP地址的分类:分为四个级别,分别为A类、B类、C类、D类。它们根据IP地址中的从第一位到第四位的比特列对其网络标识和主机标识进行区分。
- A类地址:首位以“0”开头的地址。从第一位到第八位是它的网络标识,0.0.0.0 ~127.0.0.0是A类的网络地址,后24位为主机标识,因此,一个网段内可容纳的主机地址上限为16777214
- B类地址:首位以“10”开头的地址,从第一位到第十六位是它的网络标识。128.0.0.1~191.255.0.0是B类的网络地址。后16位相当于主机标识,一个网段可以容纳的主机地址上限为65534
- C类地址:首位以“110”开头的地址。从第一位到第二十四位是它的网络标识。192.168.0.0~239.255.255.0是C类的网络地址。后8位为主机标识,可以容纳最多254个主机。
- D类地址:首位以“1110”为开头的地址。从第一位到第三十二位是网络标识,224.0.0.0 ~239.255.255.255是D类的网络地址。D类没有主机标识,常用与多播
- 分配IP主机地址注意事项:不可以全为0或者全为1,当全为0时表示对应的网络地址或IP地址不可知的情况下才会使用,全为1的主机地址通常用作广播地址。
- 广播地址:用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址全部设置为1就成了广播地址。
- 本地广播:在本网络中内的广播叫做本地广播,这个广播地址的IP包会被路由器屏蔽,不会到达其他链路上
- 直接广播:在不同的网络之间的广播。例如网络地址为192.168.0.0/24主机向192.168.1.255/24目标地址发送IP包,收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能收到这个包。
- IP多播:用于将包发送给特定组内的所有主机,由于其直接使用IP协议,所以不存在可靠传输。多播可以穿透路由器,又可以实现只给那些必要的组发送数据包。
- 多播使用D类地址,如果首位到第四位是“1110”,那么就是多播地址,剩下的28位可以称为多播的组编号。从224.0.0.0到239.255.255.255都是多播地址的可用范围。其中224.0.0.0到224.0.0.225的范围不需要路由控制,在同一个链路内也能实现多播。而在这个范围之外设置多播地址会给全网所有组内成员发送多播的包。此外,对于多播,所有的主机(路由器以外的主机和终端主机)必须属于224.0.0.1的组,所有的路由器必须属于224.0.0.2的组。
- 子网掩码
子网掩码是一个32位地址,是与IP地址结合使用的一种技术。它的主要作用有两个,一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。二是用于将一个大的IP网络划分为若干小的子网络。
使用子网是为了减少IP的浪费。因为随着互联网的发展,越来越多的网络产生,有的网络多则几百台,有的只有区区几台,这样就浪费了很多IP地址,所以要划分子网。使用子网可以提高网络应用的效率。
通过IP 地址的二进制与子网掩码的二进制进行与运算,确定某个设备的网络地址和主机号,也就是说通过子网掩码分辨一个网络的网络部分和主机部分。子网掩码一旦设置,网络地址和主机地址就固定了。子网一个最显著的特征就是具有子网掩码。与IP地址相同,子网掩码的长度也是32位,也可以使用十进制的形式。例如,为二进制形式的子网掩码:1111 1111.1111 1111.1111 1111.0000 0000,采用十进制的形式为:255.255.255.0。
通过计算机的子网掩码判断两台计算机是否属于同一网段的方法是,将计算机十进制的IP地址和子网掩码转换为二进制的形式,然后进行二进制“与”(AND)计算(全1则得1,不全1则得0),如果得出的结果是相同的,那么这两台计算机就属于同一网段。 - CIDR与VLSM
- CIDR:采用任意长度分割IP地址的网络标识和主机标识。
- VLSM:可变长子网掩码,根据VLSM可以将网络地址划分为主机数为500个时,子网掩码长度为/23,当主机数为50个时,子网掩码长度为/26。从而在理论上可以将IP的利用率提高50%
- 全局地址与私有地址
- 全局地址在整个互联网范围内保持唯一。
- 私有地址不需要,只要在同一个域里保持唯一即可。在不同的域里出现相同的私有IP不会影响使用。当私有IP接入互联网时,需要用NAT进行私有IP和全局IP的转换,从而进行通信。
- 路由控制
路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。
路由控制表中记录这网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
- 默认路由:如果一张路由表中包含所有的网络及其子网的信息,将会造成浪费,默认路由是不错的选择,默认路由是指路由表中任何一个地址都能与值匹配的记录。默认路由一般标记为0.0.0.0/0或default。
- IP分割处理与再构成处理
- 数据链路不同,MTU则相异
- IP报文的分片与重组:当遇到比较大的报文无法一下子发送出去时会进行分片处理,而这种分片处理只要路由器认为有必要,会周而复始地进行。分片之后的IP数据包在被重组时,只能由目标主机上进行。
- 路径MTU发现:分片机制的不足在于使路由器处理负荷加重,另外,路由器需要做的其他处理也越来越多,比如网络过滤。所以产生了“路径MTU发现”
- 路径MTU发现的机制(UDP)
- 发送时IP首部的分片标志位设置为不分片。路由器丢包
- 由ICMP通知下一次MTU的大小。
- UDP中没有重发处理。应用在发送下一个消息时会被分片。具体来说,就是指UDP层传过来的“UDP首部+UDP数据”在IP层被分片。对与IP,它并不区分UDP首部和应用的数据。
- 所有的分片到达目标主机后被重组,再传给UDP层。
- 路径MTU发现的工作原理:
首先在发送端主机发送IP数据报时将其首部的分片禁止标志位设置为1.根据这个标志位,途中的路由器即使遇到需要分片才能处理的大包,也不会分片,而将其丢弃。随后,通过一个ICMP的不可达消息将数据链路上的MTU的值发给主机。
下一次,从发送给同一个目标主机的IP数据报获得ICMP所通知的MTU值以后,将他设置为当前MTU。发送主机根据这个MTU对数据报进行分片处理。如此反复,直至数据报被发送到目标主机为止没有再收到任何ICMP,就认为最后一次ICMP所通知的MTU就是一个合适的MTU值。那么,当MTU的值比较多的时候,最少可以缓存10分钟。在这10分钟能够内使用刚刚求的的MTU,但过了这十分钟则重新做一次路径MTU发现。 - 路径MTU发现的机制(TCP)
- 发送时IP首部的分片标志位设置为不分片。路由器丢包
- 由ICMP通知下一次MTU的大小
- 根据TCP的重发处理,数据报会被重新发送。TCP负责将数据分成IP层不再被分片的粒度以后传给IP层,IP层不再做分片处理。
- 不需要重组。数据被原样发送给接收端主机的TCP层。
- IPV6
- 地址长度为原来的4倍,即128比特。
IPv4首部
- Version(版本)
由4个比特构成,标识标识IP首部的版本号。IPv4的版本号为4,因此在这个字段上的值也为“4”,IPv6在这个字段上的值也为“6” - IHL(首部长度)
由4个比特构成,表明IP首部的大小,单位为4个字节(32比特)。对于没有可选项的IP包,首部长度则设置为“5”,也就是说,当没有可选项时,IP首部的长度为20字节。 - TOS(区分服务)
由8比特构成,用来表明服务质量。 - DSCP段与ECN段
DSCP是TOS的一部分。用来进行质量控制。可以像TOS一样提供8种类型的质量控制级别,值越大优先度也越高。如果第五位为1,表示实验或者本地使用的意思。由6个比特构成。
ECN用来报告网络拥堵情况,由两个比特构成。6比特简称ECT,7比特简称CE。第六位的ECT用于通告上层TCP层协议是否处理ECN。当路由器在转发ECN为1的包的过程中,如果出现网络拥堵的情况,就将CE位设置为1。 - Total Length(总长度)
表示IP首部与数据部分合起来的总字节数。共16比特。因此IP包的最大长度为65535字节。不过目前还没有能够传输最大长度的IP包的数据链路。不过,由于有IP分片处理,从IP的上一层来看,不论底层采用何种数据链路,都可以认为能够以IP最大包长传输数据。 - ID(标识)
由16比特构成,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,他的值也逐渐递增。此外,既是ID相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。 - Flags(标志)
由3比特构成,标识包被分片的相关信息。 - 0 未使用。现在必须是0
- 1 指示是否进行分片。 0 -> 可以分片 1->不可以分片
- 2 包被分片的情况下,标识是否为最后一个包 。0->最后一个分片的包 1->分片中段的包
- FO(片偏移)
由13比特构成,用来标识被分片的每一个分段相对于原始数据的为止。第一个分片对应的值为0。由于FO域占13位,因此最大可以标识8192个相对位置。单位为8个字节,因此最大可表示原始数据为65536字节的为止。 - TTL(生存时间)
由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个俄路由器,TTL会减少1,直到变成0则丢弃该包。 - Protocol(协议)
由8比特构成,表示IP首部的下一个首部隶属于哪个协议。 - 首部校验和
由16比特(2个字节)构成,也叫IP首部校验和。该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP数据报不被破坏。 - 源地址 :由32比特构成,表示发送端IP地址
- 目标地址 :由32比特构成,表示接收端IP地址。
- 可选项: 长度可变,通常只在进行实验或诊断的时候使用。
- 填充:在有可选项的情况下,首部长度可能不是32比特的整数倍,为此,通过向字段填入0,调整为32比特的整数倍。
- 数据:存入数据。将IP上层协议的首部也作为数据进行处理。
- Version(版本)
IPv6首部格式
- 版本(Version)
与IPv4一样,由4比特构成。IPv6其版本号为6,因此在这个字段上的值为“6” - 通信量类(Traffic Class)
相当于IPv4中的TOS,由8比特构成。 - 流标号(Flow Label)
由20比特构成,准备用于服务质量控制。 - 有效载荷长度(Payload Length)
有效载荷是指包的数据部分。 - 下一个首部(Next Header)
相当于IPv4中的协议字段。由8比特构成。通常表示IP的上一层协议是TCP或UDP。不过在有IPv6扩展首部的情况下,该字段标识后面第一个扩展首部的协议类型。 - 跳数限制
由8比特构成。与IPv4中的TTL意思相同。数据每经过一个路由器就减一,减到0则丢弃数据。 - 源地址: 由128比特构成。表示发送端IP地址。
- 目标地址:由128比特构成。表示接收端IP地址。
- IPv6扩展首部:可以是任意长度。通常介于IPv6首部与TCP/UDP首部中间。扩展首部当中还可以包含扩展首部协议以及下一个扩展首部字段。
- 版本(Version)
DNS
- DNS 可以有效管理主机名和IP地址之间对应关系。它维护了一个用来表示组织内部主机名和IP地址之间对应关系的数据库。
- DNS查询:解析器为了调查IP地址,向域名服务器进行查询处理。接受这个查询请求的域名服务器首先会在自己的数据库中进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器在像上一层根域名服务器进行查询处理。因此,从根服务器开始向下遍历,直到找到指定的域名服务器,并由这个服务器返回想要的数据。解析器和域名服务器将最新了解到的信息暂时保存在缓存里。这样,可以减少每次查询时的性能消耗。
- DNS还管理着众多信息比如,主机名与IP地址的对应关系为A记录。反之,从IP地址检索主机名称的信息叫做PTR。此外,上层或下层服务器IP地址的映射叫做NS记录。MX记录中记录了邮件地址与邮件接收服务器的主机名。
APR
- 概要:是一种解决地址问题的协议。以目标IP地址为线索,用来定义下一个应该接数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不适用与IPv6。IPv6中用ICMPv6代替ARP发送邻居探索消息。
- 工作机制:假如主机A为了获取主机B的MAC地址,首先通过广播发送一个ARP请求包。包中包含了主机B的IP地址。由于广播可以被同一链路上的所有主机或者路由器接受,因此ARP请求包也就会被同一链路上所有的主机和路由器解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就会把自己的MAC地址塞入ARP响应包返回给主机A。同时接受方也可以通过ARP请求包记录发送方的MAC地址。当完成了一次ARP过程后,会将获取到的MAC地址作为IP对MAC的映射关系记忆到ARP缓存表总,下一次就发送数据就无需进行ARP而直接发送发送到MAC地址。不过MAC地址的缓存是有一定期限,超过这个期限,缓存将被清除。所以这样既是MAC地址与IP地址对应关系发生了变化,也依然能够将数据包正确的发送给目标地址。
- IP地址和MAC地址缺一不可?
RARP
- RARP是从MAC地址定位到IP地址的一种协议。
- 首先需要假设一台RARP服务器,而在这个服务器上注册设备的MAC地址和IP地址。然后再将菏泽个设备接入到网络,插电启动设备后,该设备会发送一条“我的MAC地址是*,请告诉我IP地址应该是什么”的请求信息,RARP服务器接到这个信息就会返回IP地址,而设备接收到RARP服务器返回的应答信息来设置自己的IP地址。
ICMP
- 主要功能:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。有了这些功能,就可以获得网络是否正常,设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。
- 在IP通信中如果某个IP包因为某种原因为未能达到目标地址,那么这个具体的原因将由ICMP负责通知。收到ICMP包的主机A则分解ICMP的首部和数据域以后得知具体发生的问题的原因。
- ICMP的消息有两类:一类是通知出错原因的错误消息。一类是用于诊断的查询信息。
- ICMP目标不可达消息:
IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达的ICMP消息,并在这个消息中显示不可达的具体原因。在实际通信中经常会遇到的错误代码1,表示指主机不可达,它是指路由表中没有该主机的信息,或者该主机没有连接到网络的意思。错误代码4则用于MTU探索。还有等等错误信息不一一举例 - ICMP重定向消息:
如果路由器发现发送端主机使用了次优的路径发送数据,那么它会返回一个ICMP重定向的消息给这个主机,在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的ICMP消息给发送端主机一个更合适的发送路由。不过,多数情况下由于这种定向消息成为引发问题的原因,所以往往不进行这种设置。 - ICMP超时消息:
IP包中的TTL的值会每经过一个路由器就会减1,直到减到0时该IP包会被丢弃。此时IP路由器将会发送一个ICMP超时的消息(错误号0)给发送端主机,并通知该包已被丢弃。设置IP包生存周期的目的是为了在路由控制遇到问题发生循环状况时,避免IP包无休止的在网路上被转发。 - ICMP回送消息:
用于进行通信的主机或者路由器之间,判断所发送的数据报是否已经成功到达对端的一种消息。可以向对端主机发送回送请求消息(类型8),也可以接受对端主机发回来的回送应答消息(类型0)。网络上最常用的ping命令就是利用这个消息实现的。 - ICMP原点抑制消息:
为了缓和网络拥堵的情况。当路由器向低速线路发送数据时,其发送队列的残存变为零而无法发送出去的时候,可以向IP包的源地址发送一个ICMP原点抑制消息。这个消息的主机借此了解在整个线路的某一处发生了拥堵的状况,从而打开IP包的传输间隔。然而,由于这样的ICMP可能会引起不公平的网络通信,一般不被使用。 - ICMP路由器探索消息:
发现与自己相连网络中的路由器。当一台主机发送ICMP路由器请求时,路由器则返回ICMP路由器公告信息给主机。 - ICMP地址掩码消息:
主要用于主机或者路由器想要了解子网掩码的情况。可以向那些目标主机或路由器发送ICMP地址掩码请求消息,然后通过接受ICMP地址掩码应答消息获取子网掩码的信息。 - ICMPv6
- 作用:IPv6中,从IP地址定位MAC地址的协议从ARP转为ICMP的邻居探索消息。这种邻居探索消息融合了IPv4的ARP、ICMP重定向以及ICMP路由器选择消息等功能为遗体,甚至还提供了自动设置IP地址的功能。ICMPv6中将ICMP大致分为两类:一类是错误消息,另一类是信息消息。0~127是错误消息,128~255是信息消息。
- 邻居探索
ICMPv6从类型133到类型137的消息叫做邻居探索消息。邻居请求消息用于查询IPv6的地址与MAC地址的对应关系,并由邻居宣告消息得知MAC地址。邻居请求消息利用IPv6的多播地址实现传输。此外,由于IPv6中实现了即插即用的功能,所以在没有DHCP服务器的环境下也能实现IP地址的自动获取。如果是一个没有路由器的网络,就用MAC地址作为链路本地单播地址。而在一个有路由器的网络环境中,可以从路由器获得IPv6地址的前面部分,后面部分则由MAC地址进行设置。此时可以利用路由器请求消息和路由器宣告消息进行设置。
- DHCP
- DHCP实现即插即用
如果逐一为设备分配IP地址会非常繁琐,为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。 - 工作机制
使用DHCP之前,首先要假设一台DHCP服务器。然后将DHCP所要分配的IP地址设置到服务器上。此外,还需要将相应的子网掩码、路由控制信息以及DNS服务器的地址设置到服务器上。 - 从DHCP获取IP地址的流程,分为两个阶段
-
- DHCP发现包 :要求设置IP地址和子网掩码
- DCHP提供宝:通知可以使用的网络设置
-
- DHCP请求包:通知想要使用在2中通知的设置
- 通知允许3的设置
- 由此,DHCP的网络设置结束,可以进行TCP/IP通信。不需要IP地址时,可以发送DHCP接触包。另外,DHCP的设置中通常都会有一个限制时间的设定。DHCP客户端在这个时限之内可以发送DHCP请求包通知想要延长这个时限。
- 为了防止一台DHCP服务器发生鼓掌,一般会架设两台以上的DHCP服务器。
- 为了检查所要分配的IP地址以及已经分配的IP地址是否可用,DHCP服务器或DHCP客户端必须具备以下功能:
- DHCP服务器
在分配IP地址前发送ICMP回送请求包,确认没有返回应答 - DHCP客户端
针对从DHCP那里获取的IP地址发送ARP请求包,确认没有返回应答。
- DHCP服务器
- DHCP中继代理
- 假设有很多的路由器需要设置DHCP,那将是一个巨大的工程,因此往往需要将DHCP统一管理。具体方法可以使用DHCP中继代理来实现。有了DHCP中继代理之后,对不同网段的IP地址分配也可以由一个DHCP服务器同一进行管理和运维。
这种方法使得在每个网段假设一个DHCP服务器被取代,只需在每个网段设置一个DHCP中继代理即可。它可以设置DHCP服务器的IP地址,从而可以在DHCP服务器上为每个网段注册IP地址的分配范围。
DHCP客户端会向DHCP中继代理发送DHCP请求包,而DHCP中继代理在收到这个广播包以后再以单播的形式发个DHCP服务器。服务器端收到该包以后再向DHCP中继代理返回应答,并由DHCP中继代理将此包转发给DHCP客户端。尤其,DHCP服务器即使不在同一条链路上也可以实现同一分配和管理IP地址。
- DHCP实现即插即用
- NAT
- 定义:是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的基数。
- 工作机制:在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表,当私有地址需要转换成全局地址时,会按照表中的映射关系来转换。当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP地址,人们不免担心全局IP地址不够用,但是转换的时候包含端口号一起转换(NAPT)就可以解决。
在使用TCP和UDP的通信中,只有目标地址、源地址、目标端口、原端口以及协议类型五项内容全部一致时才被认为是同一个连接。
这种转换表在NAT路由器上自动生存。例如,在TCP的情况下,建立TCP连接首次我手时的SYN包一经发出,就会生成这个表。而随后收到关闭连接发出FIN包的确认应答从表中被删除。 - NAT-PT
现在很多互联网服务基于IPv4。如果这些服务不能做到在IPv6中也能正常使用的化,搭建IPv6网络环境的有事也就无从谈起,为了解决这个问题,就产生了NAT-PT规范。NAT-PT是将IPv6的首部转化为IPv4的首部的一种计数。有了这种基数,那么只有IPv6的主机也就能够与IPv4地址的其他主机进行通信了。 - NAT的潜在问题
- 无法从NAT的外部向内部服务器建立连接。
- 转换表的生成与转换操作都会产生一定的开销。
- 通信过程中一旦NAT遇到异常需要重新启动时,所有的TCP连接都将被重置。
- 即使备置两台NAT做容灾备份,TCP连接还是会被断开。
- 解决NAT的潜在问题与NAT穿越
- 改用IPv6
- 在NAT内侧主机上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT的外侧。而NAT并不知道这个虚拟包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这时,如果转换表构造合理,那么还能实现NAT外侧的主机与内侧的主机建立连接进行通信。有了这个办法,就可以让那些处在不同NAT内侧的主机之间也能进行相互通信。此外,应用还可以与NAT路由器进行通信生成NAT表,并通过一定的方法将NAT路由器上附属的全局IP地址传给应用,如此以来就可以解决无法从NAT的外部向内部服务器建立连接的问题,这种现象也叫“NAT穿越”。
IP隧道
假设网络A、B使用IPv6,处在中间的网络C使用IPv4,那么A和B无法直接通信。为了让他们正常通信,这时必须采用IP隧道的功能。
IP隧道中可以将哪些从网络A发过来的IPv6的包统合为一个数据,再为之再追加一个IPv4的首部以后转发给C。使用IP隧道技术的有
- Moblie IP
- 多播包的转播
- IPv4网络中传送IPv6的包
- IPv6网络中传送IPv4的包
- 数据链路帧通过IP包发送(L2TP)
其他IP相关技术
IP多播相关技术
在多播通信中,确认接收端是否存在十分重要,因此要通过MLD实现。它是IPv4中IGMP和IPv6中ICMPv6的重要功能之一。
IGMP(MLD)的两大作用:
- 向路由器表明想要接受多播消息(并通知想接受多播的地址)。
- 向交换集线器通知想要接受多播的地址。
IP任播
IP任播是指为哪些提供同一种服务的服务器配置同一个IP地址,并与最近的服务器进行通信的一种方法。它可以适用于IPv4和IPv6
IP任播机制也有不少限制,例如,它无法保证将第一个包和第二个包发送给同一个主机。这在面向UDP发送请求而无需应答的情况下没有问题,但是对于面向连接的TCP通信或者在UDP中要求通过连续的多个包进行通信的情况,就显的力不从心。
通信质量控制
控制通信质量的机制
类似与高速公路上的VIP通道。对于需要保证通信质量的包,路由器会进行特殊处理,并在力所能及的范围之内对其进行优先处理。通信质量包括带宽、延迟、时延波动等内容。路由器在内部的队列中可以优先处理这些要求保证通信质量的包,有时甚至不得不丢弃哪些没有优先级的包以保证通信质量。为了控制通信质量,人们提出了RSVP技术,包括提供点对点的详细优先控制(IntServ)和提供相对较粗粒度的优先控制(DiffServ)
进行DiffServ质量控制的网络叫做DiffServ域。在DIffServ域中的路由器会对所有进入该IP包首部的DSCP字段进行替换。对于期望被优先出路的包设置一个优先值,对于没有这种期望的包设置无需优先的值。DiffServ域内部的路由器则根据IP首部的DSCP字段(TOS字段的替代)的值有选择性地进行优先处理。在发生网络拥塞的时候可以丢弃优先级较低的包。
显式拥塞通知(ECN)
在IP首部的TOS字段置换为ENC字段,并在TCP首部的保留位中追加CWR标志和ECE标志。
流程:
- IP头中那个的ECT的标志设置为1发送。
- 发生拥塞后在转发IP头中ECT标志为1的包时,设置IP头的CE标志为1
- 当接收端主机收到IP头中CE标志为1的数据,说明网络中途遇到了拥塞。TCP在发送应答回执时,将TCP头中的ECE标志设置为1后再发送。
- TCP发现收到的应答回执中ECE标志为1,就可以得知网络当中遇到了拥塞。于是可以降低包的发送的速度(降低“拥塞窗口减少”的值),并设置CWR标志为1
Mobile IP
传输层的作用
在TCP/IP的通信当中需要使用端口号这样的一种识别码识别在传输层上一层的应用层索要进行处理的具体程序
工作机制
TCP/IP的众多协议大多数是以客户端/服务端的形式运行。这些服务端在UNIX系统当中叫做守护进程。例如HTTP的服务端程序是httpd,而ssh的服务端程序是sshd。在UNIX中并不需要将这些守护进程逐个启动,而是启动一个可以代表它们接受客户端请求的ineted服务程序即可。它是一种超级守护进程。该超级守护进程收到客户端请求以后会创建新的进程并转换为sshd等各种守护进程。确认一个请求究竟发给的是哪个服务端,可以通过所收到的数据包的目标端口号识别。
TCP
TCP面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管的水流。当应用程序采用TCP发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。
TCP为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制”、“拥塞控制”、提高网络利用率等众多功能。
UDP
UDP是不可靠性的数据报协议。细微的处理它会交给上层应用去完成。在UDP情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
端口号
端口号用来识别同一台计算机中进行通信的不同应用程序,因此,它也被称为程序地址。- TCP/IP或UDP/IP通信中通常采用5个信息来识别一个通信。它们是“源IP地址”、“目标IP地址”、“协议号”、“源端口号”、“目标端口号”。只要其中某一项不同,则被认为是其他通信。
确定端口号的方法:
- 标准既定的端口号。它是指每个应用程序都有其指定的端口号。但并不是说可以随意使用任何一个端口号。每个端口号都有其对应的使用目的。
- 时序分配法(动态分配法)。此外服务端有必要确定监听端口号,但是接受服务的客户端没必要确认端口号。在这种方法之下,客户端应用程序可以完全不用自己设置端口号,而全权交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。例如,每需要一个新的端口号时,就在之前分配号码的基础上加1,这样,操作系统就可以动态地管理端口号了。
- 端口号与协议。端口号由其使用的传输层协议决定。因此不同的传输协议可以使用相同的端口号。
UDP
特点及其目的
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使在出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞等欣慰。此外,传输途中即使出现丢包,UDP也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么就得交给UDP的应用程序去处理。UDP的这种简单高效的方式主要用于以下几个方面:
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 限定于LAN等特定网络中的应用通信
- 广播通信(广播、多播)
TCP
TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。- 通过序列号与确认应答提高可靠性
在TCP中,当发送端的数据到达接受主机时,接收端主机会返回一个已收到消息的通知(ACK)。如果在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,并进行重发。但也可能因为一些其他原因导致确认应答延迟到达,源发送主机只要按照机制重发数据即可,但是对于目标主机客来说,这就是一种灾难,它会反复收到相同的数据。而为了对上层应用提供可靠的传输,必须得放弃重复的数据包。由此引入了序列号机制。
序列号是按顺序给发送数据的每一个字节都标上号码的编号。接收端查询接受数据TCP首部中的序列号和数据的长度,将自己下一步应该接受的序列号作为确认应答返送回去。就这样,通过序列号和确认应答号,TCP可以实现可靠传输。 - 重发超时如何确定
重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过了这个时间仍未收到确认应答,发送端将会进行数据重发。那么这个重发超时的具体时间长度如何确定?
TCP在每次发包时都会计算往返时间以及偏差。讲这个往返时间和偏差相加重发超时的时间,就是比这个总和要稍大一点的值。
在BSD的UNIX以及windows系统中,超时都是以0.5秒为单位进行控制,因此重发超时都是0。5秒的整数倍。不过,由于最初的数据包还不知道往返时间,所以其重发超时一般设置为6秒左右。数据被重发之后若还是收不到确认应答,则进行再次发送。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长,但是数据不会被无限的重发,到一定次数之后,如果没有任何确认则强制关闭连接。 - 连接管理
TCP在通信之前,会通过TCP首部发送一个SYN包作为建立连接的请求等待确认应答。如果对端发来确认应答,则认为可以进行数据通信。如果对端的确认应答未能到达,就不会进行数据通信。此外,在通信结束时会进行断开连接的处理(FIN包),可以使用TCP首部用来控制的字段来管理TCP连接。一个连接的建立与断开,正常过程至少需要来回发送7个包才能完成。建立一个TCP连接需要发送3个包。这个过程也称作“三次握手”
- TCP以段为时间单位发送数据
在建立TCP连接的同时,也可以确定发送数据包的单位,我们称为“最大消息长度”。最理想的情况是,最大消息长度正好是IP中不会被分片处理的最大长度。
MSS是在三次握手时,在两端主机之间被计算出来。两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS选项,告诉对方自己的接口能适应MSS的大小。然后会在两者之间选择一个较小的值投入使用。 - 利用窗口控制提高速度
确认应答不再是以每个分段,而是以更大的单位进行确认时,转发时间将会被大幅度的缩短。也就是说,发送端主机在发送了一个段以后不必要一直等待确认应答,而是继续发送。收到确认应答后,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也称为滑动窗口控制。 - 窗口控制与重发控制
如果确认应答未能到达时,数据已经到达对端,是不需要再重新进行发送的。
如果某个报文段丢失,接受主机如果收到一个自己应该接收的序号以外的数据时,会针对当前为止收到数据返回确认应答,不过即使接收端主机收到的包序号并不连续,也不会将数据丢弃而是暂存在缓冲区中。而发送端主机如果连续3次收到同一个确认应答,就会对其所对应的数据进行重发。这种机制称之为高速重发控制。 - 流控制
接收端主机向发送端主机通知自己可以接受数据的大小,于是发送端会发送不超过这个限度的数据。该限度大小就是窗口大小。所以窗口大小的值是由接收端主机决定的。
TCP首部专门有一个字段用来通知窗口大小。接受端主机将自己可以接受的缓冲区大小放入这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。不过,接收端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之设置为一个更小的值通知发送端。 - 拥塞控制
在网络出现拥堵时,如果突然发送一个较大量的数据,极有可能会导致网络的瘫痪。所以在通信一开始时就会通过一个慢启动的算法得出的数值,对发送数据量进行控制。 首先,为了在发送端调节所要发送数据的量,定义了一个叫做“拥塞窗口”的概念,于是在慢启动的时候,将这个拥塞窗口的大小设置为1个数据段(1MSS)发送数据,之后每收到一个确认应答(ACK),拥塞窗口就加一,在发送数据包时,将拥塞窗口的大小与接收端主机通知的窗口做比较,然后按照他们当中较小的值,发送比其还要小的数据量。
未完待续。。。。
- 通过序列号与确认应答提高可靠性