以太网数据包、IP包、TCP/UDP 包的结构(转)
源:以太网数据包、IP包、TCP/UDP 包的结构
版本号(Version):长度4比特。标识目前采用的IP协议的版本号。一般的值为0100(IPv4),0110(IPv6)。
IP包头长度(Header Length):长度4比特。这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。该部分占4个bit位,单位为32bit(4个字节),即本区域值 = IP头部长度(单位为bit)/ (8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节。IP包头最小长度为20字节。
服务类型(Type of Service):长度8比特。8位 按位被如下定义 PPP DTRC0
PPP:定义包的优先级,取值越大数据越重要
000 普通 (Routine)
001 优先的 (Priority)
010 立即的发送 (Immediate)
011 闪电式的 (Flash)
100 比闪电还闪电式的 (Flash Override)
101 CRI/TIC/ECP(找不到这个词的翻译)
110 网间控制 (Internetwork Control)
111 网络控制 (Network Control)
D 时延: 0:普通 1:延迟尽量小
T 吞吐量: 0:普通 1:流量尽量大
R 可靠性: 0:普通 1:可靠性尽量大
M 传输成本: 0:普通 1:成本尽量小 0
最后一位被保留,恒定为0
IP包总长(Total Length):长度16比特。 以字节为单位计算的IP包的长度 (包括头部和数据),所以IP包最大长度65535字节。
标识符(Identifier):长度16比特。该字段和Flags和Fragment Offest字段联合使用,对较大的上层数据包进行分段(fragment)操作。路由器将一个包拆分后,所有拆分开的小包被标记相同的值,以便目的端设备能够区分哪个包属于被拆分开的包的一部分。
标记(Flags):长度3比特。该字段第一位不使用。第二位是DF(Don't Fragment)位,DF位设为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分段,则路由器会在除了最后一个分段的IP包的包头中将MF位设为1。
片偏移(Fragment Offset):长度13比特。表示该IP包在该组分片包中位置,接收端靠此来组装还原IP包。
生存时间(TTL):长度8比特。当IP包进行传送时,先会对该字段赋予某个特定的值。当IP包经过每一个沿途的路由器的时候,每个沿途的路由器会将IP包的TTL值减少1。如果TTL减少为0,则该IP包会被丢弃。这个字段可以防止由于路由环路而导致IP包在网络中不停被转发。
协议(Protocol):长度8比特。标识了上层所使用的协议。
以下是比较常用的协议号:
1 ICMP
2 IGMP
6 TCP
17 UDP
88 IGRP
89 OSPF
头部校验(Header Checksum):长度16位。用来做IP头部的正确性检测,但不包含数据部分。因为每个路由器要改变TTL的值,所以路由器会为每个通过的数据包重新计算这个值。
起源和目标地址(Source and Destination Addresses):这两个地段都是32比特。标识了这个IP包的起源和目标地址。要注意除非使用NAT,否则整个传输的过程中,这两个地址不会改变。
至此,IP包头基本的20字节已介绍完毕,此后部分属于可选项,不是必须的部分。
可选项(Options):这是一个可变长的字段。该字段属于可选项,主要用于测试,由起源设备根据需要改写。
可选项目包含以下内容:
松散源路由(Loose source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,但是允许在相继的两个IP地址之间跳过多个路由器。
严格源路由(Strict source routing):给出一连串路由器接口的IP地址。IP包必须沿着这些IP地址传送,如果下一跳不在IP地址表中则表示发生错误。
路由记录(Record route):当IP包离开每个路由器的时候记录路由器的出站接口的IP地址。
时间戳(Timestamps):当IP包离开每个路由器的时候记录时间。
填充(Padding):因为IP包头长度(Header Length)部分的单位为32bit,所以IP包头的长度必须为32bit的整数倍。因此,在可选项后面,IP协议会填充若干个0,以达到32bit的整数倍。
以太网数据包如下表结构所示:
目地地址(6B) 原地址
(6B) 类型
(2B) 数据
(46~1500B) 校验和
(4B)
IP数据包结构如下页表:
版本号(4位) 头长度(4位) 服务类型TOS(8位) 总长度(16位)
标示(16位) 标志(3位) 头偏移(13位)
生存时间TTL(8位) 上层协议标示(8位) 头部校验和(16位)
源IP地址(32位)
目的IP地址(32位)
选项
数据
TCP抱文结构如下表:
TCP源端口号(16位) TCP目的端口号(16位)
系列号(32位)
确认号(32位)
首部长度(4位) 保留位(6位) URG ACK PSH RST SYN F
IN 窗口大小(16位) 检验和(16位) 紧急指针(16位)
选项+填充
数据区
UDP抱文结构如下表:
UDP源端口号(16位) UDP目标端口号(16位)
UDP长度(16位) UDP校验和(16位)
数据区
802.3以太网帧格式:
前导码(7字节)、帧起始定界符(1字节)、目的MAC地址(6字节)、源MAC地址(6字节)、类型/长度(2字节)、数据(46~1500字节)、帧校验序列(4字节)[MAC地址可以用2-6字节来表示,原则上是这样,实际都是6字节
IP包的接收过程
http://blog.csdn.net/cxmtk/article/details/6096752
1) IP包由包头和数据区组成, 包头由IP头(iphdr)和IP选项区组成, IP头的开始4位为版本号,
下4位为包头32比特字数, 因此IP包头最大长度为64字节, 最小长度为IP头长度(20字节),
数据区起始于32位边界上. 当包头长度大于IP头长度时, 从IP头开始的区域为IP选项区.
2) IP包接收器(ip_rcv)接收帧类型为ETH_P_IP(0x0800)的包, 它首先检查包的正确性,
再将输入包过滤器进行过滤, 再将过滤包绑定到输出路由, 分析其选项区,
最后从路由目的入口输出,
根据不同的路由类型, 输入到IP转发器(ip_forward)或IP本地分发器(ip_local_deliver)以及
IP同播转发器(ip_mc_output)中.
3) 如果系统允许接收带有信源路由选项(IPOPT_LSRR或IPOPT_SSRR)的IP包, 如果是本地包,
则将包重新绑定到信源路由表第1项地址所指定的路由上, 如果该地址是本地地址,
则用它替换IP头的目的地址并分析下一信源路由地址.
转载于:https://www.cnblogs.com/LittleTiger/p/4704029.html
以太网数据包、IP包、TCP/UDP 包的结构(转)相关推荐
- java抓取路由器tcp,IP 和 TCP 抓包分析实验
IP 和 TCP 抓包分析实验 实验拓扑 图 1-1 注:如无特别说明,描述中的 R1 或 SW1 对应拓扑中设备名称末尾数字为 1 的设备, R2 或 SW2 对应拓扑中设备名称末尾数字为 2 的设 ...
- PacketSender —— TCP/UDP 包测试工具
Packet Sender 是一个开源的发送和接收TCP/UDP包得测试工具.主线分支官方支持Windows,Mac和Ubuntu桌面Linux(开源),同时提供 Android 版本(免费).网络应 ...
- IP ICMP TCP UDP 校验和
首先,IP.ICMP.UDP和TCP报文头部都有校验和字段,大小都是16bit,算法也基本一样: 在发送数据时,为了计算数据包的校验和.应该按如下步骤: (1)把校验和字段置为0: (2)把需校验的数 ...
- 七层模型?IP ,TCP/UDP, HTTP、RTSP、FTP分别在哪层?
七层模型?IP ,TCP/UDP, HTTP.RTSP.FTP分别在哪层? IP: 网络层 TCP/UDP: 传输层 HTTP.RTSP.FTP: 应用层协议
- 以太网帧,IP,TCP,UDP首部结构
其它可参考http://www.cnblogs.com/BlueTzar/articles/811160.html 1.以太网帧的格式 以太网封装格式 2.IP报头格式 IP是TCP/IP协议簇中最为 ...
- ip tcp udp mpeg4头结构的定义
IP包头结构浅析 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),IPv6的值(0110) IP包头长度(Header Length):长度4比特 ...
- [架构之路-43]:目标系统 - 系统软件 - Linux下的网络通信-3-TCP/IP协议族:IP、TCP/UDP/SCTP、Socket、应用层协议
目录 第1章 TCP/IP协议简介 1.1 简介 1.2 协议栈 1.3 IP网络 第2章 IP协议 2.1 简介 2.2 IP功能 2.4 IP V4地址 2.5 IP V6地址 2.6 IPV4地 ...
- TCP/IP和TCP,UDP
1.TCP/IP协议: 1.1 TCP/IP协议是什么: 很多人认为tcp/ip就是tcp和ip组成的通信协议.其实tcp/ip协议不仅仅指代tcp/ip,它是指一个由FTP,SMTP,TCP,UDP ...
- 【测试】发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包
目录 通过/dev/tcp./dev/udp shell给tcp或udp服务发送16进制报文指令 通过/dev/tcp./dev/udp (https://blog.csdn.net/u0100394 ...
最新文章
- 忍不了,又黑我运维攻城狮??| 每日趣闻
- caffe data层_Caffe 学习:Eltwise层
- Exchange bin先常用工具
- linux中sort不对的问题
- 浅谈c语言中的字符串
- 人工智能ai 学习_人工智能中学习代理的要素
- python信息传送管道_python – 获取返回管道输入的命令
- 解决cacti创建ping主机时不出图的问题
- 从信号转换角度研究血压(波形)预测的相关论文
- RxJS修炼之 用弹珠测试学习RxJS
- 如何通过SCJP考试(含真题分析和考点)
- 基于JSP的旅游网站系统
- 用阿里云建站模版套餐云速成美站有没有可能不容易被seo抓取排名?
- 计算机的二三事——软件篇
- IT30: IT人创业项目路演!!!
- php 统计 字数,PHP 仿 Word 统计文章字数
- 《卧底经济学》书中精髓:我们如何正确理解“稀缺”这件事儿?
- Windows Server 2012 新功能:IPAM 配置
- Altium 在PCB重新编号更新到SCH原理图的方法
- 固态硬盘为什么比机械硬盘快
热门文章
- 和平精英清明节服务器维修时间,和平精英体验服关服维护要多久 和平精英体验服什么时候开放...
- python done()什么意思_Python done
- Scanner如何接受char类型的数据
- 051_元素之间空白间隙解决方案
- 009-Joran配置框架
- java中ArrayList与LinkedList的区别
- python redis集群_Python3 redis集群连接 (带密码验证)
- python做后端速度慢吗_【后端开发】python为什么慢?
- java 微网站_java架构之路-(微服务专题)初步认识微服务与nacos初步搭建
- python大神的成长之路_Python大神成长之路: 第二次学习记录