《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、MTU相关推荐

  1. TCP/IP网络协议栈面试经典题目

    目录 面试官:看你简历说精通TCP和IP,那我们来讨论下网络模型和TCP.IP协议,讲下你的理解先 面试官:看你画的图,TCP有自己的首部结构,这都有哪些字段,最好说说它们的作用 面试官:那TCP和U ...

  2. TCP/IP网络协议栈:IP协议

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

  3. TCP/IP网络协议栈:ARP协议详解

    <TCP/IP网络协议栈:以太网数据包结构.802.3> <TCP/IP网络协议栈:ARP协议详解> <TCP / IP攻击:ARP缓存中毒的基本原理.TCP序列号预测和 ...

  4. CH395: TCP/IP网络协议栈芯片,让单片机轻松联网

    随着以太网协议栈芯片的出现,普通单片机加上以太网协议栈芯片也能与PC或者其它网络设备之间进行以太网数据传输.嵌入式TCP/IP协议栈的系统板有以太网媒介的高速数据传输接口,可用于多个节点之间的数据交互 ...

  5. TCP/IP网络协议栈在Linux内核中的如何使用丨内核开发丨驱动开发丨操作系统丨内核源码

    TCP/IP网络协议栈在Linux内核中的如何使用 视频讲解如下,点击观看: TCP/IP网络协议栈在Linux内核中的如何使用丨内核开发丨驱动开发丨操作系统丨内核源码 C/C++Linux服务器开发 ...

  6. Linux TCP/IP网络协议栈:IP协议源码分析

    目录 IP协议简介 IP头部 IP数据包的发送 IP数据包的接收 https://mp.weixin.qq.com/s/8WNcTxtD4DBcNtcrR8nz4Q IP协议 是网络的最重要部分,毫不 ...

  7. linux网络协议栈之数据包处理过程,Linux网络协议栈之数据包处理过程

    这篇文档是基于 x86 体系结构和转发 IP 分组的. 数据包在 Linux 内核链路层路径 接收分组 1 接收中断 如果网卡收到一个和自己 MAC 地址匹配或链路层广播的以太网帧,它就会产生一个中断 ...

  8. tcp/ip网络里的客户端和服务器端 信息交流 与 安全

    ISP(Internet Service Provider) 互联网服务提供商, 即向广大用户综合提供互联网接入业务.信息业务.和增值业务的电信运营商. 通过wireshark学习tcp/ip. 用w ...

  9. JAVA网络编程:TCP/IP数据包结构

    2019独角兽企业重金招聘Python工程师标准>>> 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解网络数据 ...

最新文章

  1. 【专题】“莓日一介”之(BlackBerry 7230“经典”)
  2. 采集Nginx日志的几种方式
  3. 从3000米高空,一跃而下…
  4. mfc切换office样式_干货搬运工|计算机二级office必读,裸考也能通关的宝典
  5. harmonyos吧,鸿蒙来了!华为EMUI微博正式更名HarmonyOS
  6. python 基础列表解析(十八)
  7. c语言程序输入n个数字排序,请问,C语言能人请进,用写一个程序,要求输入N个整数,按从小到大的顺序输出,就说说...
  8. jquery 图像滑块_10个很棒的jQuery图像滑块插件
  9. 23. 从上往下打印二叉树[层序遍历](C++版本)
  10. 2021-06-18 链接标签
  11. 基础算法|Java递归算法练习
  12. 高效添加origin配色盘
  13. 记一次LiteIDE因为Delve版本太低无法Debug的处理
  14. java中vo_java中的vo是什么
  15. 【VBA】VBA定时运行程序
  16. Yii Framework 开发教程(22) UI 组件 Zii组件简介
  17. 细菌(disease)解题报告 - 搜索与回朔
  18. 如何在 Win上写 Python 代码?最佳攻略来袭
  19. Tridium公司的Niagara N4 使用
  20. 软件测试自我评价范文,软件测试工程师自我评价范文

热门文章

  1. java ee 员工管理系统,fb3492 javaEE_原生Servlet_MySql企业员工信息管理系统的设计与实现,java源码含论文与答辩PPT...
  2. 【彻底搞清楚javascript中的require、import和export 】
  3. VisualSVN Server 的安装(windows版本)
  4. Mui a 链接失效的解决办法
  5. Spring Boot 你所不知道的超级知识学习路线清单
  6. 常用CSS代码片段常见css bug
  7. asp.net asp:TextBox控件绑定值后,获取不到新值问题解决方法
  8. EditText常用属性总结
  9. 【JNI知识一】--JNI接口函数与指针
  10. POJ 3667 hotel(shǎ崽大神的模板|区间合并)