目录
一、网络层提供的两种服务
网络层关注的是如何将分组从源端沿着网络途径送达目的端。网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务,基于数据包的IP地址转发 不负责丢失重传 不负责顺序
在计算机领域,网络层应该向运输层提供怎样的服务(“面向连接” 还是 “无连接“)曾引起了长期的争论。
争论的实质就是:在计算机通信中,可靠交付应当由谁来负责? 是网络还是端系统?--当然是端系统。
举例:淘宝购物,商家通过快递公司给消费者发货,如果是快递公司保证可靠的话,每到一个快递站点都要拆开看看有没有损坏来保证可靠运输,这样效率太低。所以通过端对端来保证可靠传输,如果由损坏,联系商家重新发一份
网络层向运输层提供的两种服务
-
虚电路服务
- 数据报服务(目前互联网用的服务)
二、网际协议 IP
与IP协议配套使用的还有四个协议
- 地址解析协议 ARP (Address Resolution Protocol)
- 逆地址解析协议 RARP (Reverse Address Resolution Protocol)
- 网际控制报文协议 ICMP(Internet Control Message Protocol)
- 网际组管理协议 IGMP (Internet Group Management Protocol)
IP地址=网络地址+主机地址,(又称:主机号和网络号组成)网络号相当于电话区号,主机号相当于电话号码,Ipv4分为A、B、C、D、E五类地址,任何一个Ipv4的IP地址由共由32位二进制数构成,每段8位,共4段,点分式IP地址十进制的表示为a.b.c.d格式。
方便记忆 ↓
1、子网掩码的作用(将IP地址划分位网络地址和主机地址):
- 在分类编址中,给定一个IP地址,就确定了它的网络号和主机号。但在无分类编址中,由于网络前缀是不定长,IP地址本身并不能确定其网络前缀和主机号。
- 使用子网掩码(subnet mask)与IP地址进行按位与操作得到该IP地址网络号
- CIDR 虽然不使用子网了,但仍然使用“掩码” 或“子网掩码”这一名词
例子:
2、子网划分 (主机号不能全是1或0)
等划分为两个子网
3、计算机A和计算机B通信过程
3、为什么不直接使用硬件地址进行通信?
- 由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,所以维护一个庞大的MAC地址映射表因此几乎是不可能的事。
- 连接到因特网的主机都拥有统一的IP地址,它们之间的通信就像连接在同一个网络上那样简单方便,因为调用ARP来寻找某个路由器或主机的硬件地址都是由计算机软件自动进行的,对用户来说是看不见这种调用过程的。
4、IP数据报的格式
版本——占 4 位,指 IP 协议的版本目前的 IP 协议版本号为 4 (即 IPv4)
首部长度——占 4 位,可表示的最大数值是 15 个单位(一个单位为 4 字节)因此 IP 的首部长度的最大值是 60 字节。除去固定部分的长度20字节,可变部分的长度最大为40字节
区分服务——占 8 位,只有在使用区分服务(Differentiated Services)时,这个字段才起作用。一般的情况下都不使用这个字段
总长度——占 16 位,指首部和数据之和的长度,单位为字节,因此数据报的最大长度为 65535 字节。总长度必须不超过最大传送单元 MTU。
标识(identification)—— 占 16 位,IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
标志(flag)——占 3 位,目前只有两位有意义。
- 标志字段的最低位是 MF (More Fragment)。MF = 1 表示后面“还有分片”。MF = 0 表示最后一个分片。
- 标志字段中间的一位是 DF (Don't Fragment) 。只有当 DF = 0 时才允许分片。
片偏移(12 位)——较长的分组在分片后某片在原分组中的相对位置。片偏移以 8 个字节为偏移单位。
生存时间(8 位)——记为 TTL (Time To Live)数据报在网络中可通过的路由器数的最大值。显然,数据报在网络上经过的路由器的最大数值是255(因为占8位,所以2^8-1).若把TTL的初始值设为1,就表示这个数据报只能在本局域网中传送。
协议(8 位)——字段指出此数据报携带的数据使用何种协议以便目的主机的 IP 层将数据部分上交给哪个处理过程
首部检验和(16 位)——这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量
抓包分析图:
5、ICMP报文格式
- lCMP 报文的种类有两种,即 ICMP 差错报告报文和 ICMP 询问报文
- ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型、代码和检验和。接着的 4 个字节的内容与 ICMP 的类型有关。
6、ICMP应用举例PING
- PING 用来测试两个主机之间的连通性
- PING 使用了ICMP回送请求与回送回答报文
- PING 是应用层直接使用ICMP的例子,它没有通过运输层TCP或UDP
三、动态路由算法
使用动态路由器,可以根据路由协议算法生存动态路由表,随着网络运行状况的变化而变化。
1、距离矢量路由算法
第一大类的算法称为距离矢量路由(distance vector routing)。它是基于 Bellman-Ford 算法的。
- 这种算法的基本思路是,每个路由器都保存一个路由表,包含多行,每行对应网络中的一个路由器,每一行包含两部分信息,一个是要到目标路由器,从那条线出去,另一个是到目标路由器的距离。
- 由此可以看出,每个路由器都是知道全局信息的。那这个信息如何更新呢?通过周期性广播来更新路由表。每个路由器都知道自 己和邻居之间的距离,每过几秒,每个路由器都将自己所知的到达所有的路由器的距离告知邻 居,每个路由器也能从邻居那里得到相似的信息。
缺点:
- 第一个问题就是好消息传得快,坏消息传得慢。如果有个路由器加入了这个网络,它的邻居就能 很快发现它,然后将消息广播出去。要不了多久,整个网络就都知道了。但是一旦一个路由器挂 了,挂的消息是没有广播
- 这种算法的第二个问题是,每次发送的时候,要发送整个全局路由表。网络大了,谁也受不了, 所以最早的路由协议 RIP (Routing Information Protocol)就是这个算法。它适用于小型网络(小于 15 跳)。
2、链路状态路由算法
第二大类算法是链路状态路由(link state routing),基于 Dijkstra 算法。参考王道的数据结构
四、动态路由协议
1、基于链路状态路由算法的 OSPF
OSPF(Open Shortest Path First,开放式最短路径优先)就是这样一个基于链路状态路由协 议,广泛应用在数据中心中的协议。由于主要用在数据中心内部,用于路由决策,因而称为内部网关协议(Interior Gateway Protocol,简称IGP)
2、基于距离矢量路由算法的 BGP
BGP(Border Gateway Protocol,简称BGP)又分为两类,eBGP 和 iBGP。自治系统间,边界路由器之间使用 eBGP 广播路由。内部网络也需要访问其他的自治系统。边界路由器如何将 BGP 学习到的路由导入到内部网络呢?就是 通过运行 iBGP,使得内部的路由器能够找到到达外网目的地的最好的边界路由器
补充:IGP和EGP
- 内部网关协议IGP (Interior Gateway Protocal) 即在一个自治系统内部使用的路由选择协议。目前这类路由选择协议使用得最多,如RIP和OSPF协议。
- 外部网关协议EGP (External Gatewey Protocol)若源站和目的站处在不同的自治系统中,当数据报传到一个自治系统的边界时就需要使用一种协议将路由选择信息传递到另一个自治系统中。这样的协议就是外部网关协议EGP . 在外部网关协议中目前使用的是BGP-4。
IP数据报的格式参考:https://blog.csdn.net/idealhunting/article/details/85090096