> 文章列表 > 【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

  1. IP协议格式和字段含义

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议
  • 4位版本:IPv4或者Ipv6(他们两个不兼容);

  • 4位首部长度:报头=首部长度*4;

  • 8位服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0); 4位 TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个;

  • 16位总长度:报文(固长)+有效载荷;封装和解包;

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

  • 8位协议:TCP或者UDP,采用不同的编号;

  • 16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏;

  • 32位源IP地址:发送端的IP地址;

  • 32位目的IP地址:接收端的IP地址;

2.分包(分包是少数情况)

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

Q:为什么会有分包?

A:因为数据链路层的有效载荷很小,只有1500;

  • 16位标识:如果属于一个TCP报文被分包就会是相同的16位标识,不被分包的也自己的16位标识;(对端排序标识,达到按序到达);

  • 3位标志:1位表示是否被分包,1位表示是否是被分包的最后一个IP报文,1位保留;

  • 13片偏移:被分包的每个包的最小的下标,对端的网络层在拼接为一个完整的TCP报文,在向上交付;缺点:如果被分包的一个部分被丢包,那么对端的网络层拼接不上,则整个被分包的报文都会被网络层丢弃;

一个IP报文有20报头,数据链路层1500-20=1480;每次只能传1480个字节数据;

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

Q:如何判断有无丢包?

A:可以分成前中后三部分,如果13位片偏移是0就是前部分,中部分就是前面的累加字节数,后部分看3位标志中的1位表示是否是被分包的最后一个IP报文;

3.网段划分

  1. IPv4网络通信总共有2^32IP地址,大概42亿多;

  1. IP可以分为ABCDE5类,A类是2^32的一半,B类又是A类的一半,C类是B类的一半,依次类推;

  1. A类就有2^7个,也就是2^网络号,把A类的所有IP分为2^7份;网络号可以区分国家比如:1是中国、2是美国,这是例子不一定是这个映射;

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

各类的具体IP数值:

  • 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

3.1.子网掩码

A类有2^24对于一个县太多了,应该划分的更小保证不浪费且更便于管理;

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

网络号

140.252.20.64

子网掩码

255.255.255.240

子网地址范围

140.252.20.64~140.252.20.79

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

4.数据链路层

4.1.MAC帧协议

  1. 用于物理层传输用;

  • 6位源地址和6位目的地址:48个比特位,每个都是唯一的电脑出厂自带在网卡上

  • 类型帧协议类型字段有三种值,分别对应IP(传数据)、ARP/RARP(获取MAC地址),向上交付的不同;

  • 4位CRC:校验,传输可能导致比特翻转;

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

4.1.1.MTU

  • 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充 位;

  • 最大值1500称为以太网的最大传输单元 (MTU),不同的网络类型有不同的MTU;

  • MSS=MAC帧报头+MTU

  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,然后双方得知对方的MSS值之后, 选择较小的作为最终MSS,MSS的值就是在TCP首部的40字节变长选项中(kind=2)

4.2.ARP协议

  1. ARP协议和MAC帧协议都属于数据链路层协议

  1. APR协议用于IP地址换MAC地址,MAC帧协议用于局域网中传输;

两个协议在数据链路层的位置:两个协议是上下层关系

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

ARP协议的格式

  • 硬件类型指链路层网络类型,1为以太网; 协议类型指要转换的地址类型,0x0800为IP地址; 硬件地址长度对于以太网地址为6字节; 协议地址长度对于和IP地址为4字节;

  • op字段1表示ARP请求,2表示ARP应答;

  • 以太网地址就是MAC地址

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

ARP协议原理:

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

5.其他的协议和技术

5.1.DNS技术

  1. 用来把域名转化为IP地址;

域名简介:

www.qq.com

  • .com:一级域名:表示这是一个企业域名. 同级的还有 "net"(网络提供商), "org"(非盈利组织)等

  • qq:二级域名,公司名

  • www.:只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格 式, 来表示主机支持的协议

5.2.一个问题,ping命令有端口号吗?

A:没有,ping是基于ICMP协议的一个命令,icmp是是一个网络层协议

5.3.代理服务器

5.3.1.正向代理:靠近客户端

收集请求,再由代理代理服务器来发送请求,校园网就是这样设计的,好处:

  1. 身份识别:只有身份正确的才能使用,外来人就不能免费使用

  1. 加速访问:被多次访问的资源可以缓存下来

  1. 识别请求:把客户端一些不安全的请求直接丢弃

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议

5.3.2.反向代理:靠近服务器端

负载均衡:把大量的请求分别给各个server,让每台服务器都得到好的利用

【Linux 网络编程5】网络/数据链路层--IP协议,MAC帧协议和ARP协议