目录
TCP:提供数据传输的可靠性策略(丢包重传,流量控制,拥塞控制,滑动窗口等等)
IP:提供数据传输的能力,让数据可以从主机A经过网络传输到主机B。IP协议在进行通信时,先将数据交付给下一跳主机(发送数据的主机A一定和下一跳网络处于同一网络段,一定是局域网通信)
TCP的机制保证了IP传输数据的可靠性。
以太网MAC协议:负责局域网通信细节
不同的局域网,他们使用的通信细节不同(以太网,令牌环网等)。
1. 以太网(基于碰撞区与碰撞检测的局域网通信标准)
- 以太网并不是具体的网络,而是技术标准,既包含数据链路层部分也包含物理层部分(网络拓扑结构,访问控制,传输速率等)
数据在以太网中的传输过程为:
在主机A向主机B传递报文时,局域网上所有的主机底层都可以收到报文数据,只不过只有主机B对报文进行了解析,其他主机直接丢弃了报文。
实际局域网通信过程中不仅仅只有主机A与主机B通信,局域网上所有主机都有可能互相通信
局域网特性要求任何时候只能一台机器发送信号,A与B发信息时可能此时D向C发信息,这时就形成了局域网碰撞现象。
如果网络中的数据发生碰撞,主机可以检测到。(主机A发送信息与接受的信息不同,说明发生了碰撞)
当发生碰撞时,所有的主机进行碰撞避免算法,来避免碰撞。
注意:局域网发生碰撞的概率很低,网络通信速度与计算机处理速度很快。
当前计算机中,每一台计算机上都至少有一张网卡,而每一张网卡都内置了48位序列号(MAC地址),这个序列号是全球唯一的。(MAC地址用来识别数据链路层中相连的节点)
局域网发送的数据称为MAC数据帧
数据帧上有dst MAC地址,当MAC数据帧在局域网上传输时,每一台主机与dst MAC地址对比,如果匹配上,则处理数据。匹配不上则丢弃数据。
注意:
如果dst MAC地址设置为全F,这个数据帧所有主机都会处理,称为广播发送信息
总结:以太网通信可以使用“多线程的临界资源”视角来看,局域网相当于临界资源,任何主机都可以向网络中发送数据,局域网的主机共享局域网,但同一时刻,局域网的主机只有一台可以发送数据。
2. 以太网的帧格式(MAC帧)
- 报头与有效载荷分离:
MAC帧采用定长报头,报头大小为6+6+2=14字节。通过定长报头实现分离。
- MAC帧将有效载荷交付上层
MAC帧报文中有2字节的类型字段。
如果是0800,是IP协议数据报
0806是ARP协议数据报
8035是RARP协议的数据报
根据类型字段决定将有效载荷交付上层的某个协议。
CRC校验
校验数据的规则,这里不提。
目的地址与源地址
目的地址与源地址:局域网通信双方网卡的硬件地址(MAC地址)。
MAC地址,IP地址的区分
MAC地址:可以看作是计算机的身份证。(人的身份证)
IP地址:可以看作是计算机所在的位置信息。(人的居住地址)
IP地址可以发生改变,MAC地址不能改变。
在实际通信过程中,报文的目的IP地址是不改变的,用来支持路由规则。而报文中的源MAC地址目的MAC地址一定在通信过程中会改变,因为上一跳主机和下一跳主机是在不断变化的。
MTU
- IP层交付给下层数据超过MTU数量的限制,会在IP层分批发送数据。封装成多条MAC帧发送,对端IP层进行组装.
- 以太网数据长度规定最小46字节,最大1500字节。数据不足46字节,需要补充随机数据到46字节。大于1500字节IP层会分片发送
- 最大值1500字节称为MTU,不同的网络MTU不同
MTU对IP协议的影响
由于数据链路层的MTU的限制,对于较大数据的IP协议需要分包
- 较大的IP数据包分成小包,并给每个小包打上标签
- 每个小包IP协议报头16位标识符都是相同的
- 每个小包IP协议的3位标识字段,第二位为0表示允许分片,第三位表示更多分片,如果分片,每片报文第三位设置为1代表后序还有分片,整个报文的最后一片这个字段设置为0,代表最后一片。(不分片的报文这一位设置为0),第一位保留
- 任意一个小包丢失,接受端重组就会失败,这时靠TCP的重传机制重传。UDP则报文丢包
MTU对TCP/UDP协议的影响
UDP:
- 如果UDP携带数据超过1472字节(1500-20(IP报头)-8(UDP头部)),IP层会发生分片发送情况,使丢包的概率增大。
- 如果IP层分片发送数据,任何一片丢失这次通信就算失败,UDP没有任何确保可靠性措施。
TCP:
- TCP报文的最大长度受限于MTU,TCP单个报文的最大消息长度称为MSS。
- TCP进行三次握手时,双方会对MSS协商,减少分片
- 如果分片丢失,TCP会执行丢包重传。
- MSS的值可以在TCP报头的选项中加长
3.ARP协议(局域网协议,MAC帧上层)
ARP协议:介于数据链路层和网络层之间的协议。
ARP协议:建立主机IP地址与MAC地址之间的映射。根据目的IP地址获取目的MAC地址,让下一跳能够准确到达目的IP对应的主机
- 硬件类型为数据链路层的网络类型,一般为1代表以太网。
- 协议类型:指要转化的地址类型,0x0800为IP地址。
- 硬件地址长度:MAC帧对应长度,以太网中一般为6字节。
- 协议地址长度:需要转化协议的长度,如果是IP协议转化为MAC帧协议,字段为IP长度4字节。
- op字段:op为1代表ARP请求报文,op为2代表ARP应答报文
- 6位目的地址与6位源地址,2位类型是MAC帧协议报头。
ARP协议通信过程
ARP请求过程:
-
局域网都可以收到这个报文(但不一定处理)。
-
因为MAC识别到帧类型是0806,代表是ARP协议,局域网所有主机都会将收到的这个报文交给上层的ARP协议。(每个主机都会处理这个报文)
-
每个主机都拿到
域网中每台主机先看op字段,判断是ARP请求还是响应,之后每台主机会对比目的IP字段和自己主机IP。如果对不上,则将报文丢弃,正确匹配后主机保留报文。 -
接受到报文后,主机B知道了发送方的MAC地址(MACA)。继续处理报文
主机B会填充自己的ARP响应:
将ARP应答报文返回给主机A。
- 到达主机A的局域网后,所有主机MAC帧识别到目的以太网地址不是FFFFFF,而是MACA。除了主机A其他主机在MAC帧层直接把数据丢弃。
- 主机A通过提取ARP应答报文中的,发送端以太网字段和发送端IP地址,来保存对端的MAC地址和IP地址。
综上,ARP请求到对端局域网以广播的形式将报文交付给接受端。而ARP响应回发送端时不是广播形式,因为目的以太网地址确认,非指定MAC地址的主机直接将报文丢弃。
- 虽然上图的MAC层报文有两个目的MAC地址和源MAC地址,但并不冗余,因为这两个地址是给两个协议看的。
- ARP层收到ARP报文时首先要看op字段,判断报文是ARP响应还是请求。因为任何一台主机都可能收到ARP应答,或发起ARP请求。如果op是1代表对端请求本机的MAC地址,如果op是2代表这个主机之前问过对端主机的MAC地址,并且这个报文就是对端主机的应答
- 因为在局域网A主机向B主机进行通信,需要知道B主机的MAC地址(只有知道目的MAC地址,才可以封装MAC帧,才可以在局域网中通信),而主机A只知道主机B的IP地址,所以需要ARP协议将主机B的IP协议转化位主机B的MAC地址。
- 虽然MAC帧中的目的MAC地址可以写成FFFFFF,这样进行局域网的通信。但实际上,主机A向主机B通信,其他主机不应该参与这个报文处理过程,应该直接丢弃,浪费系统资源。其次要区分广播和单向数据传输的界限,否则要真正使用广播时可能回导致歧义。