详解TCP/IP协议相关特性
上篇文章中我们详解了TCP/IP协议中的传输层协议详解TCP协议,这篇文章我们来看看TCP/IP协议中的网络层协议IP协议和数据链路层的重点协议。
一、IP协议
首部字段含义:
-
4位版本号:表示IP协议的版本,目前主流使用IPv4和IPv6,本文主要说明IPv4。
-
4位头部长度:IP协议首部长度,单位32bit(4字节),此字段也指示了IP数据包的起始位置,最小值5,最大值15,因此IP头部长度是20~60字节。
-
8位服务类型(Type Of Services):用于指定IP数据报传输的等级、重要性、时延等特性。
-
16位总长度:IP数据报总长度,包括首部+数据,单位:字节,最大表示:65535。那么IP协议是否也像UDP协议那样存在数据长度限制的问题呢?答案是否定的,实际上,IP协议内置了分包组包的功能,如果一个数据太长了,IP协议就会自动的拆成多个数据报,然后进行传输,然后接收方会重新进行组包。
-
16位标识:唯一的标识主机发送的报文,如果IP报文在数据链路层被分片了,那么每一个片里面的这个id都是相同的。
-
3位标志字段:第一位保留,第二个位置为1标识禁止分片,这时候报文长度如果超过MTU,IP模板就会丢弃报文。第三位表示“更多分片”,如果分片了的话,最后一个分片置为1,其他是0,为1的话就说明报文结束了,是一个结束标志。
-
13位分片偏移:是分片相对于原始IP报文开始处的偏移。其实就是表示当前分片在原报文中处于哪个位置。是由发送方填充的字段,用于帮助组装IP数据报的分片。
-
8位生存时间(TTL):数据报到达目的地的最大报文跳数,一般是64,每次经过一个路由,TTL-=1,一直减到0还没到达,那么就丢弃了,这个字段主要用来防止路由循环。
-
8位协议类型:指的是当前的数据被接收方收到之后,分用的时候,要把载荷(payload)内容交给传输层的哪个协议。分用的时候必须保证,载荷数据内容必须和接下来的协议相匹配。
-
16位首部校验和:使用CRC进行校验,来鉴定头部是否损坏。
-
32位源IP地址和目的IP地址:表示发送端IP地址和接收端IP地址。
IP协议核心功能:
- 地址管理:能够通过一系列的规则,把网络上的设备的地址给描述出来。
- 路由选择:根据当下的源地址和目的地址,规划出一条合适的路径。
二、解决IP地址不够用的问题
当下32位的IP地址,最多能表示42亿9千万的IP地址,在现在这个移动互联网的时代,这些IP地址的数目就有些不够用了。
那么就可以通过一下的方式来解决IP地址不够用的问题。
1.动态分配IP
一个设备接入网络了,就分配IP地址,没接入网络就不分配IP地址~
2.NAT机制
使用一个IP地址,来代表一批主机。
这些设备的IP是局域网中的IP,局域网的IP就只能在局域网内部来使用,局域网内部的IP在同一个局域网内部不能重复使用,但是两个不同的局域网可以使用重复的局域网IP。此时直接连接到广域网(外网)的路由器设备就会有一个“外网IP”。
NAT机制是当下互联网中的典型情况~~
3.IPv6
IPv6是IPv4的升级版,IPv4是使用4个字节(32位)来表示IP地址,IPv6是使用16个字节(128位)来表示IP地址的。
三、数据链路层的重点协议
数据链路层是负责相邻两个节点之间的传输。
1、认识以太网
“以太网”不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,又包含了一些物理层的内容。
2、以太网帧格式
以太网帧就是将网络层交付的数据添加报头信息后,此时的数据以帧的形式传递,以太网帧的格式如下:
目的地址和源地址都指的是MAC地址,每个主机对应唯一一个MAC地址,是由网卡决定的,长度是48位,所以这里的目的地址和源地址都是6个字节,也就是48个比特位。
在以太网的最后,还有一个CRC校验码,来检验数据是否异常。
在中间有一个两个字节的类型标识。这个类型字段有三种值,分别是IP、ARP、RARP。
IP:
如果类型码是0800,那么在数据链路层解包完成后,将该数据交给网络层的IP协议来处理该报文。
ARP:
如果类型码是0806,那么向上层交付的时候就交付给ARP协议,ARP协议是处于数据链路层与网络层之间的一种协议,也叫做地址解析协议,他将IP地址转换为MAC地址。
RARP:
RARP协议,是将MAC地址转换为IP地址的协议。
3、认识MAC地址
mac地址是数据链路层的地址,长度为6个字节,表示的范围比IPv4的地址要大很多。
IP地址是动态分配的,但是mac地址是在网卡出厂时就确定了,不能修改。
3.1 总结IP地址和MAC地址
- IP地址描述的是路途总体的起点和终点,是给人使用的网络逻辑地址。
- mac地址描述的是路途上每一个区间的起点和终点,是在进行路由转发时会不断变化的地址,即每一跳的起点和终点,是给网络硬件设备使用的网络物理地址。
4、认识MTU
物理层其实是存在硬性限制的,对应的数据链路层的数据帧,是有一定大小范围的,这个范围就称为MTU,最大值1500称为以太网的最大传输单元(MTU)。
4.1 MTU对IP协议的影响
在讲到IP协议的时候,提到了IP数据报的长度受数据链路层的MTU影响。数据链路层要求在网络层传过来的数据包必须在MTU范围内,以太网帧中的数据长度必须在46字节到1500字节中。也就是说在网络层添加IP协议报头信息之前,要判断此时由传输层传输过来的数据段是否超过了1480个字节(以太网帧中包括IP协议的报头信息,IP协议的报头信息为20字节),如果超过了,那么则对该数据段进行分片,所有被分片的数据的IP报头信息当中,他们的16位标识是相同的,并且报头中信息的标志字段第二位为0,第三位如果为1,代表着报文的结束。可以看看上一篇的IP协议详解
接收端在收到这里的分片数据后,根据IP报头的16为标识信息、三位标志位、13位偏移信息量进行组装。
如果分片后的数据在接收端丢失某一片,那么就组装失败。即使组装失败,网络层也不负责重新传输,因为这是传输层要做的事情。
我们发现ARP和RARP协议他们的实际数据只有28个字节,于是在它的报文后进行补位,其中PAD就是用来填充的,使ARP、RARP协议的长度达到MTU的最小字节数。
4.2 MTU对TCP协议的影响
TCP协议在传输时也受到MTU的影响。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size)。
TCP在建立连接的过程中,通信双方会进行MSS协商,双方在发送SYN与SYN+ACK时就会在选项内对MSS进行设置,在双方都得到对方的MSS值之后,选择较小的MSS的值作为最终的MSS。
MSS的值其实就是MTU减去网络层报头长度以及传输层报头长度。
4.3 MTU对UDP协议的影响
- 一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么在网络层就会被分成多个IP数据报。
- 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。
5、ARP协议
虽然是在介绍数据链路层时介绍ARP协议,但是ARP协议不是一个单纯的数据链路层协议,而是一个介于数据链路层和网络层之间的协议。
5.1 ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系。
- 在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的MAC地址,因为MAC地址随着在到达目的主机之前经过的中间主机的变化而变化,但是目的IP地址是一直知道且不变的,所以需要通过ARP协议来获得目的主机的MAC地址。
- 数据包首先是被网卡接收到再去处理上层协议的,如果接受到的数据包的MAC地址与本机的不一致,直接丢弃。
因此在通信之前必须获得目的主机的MAC地址。
主机在最初的联网阶段,就会进行一个“mac学习”的操作,就会把它和相邻的设备的ip和mac的对应关系给维护起来,内部建立一个类似于哈希表这样的结构(key:ip,value:mac)。
5.2 ARP协议的工作流程
- 进行ARP寻址时,现在本地ARP缓存表中找,若找到,直接返回MAC地址;
- 若未找到,则询问“IP地址为xxx的主机的硬件地址是多少?”,并将这个请求广播到本地网段。
- 目的主机接收到广播的ARP请求,发现其IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的MAC地址填写在应答包中。