IP地址的分配
为了获取一块IP地址用于一个组织的子网内,于是我们向ISP联系,ISP则会从已分给我们的更大
地址块中提供一些地址。
例如,ISP也许已经分配了地址块200.23.16.0/20。
该ISP可以依次将该地址块分成8个长度相等的连续地址块,随后分给我们一块。
如下图所示:

获取主机地址:动态主机配置协议
某组织一旦获得了一块地址,它就可以为本组之内的主机与路由器接口逐个分配IP地址。
路由器的IP地址通常由系统管理员配置。
但是主机地址我们自己可以手动配置,但是更多的是使用动态主机配置协议(DHCP)来完成。
DHCP允许主机自动获取一个IP地址。
网络管理员可以配置DHCP,以便使主机每次与网络连接时能得到一个相同的IP地址,或者某主机
将被分配一个临时的IP地址。
DHCP也被称为"即插即用协议"或"零配置"协议。
DHCP又是一个客户-服务器协议,客户通常是新到达的主机,它要活的包括自身使用的IP地址在内
的网路配置信息。
下图是一个DHCP接入的子网:

对于一台新到达的主机而言,DHCP协议工作要经过大概四步:
1.DHCP发现
一台新到达的主机的首要任务是发现一个要与其交互的DHCP服务器。这可以通过使用DHCP发现
报文来完成,客户在UDP分组中向端口67发送该发现报文。
怎么发送呢?很简单。
前面我们讲过广播目的地址,因此DHCP客户会在子网中使用255.255.255.255并且使用"本主机"源
IP地址0.0.0.0。
DHCP客户将该IP数据报传递给链路层,链路层然后将该帧广播到所有与该子网连接的节点。

2.DHCP服务器提供
DHCP服务器收到一个DHCP发现报文时,用DHCP提供报文向客户做出响应,该报文向该子网的
所有节点广播,仍然使用IP广播地址255.255.255.255。
3.DHCP请求
新到达的客户从一个或多个服务器中提供中选择一个,并向选中的服务器提供DHCP请求报文,回
显配置的参数。
4.DHCP ACK
服务器用DHCP ACK报文对DHCP请求报文进行响应,证实所要求的参数。
一旦客户收到DHCP ACK后,交互便完成了,并且该能够在租用期内使用DHCP分配的IP地址。
网络地址转换

我们可能会想,在家庭中很多机器使用路由器上的网络,这些机器的IP地址该如何分配呢?如果这
些机器都分配一个IP地址,那么全球的机器数量远远多于40亿,IP地址显然是不够分的,那该怎么
办呢?
很简单,在这里我们使用NAT来解释,并且来引入一个"专用网络"概念。
什么是NAT?
NAT使路由器对于外部世界来说甚至不像一台路由器。
相反NAT路由器对外界的行为就如同一个具有单一IP地址的单一设备。
所有离开家庭路由器流向更大的报文都拥有一个源IP地址138.76.29.7(上图的例子),且所有进入家
庭的报文都拥有同一个目的IP地址138.76.29.7。
从本质上讲,NAT使路由器对外界隐藏了家庭网络的细节。
而路由器怎么将分组转发给哪个内部主机呢?
技巧就是使用NAT路由器上的一张NAT转换表,并且在表项中包含了端口号及其IP地址。
NAT转换表具体操作
假设一个用户坐在家庭网络主机10. 0. 0. 1 后,请求IP地址为 128.119. 40. 186的某台Web服务器
(端口 80)上的一个Web页面。
主机10. 0. 0. 1 为其 指派了(任意)源端口号3345并将该数据报发送到LAN中。
NAT路由器收到该数据报, 为该数据报生成一个新的源端口号5001,将源IP替代为其广域网一侧接口
的IP地址 138. 76. 29.7 ,且将源端口 3345更换为新端口5001。
当生成一个新的源端口号时,NAT路由器可选择任意一个当前未在NAT转换表中的源端口号。(注
意到因为端口号字段为16 比特长,NAT协议可支持超过60 000个并行使用路由器广域网一侧单个
IP地址的连接!)
路由器中的NAT也在它的NAT转换表中增加一表项。Web服务器并不知道刚到达的包含 HTTP请求
的数据报已被NAT路由器进行了改装,它会发回一个响应报文,其目的地址是 NAT路由器的IP地
址,其目的端口是5001。
当该报文到达NAT路由器时,路由器使用目的IP地址与目的端口号从NAT转换表中检索出家庭网络
浏览器使用的适当IP地址 (10. 0. 0.1 )和目的端口号(3345)。于是,路由器重写该数据报的目
的IP地址与目的端 口号,并向家庭网络转发该数据报。
IPv6
IPv6数据报的格式

扩大的地址容量
IPv6将IP地址长度从32比特增加到128比特,这就确保全世界将不会用尽IP地址。
IPv6还引入了一种称为任播地址的新型地址,这种地址可以使数据报交付给一组主机中的任意一
个。
简化高效的40字节首部
新的选项编码允许进行更灵活的选项处理。
流标签
IPv6有一个难以琢磨的"流"定义。
该字段用于"给属于特殊流的分组加上标签,这些特殊流是发送方要求进行特殊处理的流,如一种
非默认服务质量或需要实时服务的流。"
版本
该4比特字段用于标识IP版本号,IPv6将该字段值设为6,但是该字段不能被置为4,即使置为4也
无法创建一个合法的IPv4数据报。
流量类型
该8比特字段与我们在IPv4中看到的TOS字段含义相似。
有效载荷长度
该16比特值为一个无符号整数,给出了IPv6数据报中跟在定长的40字节数据报首部后面的字节数
量。
下一个首部
该字段标识数据报中的内容(数据字段)需要交给哪个协议?(TVP/UDP)
跳限制
转发数据报的每台路由器将对该字段的内容减1,若被减少到0,则被丢弃。
数据
这是IPv6数据报的有效载荷部分,当数据报到达目的地时,该有效载荷就从IP数据报中移出。
分片/重新组装
IPv6不允许在中间路由器上进行分片与重新组装。