第1章 概述
7层OSI模型:
- 应用层:指定完成某些用户初始化任务的方法。应用协议一般由开发者设计和实现,如:FTP、Skype等。
- 表示层:指定针对应用的数据表示格式和转换规则方法。加密有时候放在这一层,但也可在其他层中。
- 会话层:指定由多个连接组成一个通信会话的方法。它可能包括关闭连接、重启连接和检查点进程。
- 传输层:指定运行在相同计算机系统中的多个程序之间的连接或关联的方法。如:TCP。
- 网络层:指定经过潜在不同类型链路层网络的多跳通信方法。如:IP。
- 链路层:指定经过单一链路通信的方法。本层通常包括差错监测和链路层地址格式。
- 物理层:指定连接器、数据速率和如何在某些介质上进行为编码。本层也描述低层的差错监测和纠正、频率分配。
TCP/IP 4层模型:应用层、传输层、网络层、链路层
对等:(服务器常用)
- 有的应用既是客户端,也是服务器,有时候又同时是两者,并能转发请求。这种应用称为对等或P2P应用。
- P2P网络的一个主要问题是发现服务(可以了解下etcd)。一个对等方如何在一个网络中发现提供它所需的数据或服务的其他对等方,以及可能进行交互的那些对等方的位置?这一般由一个引导程序来处理,以便每个客户机在最初配置中使用它所需的对等方的地址和端口号。一旦连接成功,新的参与者向其他活跃的对等方发出请求,并根据协议获得对等方提供的服务或文件。分布式服务器常用。
第2章 Internet地址结构
2.3 IP地址结构
IPv4地址结构
IPv4地址由32位组成,并且主要分为5类。A、B、C类用于单播;D类用于组播;E类保留。其分类如下所示:
- A类:0+网络号(7位)+主机(24位)
- B类:10+网络号(14位)+主机(16位)
- C类:110+网络号(21位)+主机(8位)
- D类:1110+组播地址(28位)
- E类:1111+保留(28位)
子网寻址的出现
我们可以把网络地址管理分为两部分,第一部分是分配网络号,第二部分是分配主机号。在20世纪80年代前,每个新的网段被添加到Internet中,会集中为其分配一个新的网络号。当规模越来越大时,这种分配就会力不从心。所以出现了子网寻址,站点接入Internet后会分配到一个网络号,然后由管理员进一步划分本地的子网数。也就是说,将第二部分的管理交给了站点管理员,Internet只需要管理第一部分。
管理员一般采用自然的划分方法,即把B类地址中留给主机的16位分为子网地址(8位)+主机号(8位)。当然,并不要求A类或B类地址的子网划分都要以字节为划分界限。
大多数的子网例子都是B类地址。其实,子网还可用于C类地址,只是它可用的位数较少而已。很少出现A类地址的子网例子是因为A类地址本身就很少。(但是,大多数A类地址都是进行子网划分的。)
举个例子:B类IPv4地址主机位有16位,那么站点管理员可以将16位主机细分成8位子网ID+8位主机ID,这样可以提供256个子网和每个子网中有254个主机(第一个和最后一个地址无效)。假如某个学校分配到了一个B类IPv4地址,其网络号128.32,则站点管理员可以划分256个局域网,办公室局域网中的主机IPv4地址开始于128.32.1,实验室局域网中的主机IPv4地址开始于128.32.2等等。当然,边界路由器需要能区分128.32网络中的不同子网,也要能区分来自不同局域网的流量,如:128.31.1.x和128.31.2.x的流量。
第一个地址和最后一个地址无效的原因:第一个地址时划分前的网络号(子网地址),最后一个地址是广播地址(见后续介绍)。规定来说这两个地址已经被用了。
子网掩码
子网掩码:确定一台主机对应的IP地址中的网络和子网信息。子网掩码位数和IP地址位数相同。子网掩码会将网络/子网部分的对应位设置成1,主机部分设置为0。例:128.32.1.14的掩码为255.255.255.0(/24),地址与掩码按位与即可得到网络前缀为128.32.1.0/24。
如果没有子网掩码,会不知道子网位,也就不知道ip地址属于哪个子网。
可变长度子网掩码(VLSM)
在之前子网寻址中,已介绍子网划分不要求按照字节为划分界限。所以站点管理员可以划分出不同子网、不同主机。如:站点获得的网络号为128.32.x.x,那么站点管理员可以划分成一级子网:128.32.1.0/24子网(主机128.32.1.{1255})、128.32.230.128/26子网(主机128.32.230.{128191})、128.32.2.0/24(主机128.32.2.{1~255})等,对于128.32.2.0子网来说,还可以继续添加内部路由器(二级子网),比如内部路由器管理的网段为128.32.2.128/25)。上述例子共有三种不同的子网。其网络位分别为/24、/25、/26,这样,每个子网可提供不同数量的主机。对于IPv4来说,/24允许有254台主机;/25允许有126台主机;/26允许有62台主机。(书上是256、128、64,不是说子网存在两个无效地址么?)
目前,大部分主机、路由器和路由协议支持可变长度子网掩码。
可变长度子网掩码优点:划分的子网可提供不同数量的主机,更方便管理,也防止了ip地址浪费。
广播地址
在每个IPv4子网中,都存在子网广播地址。子网掩码取反,然后与IPv4地址进行或运算得到子网广播地址,也就是子网的末地址。如:128.32.1.0/24的子网广播地址是128.32.1.255。
从历史上看,例如:我们可形成一个目的IPv4地址为128.32.1.255的数据报,然后通过Internet路由到达128.32.1.0子网,然后作为一组广播数据包发送给子网中的所有主机。但是定向广播这种方式存在很大的安全问题,所以在Internet中被禁用。
特殊用途地址255.255.255.255被保留为本地网络广播,它不会被路由器转发。其他内容见后续介绍。
IPv6地址和接口标识符
IPv6比IPv4地址长4倍,共128位。
IPv6使用特殊前缀表示一个地址范围。这个地址范围可以用来标识节点本地(只用于同一计算机中通信)、链路本地(只用于同一网络链路或IPv6前缀中的节点)、全球性(Internet范围)。
链路本地IPv6地址使用接口标识符(IID)作为一个单播IPv6地址的分配基础。
- IID在所有情况下都作为IPv6地址的低序位,且以二进制000开始。
- IID通常为64位,并直接由一个网络接口相关的链路层MAC地址形成。
EUI表示扩展唯一标识符。48位或64位。
- EUI-64由OUI(组织唯一标识符, 24位)和由组织分配的40位扩展标识符组成。在OUI中,第一个字节的低两位分别是u位和g位。当u被设置时,表示该地址是本地管理。当g位被设置时,表示该地址是一组或组播类型的地址。
- EUI-48也可以转换成EUI-64。将EUI-48地址的24位OUI值复制到EUI-64,然后将EUI-64的第4和第5个字节的16位替换成FFFE(16进制),然后再复制组织分配的40位扩展标识符。如:EUI-48地址00-11-22-33-44-55转换成EUI-64会变成00-11-22-FF-FE-33-44-55。
EUI-64和IID的联系:EUI-64对u位进行取反后,即IPv6地址的IID。
例子:MAC地址 -> EUI-64 -> IID -> IPv6
- 以太网硬件地址位为00:30:48:2A:19:89。
- 转换成EUI-64之后,变成00:30:48:ff:fe:2a:19:89。
- 对u位进行取反后,变成02:30:48:ff:fe:2a:19:89,即IID。
- 为了完成链路本地IPv6地址,我们使用保留的链路本地前缀fe80::/10。
- 最终完整地址为:fe80::230:48ff:fe2a:1989/64
IPv6地址简化方法:一般用16进制数表示。
- IPv6可分为8块,每块由4个16进制数表示。
- 每块的前导的零不必书写。
- 全零的块可省略,并使用::代替。一个IPv6地址中符号::只能使用一次。
- IPv4映射的IPv6地址:紧接着IPv4部分的地址块的值为ffff,地址的其余部分使用点分四组格式。如:IPv6地址::ffff:10.0.0.1可表示IPv4地址10.0.0.1。它被称为IPv4映射的IPv6地址。
- IPv6地址的低32位通常采用点分四组表示法。IPv6地址::0102:f001相当于地址::1.2.240.1。它被称为IPv4兼容的IPv6地址。兼容和映射不同,兼容现在已不再需要。
2.4 CIDR和聚合
CIDR:无类别域间路由。CIDR允许根据对地址空间的不同需求,将不同大小的地址块分配给某个组织。/24、/26之类的。
聚合:将相邻的多个IP前缀合并成一个短前缀(成为一个聚合或汇聚)
2.5 特殊用途地址
IPv4支持广播地址和组播地址,IPv6仅支持组播地址。
IPv4和IPv6的转换
IPv4和IPv6之间的转换共有6种不同格式可用。无论采用哪种格式,第64至71位必须设置为0,以保持与指定标识符的兼容性。
组播地址
一个IP组播地址标识一组主机接口。
一个组可以跨越整个Internet。
一个组覆盖网络部分称为组的范围。常见的范围包括节点本地(同一计算机)、链路本地(同一子网)、站点本地、全球(整个Internet)和管理。
当一台主机向一个组发送数据时,它会创建一个数据报,使用(单播)IP地址作为源地址,使用组播IP作为目的地址。已加入组的所有主机将接收发送到该组的数据报。但是源主机并不知道有哪些主机接收到它的数据报,也不知道主机是否已接收,除非主机明确做出应答。
IPv4组播地址
IPv4使用D类地址支持组播。这些地址被分为几个部分。共有28位保留地址,可提供2^28个主机组(每个主机组是一个IP地址)。
IPv6组播地址
IPv6使用前缀ff00::/8来支持组播,剩余的112位可用于保存组号,所以可提供2^112个主机组。
IPv6组播地址的第2字节包含一个4位标志字段和一个4位范围ID字段。
标识字段:分别为0、R、P、T。
- 0:保留
- R:会合点标志。0表示常规;1表示包括RP地址。
- P:使用单播前缀。0表示常规;1表示基于单播前缀的地址。
- 当P设置为1时,无需基于每个组的全球性许可。对组播地址有两个可选的方法:
- 基于单播前缀的IPv6组播地址分配。
- 链路范围的IPv6组播,使用接口标识符,并且组播地址是基于主机的IID。
- T:临时。0表示永久分配;1表示临时。
- 当P和R字段被设置为0时,使用代替格式。
- 当T位字段被设置为1,T位字段也必须被设置为1。
范围字段:
- 表示到某些组播地址的数据报的分配限制。即组播的范围,如:全球、机器本地、子网本地、站点本地、组织本地等。
- 范围字段的值表示的含义见书。
会合点(RP):一个路由器中用于处理一个或多个组播组的组播路由的IP地址。
任播地址
任播地址是一个单播IPv4或IPv6地址,这些地址根据它所在的网络确定不同的主机。通过配置路由器通知Internet中多个站点有相同单播路由来实现。如:某个数据报发送到一个任播地址,可用于找到DNS服务器。
扩展
单播、多播(组播)、广播区别:参考 https://www.cnblogs.com/rogerroddick/archive/2009/08/31/1557228.html
-
从网络节点来说:
- 单播:一对一。即P2P,点对点通信。信息的接收和传递只在两个节点之间进行。应用比较多,如:收发电子邮件、浏览网页等。
- 多播(Multicast):一对一组。一次传送所有目标节点的数据,也可以对特定对象传送数据。对于网上视频会议等来说,使用P2P需要逐个节点传输,效率低;使用全部发送的广播方式,又无法区分特定数据接收对象;所以最后采用多播,既可以实现一次传送所有目标节点的数据,也可以达到只对特定对象传送数据的目的。IP网络的多播一般通过多播IP地址实现,即D类地址, 224.0.0.0至239.255.255.255之间的IP地址。
- 广播(Broadcast):一对所有。客户机通过DHCP自动获得IP地址的过程是通过广播实现的。
-
从应用层面来说:
-
客户端到服务器、服务器到客户端也是单播。 -
游戏会出现全区广播、全服广播。
第3章 链路层
3.2 以太网
以太网帧
PDU:协议数据单元(帧)。
以太网帧格式:按下述顺序组合。DSTFCS为帧;P/Q标签填充为MAC客户机数据。
- 前导:7字节。用于接收器同步。
- SFD:1字节。帧起始分隔符。用于接收器同步。
- DST:6字节。目的地址。
- SRC:6字节。源地址。
- 长度或类型:2字节。如果字段值大于或等于1536,则表示类型;如果小于1536,则表示长度。
- P/Q标签:
- 其他标签:在信封帧(Q标签帧)中允许最大482字节的标签。
- 上层协议有效载荷:通常最大为1500字节,即MTU(最大传输单元)。
- 填充:0+字节。
- FCS:4字节。帧校验序列。
- 载体扩展(仅半双工):可变。
以太网帧最小的帧是64字节,要求数据区(有效载荷)长度(无标签)最小为48字节。
传统以太网的最大帧长度是1518字节(包括4字节CRC和14字节头部)。
当传输较大数据的时候,可以使用巨型帧或超级巨型帧。但是这些帧无法与较小的1518字节的帧互操作。
帧校验序列/循环冗余校验(常用)
有效载荷区域之后的最后字段提供了对帧完整性的检查。循环冗余校验(CRC)字段位于尾部,有32位。
进行一系列的计算之后,把余数的反码放置在帧的CRC或帧校验序列(FCS)字段中。
客户端与服务器之间的同步常用到CRC。
(ps:传输层也存在数据校验,但侧重点不同)
3.4 网桥和交换机
集线器、网桥、交换机、路由器概念:
-
参考 如何通俗地解释什么是网桥? -
集线器(hub):工作在物理层。一个口收到的信号,原封不动的发送给所有其他的口,由其他的口上的设备自己决定是否接收信号。 -
网桥(bridge):工作在链路层。以太网中,数据链路层地址就是mac地址,网桥会过滤mac。只有目的mac地址匹配的数据才会发送到出口。一个bridge指的是一个输入到一个输入的桥接。 -
交换机(switch):工作在链路层。早期的switch可以看成多个bridge的集成设备。一个交换机的口的输入到另一个交换机口的输入,也可以认为是一个bridge。 -
路由器(router):工作在网络层,基于IP地址做转发。
交换机学习:
-
当第一次打开一个交换机(网桥)时,它的数据库是空的,因此它不知道除自己之外的任何站的位置。当它每次接收到一个目的地不是自己的帧时,它为除该帧到达的端口之外的所有端口做一个备份,并向所有端口发送这个帧的备份。 -
在每次学习一个地址后,网桥启动一个计时器(通常默认为5分钟)。在Linux中,每个学习条目使用一个与网桥相关的固定时间。如果在指定的“有效期”内,没有再次看到该条目中的地址,则将这个条目删除。 -
当一个条目因有效期满而被删除时,后续的帧将被发送到接收端口之外的所有端口(称为洪泛),并更新过滤数据库中的这个条目。两个以上的网桥通过冗余链路互联,帧的洪泛可能导致帧永远循环的洪泛灾难。使用生成树协议(STP)、快速生成树协议(RSTP)控制。
SSID或ESSID:传输网络名称。
3.5 无线局域网
控制帧
控制帧与帧确认被用于一种流量控制方式。流量控制有助于接收方使一个过快的发送方降低发送速度。帧确认有助于发送方知道哪些帧已正确接收。(ps:流量控制在传输层也存在,但是两者侧重点不同)
RTS:请求发送帧,CTS:明确发送帧。
一个站在发送数据帧之前发送一个RTS帧,当接收方愿意接收额外的流量时,它会响应一个CTS帧。在RTS/CTS交换之后,这个站开启一个时间窗口,用于向确认接收的站发送数据帧。
帧分片:将一个帧分成多个分片。
- 当使用帧分片时,每个分片有自己的MAC头部和尾部的CRC,并且它们独立于其他分片处理。
- 当信道有明显的干扰时,分片有助于提高性能。
- 分片仅用于目的地址为单播(非广播或组播)的帧。为了具备这种能力,顺序控制字段包含一个分片号(4位)和一个序列号(12位)。分片号用于记录分片的位置,所以一个帧最多可被分为15个分片。
- 帧控制字中的更多标志字段表示更多分片还没有到达。最后一个分片将这个位设置为0。
- 当所有包含同一序列号的分片被接收,并且最后一个分片将更多标志字段设置为0时,帧被重组并交给更高层协议处理。
总结
链路层目的:把网络层传下的分组封装成帧,将帧发送给网络层。
链路层主要是在做封装成帧(以太网帧)、传输、差错检测。
帧:描述链路层的PDU
第4章 地址解析协议
位于链路层。
MAC地址一般指TCP/IP协议中的链路层协议地址,全球唯一。
地址解析是发现两个地址之间的映射关系的过程(主机在发送帧前将目标IP转换成目标MAC地址的过程)。对于使用IPV4的TCP/IP协议族,这是由运行的ARP来实现的。IPv6使用邻居发送协议(NDP)。
如果一台主机要将一个帧发送到另一台主机,需要知道这台主机的IP地址和主机在网络中的有效硬件地址(MAC地址)。
总结
参考:https://blog.csdn.net/u010442328/article/details/45419019
ARP的作用:在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址。而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址。这就导致在以太网中使用IP协议时,数据链路层的以太网协议接到上层IP协议提供的数据中,只包含目的主机的IP地址。于是需要一种方法,根据目的主机的IP地址,获得其MAC地址。这就是ARP协议要做的事情。 另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为ARP代理(ARP Proxy)。
|