网络层与数据链路层

Posted 楠c

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网络层与数据链路层相关的知识,希望对你有一定的参考价值。

TCP解决了,数据的可靠和效率。IP负责转发和路由。
路由转发的目的是先找到目的网络,在找到目的主机。
IP将数据分片,组装,而TCP提供转发数据的策略和服务。

HTTP负责,构建与解析request和response。调用recv和send时触发TCP协议。
TCP解决了,可靠性和效率,即什么时候发,发多少的策略。注意他没有发。
IP负责,数据转发和路由选择确定路径
MAC负责,网络寻址,两个设备(同一种数据链路节点)之间进行传递数据

主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称

ip协议格式


ip怎么交给上层那个协议?
ip有个8位协议,可以向上交付。
怎么分离有效载荷和数据?
他既有总长度也有4位首部长度。

  • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.

  • 4位头部长度(header length): IP头部的长度是多少个4字节, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.

  • 8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.

  • 16位总长度(total length): IP数据报整体占多少个字节.

  • 8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环

  • 8位协议: 表示上层协议的类型

  • 16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏,注意TCP检验全部

  • 16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个
    id都是相同的.

  • 3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示是否允许分片, 不允许的话如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"后面是否有更多分片", 如果有置为1, 没有就是0. 类似于一个结束标记.

  • 13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片
    在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报
    文的长度必须是8的整数倍(否则报文就不连续了).

  • 32位源地址和32位目标地址: 表示发送端和接收端.

  • 选项字段(不定长, 最多40字节):

MTU

IP协议要传往MAC协议的最大传输单元,一般是1500字节 。
假如IP要传送。3000字节。即IP(20)+2980。其实是要分3片的。因为分的片需要重新加报头,最大为1500,即20+1480,
假设另一个也是20+1480,那么现在是两个报头+两个1480,即40+2960。可以看见由于多加了一个报头,但是少了20字节的有效数据。、

数据报太大需要分片,那还有一些其他的不需要分片怎么区分呢?

可以通过报文中的16位标识,3位标志字段,13位片偏移。

先看3位标识的第二位,观察是否分片。在看16位标识将相同的分成一组。分片之后还要组装但怎么保证他们的顺序呢?13位片偏移会记录相对原始IP报文出的偏移。那怎么控制读取的长度呢,根据3位标识的第3位观察结束标记。

网段划分

网络号:相互连接的两个网段具有不同标识
主机号:同一网段内,主机之间可以具有相同的网络号,但主机号不能相同。

不同的局域网属于不同 的网段,不同的网段通过路由器连接。假设某个网段新增了一台主机,那么路由器还会为其分配相同的网络号,不同的主机号。

网络有以下方式表示网络号和主机号

A,B,C,D,E网络号越来越多。
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255
随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址;
例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多.
然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了
针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):
引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;
将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

将IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
将IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数
据包;
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

IP数量不足

CIDR引入了子网掩码,在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然
不是很够用. 这时候有三种方式来解决
动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
NAT技术;
IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv6用16字节128位来表示一个IP地址; 但是目前IPv6还没有普及;

总结一下

AB类划分太粗,很少有人使用。C类太少又不够用。于是引入了无分类地址CIDR和子网掩码,特征为a.b.c.d/x,来划分网络号主机号,x代表前x位属于网络号。子网掩码的同样将ip划分为网络号和主机号,只不过他进一步力度更细,将主机号又划分为子网号,子网主机。但这样做只是暂时减缓了ipv4地址不足,根本问题仍未得到解决。于是又提出了NAT技术,DHCP动态分配ip(应用层协议底层为udp),还有ipv6。
NAT技术:它是将对内私网ip转换为公网ip,然后进行路由选择,可以和公网的主机进行通信,所以各个局域网都可能有相同的私网ip,提高了利用率。
还有一个NAPT技术,NAPT不仅转换IP包中的IP地址,还对IP包中TCP和UDP的Port进行转换。这使得多台私网主机利用1个NAT公共IP就可以同时和公共网进行通信。即就是将两个私网ip不同,端口号相同的ip,统一转换为同一公网ip,但以不同的端口号作为区分,同时用一张表来记录转换关系。
NAT是一对一,它使得不同子网可以有相同的私网ip。NAPT使得即使在同一子网,多个私有ip也能公用一个公网ip

公网ip和私有ip

私有ip在各个不同的局域网是可以重复的。

路由选择:
目的IP,route 观察本主机路由表,和各个子网掩码分别按位与,查找是否有匹配的目的ip的网络号,假如有,那就找到下一跳,假如没有转发给默认路由。默认路由在路由表匹配到了转发给下一跳路由器,路由器匹配到了而且发现是自己局域网主机,将IP数据报经过交换机转发至目标主机。

以太网协议

MAC地址

MAC地址用来识别数据链路层中相连的节点;
长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址。
ip,找到整个旅程的路径。mac,整个旅程中其实是一个区间到一个区间的。在路段和路段之间行走。
需要注意的是mac帧发出去之后,所有局域网的主机都可以收到,但是只有对应接收主机发现是自己的才会解包分用。

MTU以及他对IP的影响

可以看上面IP的具体分析
由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.
将较大的IP包分成多个小包, 并给每个小包打上标签;
每个小包IP协议头的 16位标识(id) 都是相同的;
每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);
到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. TCP就会进行重传,但是IP层不会负责重新传输数据

ARP协议

虽然我们在这里介绍ARP协议, 但是需要强调, ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;

ARP协议的作用

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系.
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址;

工作流程

源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网
段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自
己的硬件地址填写在应答包中
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如
果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

MAC,UDP定长报头,IP,TCP变长报头。Http,特殊字符分割。

以上是关于网络层与数据链路层的主要内容,如果未能解决你的问题,请参考以下文章

Linux网络基础--网络层与数据链路层

网络层与数据链路层

网络层与数据链路层

网络层与数据链路层

TCP_IP协议(网络层与数据链路层)笔记

(*长期更新)软考网络工程师学习笔记——数据链路层与网络层的相关计算题