我是靠谱客的博主 自信白开水,最近开发中收集的这篇文章主要介绍TCP/IP网络协议栈:以太网数据包结构、802.3、MTU01 概述02 TCP/IP四层模型IEEE802网络的IP数据报封装常用的以太网的封装格式(RFC894),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

《TCP/IP网络协议栈:以太网数据包结构、802.3》

《TCP/IP网络协议栈:ARP协议详解》

《TCP / IP攻击:ARP缓存中毒的基本原理、TCP序列号预测和TCP重置攻击》

目录

01 概述

02 TCP/IP四层模型

1、主机到网络层

2、网络互联层

3、传输层

4、应用层

IEEE802网络的IP数据报封装

常用的以太网的封装格式(RFC894)

MAC地址解析


01 概述


以太网这个术语一般是指数字设备公司(Digital Equipment Corp.)、英特尔公司(IntelCorp.)和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。几年后,IEEE(电子电气工程师协会)802委员会公布了一个稍有不同的标准集,其中802.3针对整个CSMA/CD网络,802.4针对令牌总线网络,802.5针对令牌环网络。

互联网早期的时候,主机间的互连使用的是NCP协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了TCP/IP协议。现在几乎所有的操作系统都实现了TCP/IP协议栈。TCP/IP不是一个单一协议,而是一个协议族的统称。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的HTTP、FHP协议等等。

首先我们看一下以太网数据结构

注意数据长度为46~1500

从物理层上看,一个完整的以太网帧有7个字段,事实上前两个字段(前同步码和SFD码)并不能算是真正的以太网数据帧,它们是网卡在物理层上发送以太网数据时添加上的,是为了实现底层的正确传输。上图中的目的地址,源地址,长度/类型属于以太网首部的部分。

特别说明:上面的目的地址和源地址是MAC,不是IP!!!!

关于OSI七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、和物理层,如下图

 

02 TCP/IP四层模型


ISO制定的OSI参考模型的过于庞大、复杂招致了许多批评。与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用。下图,是TCP/IP参考模型和OSI参考模型的对比示意图

TCP/IP参考模型分为四个层次:应用层、传输层、网络互连层和主机到网络层

在TCP/IP参考模型中,去掉了OSI参考模型中的会话层和表示层(这两层的功能被合并到应用层实现)。同时将OSI参考模型中的数据链路层和物理层合并为主机到网络层。下面,分别介绍各层的主要功能。

 

1、主机到网络层


实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。  

 

2、网络互联层


网络互联层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。

网络互联层定义了分组格式和协议,即IP协议(InternetProtocol)。

网络互联层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互联层还需要完成拥塞控制的功能。

 

3、传输层


在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmissioncontrol protocol)和用户数据报协议UDP(userdatagram protocol)。

TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。

UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。  

 

4、应用层


TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。

应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(FileTransfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(HyperText Transfer Protocol,HTTP),也有基于UDP协议的。

各行信息分别为:

  • Frame:   物理层的数据帧概况
  • Ethernet II: 数据链路层以太网帧头部信息
  • Internet Protocol Version 4: 互联网层IP包头部信息
  • Transmission ControlProtocol:  传输层T的数据段头部信息,此处是TCP
  • Hypertext Transfer Protocol:  应用层的信息,

几个常用的协议的功能我们通过一个形象的说法来展现

  • IP:I want to send data to 192.168.0.127
  • UDP:I want to send a datagram on the port N
  • TCP:I want to send data in a reliable way onthe port N (reliable:可靠的)
  • ARP:who knows 192.168.0.127's MAC address?
  • RARP:who knows 21.21.12.21.21.12's IP address?
  • ICMP:I send or receive queries or error message
  • DHCP:I want to get an IP address
  • DNS:what is the IP address of www.baidu.com?

 

IEEE802网络的IP数据报封装


在TCP/IP世界中,以太网IP数据报的封装是在RFC894中定义的,IEEE802网络的IP数据报封装是在RFC1042中定义的。最常使用的封装格式是RFC 894定义的格式。下图显示了两种不同形式的封装格式。

从上图看到,两种帧格式都采用48bit(6字节)的目的地址和源地址。

接下来的2个字节在两种帧格式中互不相同。

在802标准定义的帧格式中,长度字段是指它后续数据的字节长度,但不包括CRC检验码。

以太网的类型字段定义了后续数据的类型。而在802标准定义的帧格式中,类型字段则由后续的子网接入协议的首部给出。

幸运的是,802定义的有效长度值与以太网的有效类型值无一相同,这样,就可以对两种帧格式进行区分。

长度/类型有两个意义,小于1518,代表后面字段的长度(也就是IEEE802.2/802.3(RFC1042)),大于1518,代表不同的类型(以太网的封装格式(RFC894))

  • 0800 指IP数据类型
  • 0806 指ARP协议,通过IP地址获得对应的MAC地址,称为地址解析协议
  • 8035 指RARP协议,通过MAC地址来获得对应的IP地址,称为逆向地址解析协议

在以太网帧格式中,类型字段之后就是数据。而在802帧格式中,后面是3字节的802.2LLC,它是由目的服务访问点(DestinationService Access Point,DSAP)、源服务访问点(SourceService Access Point,SSAP)和Ctrl字段组成,DSAP和SSAP默认值是0xaa,Ctrl默认是3。再接下来的2个字节类型字段和以太网帧格式一样。

802.3标准定义的帧和以太网的帧都有最小长度要求。802.3规定数据部分必须至少为38字节,而对于以太网,则要求最少要有46字节。为了保证这一点,必须在不足的空间插入填充(pad)字节。

 

常用的以太网的封装格式(RFC894)


下面只讲最常用的以太网的封装格式(RFC894)

特别说明:上面的目的地址和源地址是MAC,不是IP!!!!

 

MAC地址解析


MAC地址前3个字节:组织身份标记  后3个字节:组织自行分配

第1个字节

  • b0:0表示单播,1表示组播
  • b1:0表示被某个组织使用,1表示个人使用

例子:

02-00-00-00-00-01:本地分配

00-50-C2-xx-xx-xx:ST的MAC地址

01-00-5E-xx-xx-xx:IPv4的多播地址

FF-FF-FF-FF-FF-FF:广播地址

上文说到,以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节。链路层的这个特性称作MTU,最大传输单元。不同类型的网络大多数都有一个上限。如果IP层有一个数据包要传,而且数据的长度比链路层的MTU还大,那么IP层就需要进行分片,把数据包分成若干片,这样每一片都小于MTU,IP分片的问题会在讲解IP协议的时候讲解。下图列出了一些典型的MTU值。

我们将用netstat命令打印出网络接口的MTU。

- i参数将打印出接口信息,- n参数则打印出IP地址,而不是主机名字。

这个命令打印出每个接口的MTU、输入分组数、输入错误、输出分组数、输出错误、冲突以及当前的输出队列长度。

 

最后

以上就是自信白开水为你收集整理的TCP/IP网络协议栈:以太网数据包结构、802.3、MTU01 概述02 TCP/IP四层模型IEEE802网络的IP数据报封装常用的以太网的封装格式(RFC894)的全部内容,希望文章能够帮你解决TCP/IP网络协议栈:以太网数据包结构、802.3、MTU01 概述02 TCP/IP四层模型IEEE802网络的IP数据报封装常用的以太网的封装格式(RFC894)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部