TCP/IP数据包结构详解

温故知新:IP头部 总是注重于应用层协议~冷不丁突然提起网络层、传输层的概念细节~真想不起了~嗯~温故知新吧~复习啦:(照例,网上转载的啦)1、IP报文格式    IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务,也即依赖其他层的协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送。而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送 阅读详情

 转自:    http://blog.youkuaiyun.com/prsniper/article/details/6762145 


TCP IP 数据包 结构 详解 网络 协议

一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解

网络数据包的结构,以及协议分析。如:网络监控,故障排查等……

 

IP包是不安全的,但是它是互联网的基础,在各方面都有广泛的应用。由IP协议衍生的协议族有10数种(据我所知),以后还会出现

更多的基于IP的协议…

 

先从实际出发吧!

一般我们在谈上网速度的时候,专业上用带宽来描述,其实无论说网速或者带宽都是不准确的,呵呵。比如:1兆,512K……

有些在学校的学生,也许会有疑问,明明我的业务是1M,为什么下载速度到100K就飙不上去了?512K的为什么50多K就封顶了?…

 

这里所说的1M是指1Mbps = 1 Million Bits Per Second,也就是1M比特每秒,即一秒钟传输1048576个二进制位。我们知道一个字节

是8个二进制位。

好,又来问题了。即便这样子,1M=1048756÷8=131072÷1024=128K。那也应该有128K啊,为什么下载速度还是很少到120K,

110K都谢天谢地了。看完本文,你的帐就对了……

 

IP数据包结构:

如图,一个刻度表示1个二进制位(比特)。

1-1.版本4位,表示版本号,目前最广泛的是4=B1000,即常说的IPv4;相信IPv6以后会广泛应用,它能给世界上每个纽扣都分配

       一个IP地址。

1-2.头长4位,数据包头部长度。它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

1-3.服务类型,包括8个二进制位,每个位的意义如下:

       过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)

       延迟字段:1位,取值:0(正常)、1(期特低的延迟)

       流量字段:1位,取值:0(正常)、1(期特高的流量)

       可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)

       成本字段:1位,取值:0(正常)、1(期特最小成本)

       保留字段:1位 ,未使用

1-4.包裹总长16位,当前数据包的总长度,单位是字节。当然最大只能是65535,及64KB。

2-1.重组标识16位,发送主机赋予的标识,以便接收方进行分片重组。

2-2.标志3位,他们各自的意义如下:

       保留段位(2):1位,未使用

       不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)

       更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)

2-3.段偏移量13位,与更多段位组合,帮助接收方组合分段的报文,以字节为单位。

3-1.生存时间8位,经常ping命令看到的TTL(Time To Live)就是这个,每经过一个路由器,该值就减一,到零丢弃。

3-2.协议代码8位,表明使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17等。

3-3.头检验和16位,是IPv4数据包头部的校验和。

4-1.源始地址,32位4字节,我们常看到的IP是将每个字节用点(.)分开,如此而已。

5-1.目的地址,32位,同上。

6-1.可选选项,主要是给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉,普联(TP_LINK)的TL-ER5110路由就能这么做。

7-1.用户数据。

TCP数据包结构:

1-1.源始端口16位,范围当然是0-65535啦。

1-2.目的端口,同上。

2-1.数据序号32位,TCP为发送的每个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。

3-1.确认序号32位,为了安全,TCP告诉接受者希望他下次接到数据包的第一个字节的序号。

4-1.偏移4位,类似IP,表明数据距包头有多少个32位。

4-2.保留6位,未使用,应置零。

4-3.紧急比特URG—当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

4-3.确认比特ACK—只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。参考TCP三次握手

4-4.复位比特RST(Reset) —当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新

       建立运输连接。参考TCP三次握手

4-5.同步比特SYN—同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。参考TCP三次握手

4-6.终止比特FIN(FINal)—用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

4-7.窗口字段16位,窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口

       大小,然后通知对方以确定对方的发送窗口的上限。

5-1.包校验和16位,包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

5-2.紧急指针16位,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

6-1.可选选项24位,类似IP,是可选选项。

6-2.填充8位,使选项凑足32位。

7-1.用户数据……

 

可以看出,每个IP包至少要20字节的头部长度,这些与下载内容无关,加上目前多数传输,包括http协议(就是IE直接下载),都是基于

TCP协议的,所以IP包裹还要从用户数据中扣除20字节的TCP包头,这里已经是40字节,加上其他程序的连接,状态确认等等包裹,因

而算出来要比理论值要小。

另外网络环境(包括稳定因素和传输节点的转发率)也是影响下载速度的重要原因……

TCP协议包头入门 TCP协议数据包头部结构 下面我通过一抓取一个redis请求的数据包来说明: TCP固定头示意: 16进制 10进制 头部信息 备注 0xcd8e 52622 16位源端口号 0x18ed 6379 16位目的端口号 0x3210 6019 32位序号 0x0000 0000 32位确认号 这里因为是syn包,所以为0 0xb 11 4位头部长度(32b... 阅读详情

相关推荐

TCPIP数据包结构详解

TCPIP数据包结构详解 TCP IP 数据包 结构 详解 网络 协议

传输层---TCP协议

传输层协议:对应于OSI参考模型的传输层,为实用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报议(UDP)。

weixin_52814257的博客 1665

PLC模拟量输入电路设计:±10V与±20mA信号调理全解析

在工业自动化和数据采集系统中,模拟量输入是连接物理世界与数字控制的核心桥梁。无论是变送器输出的4-20mA电流环,还是伺服驱动与信号发生器提供的±10V电压信号,PLC和采集模块都需要在复杂现场环境下稳定、精准地完成信号采集。理解信号体制的原理——电流环抗长线干扰、电压环响应快——是设计模拟输入前端的基础。通过精密电阻网络实现分压与采样,利用运放完成双极性到单极性的电平搬移,配合TVS与滤波电路保障可靠性,并经过ADC量化与校准流程,最终构建出兼顾精度、成本和工业级鲁棒性的完整信号链路。本文面向硬件工程师与

weixin_29163797的博客 301

TCP 包头详解

TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP...

weixin_34380296的博客 1589

数字逻辑设计大程——以撒的结合(Verilog语言)

前言 在大二学习数字逻辑设计课程(即计算机组成课程的前引课)时,期末大程题目我和同组的github成员lwaekfjlk 决定写一款基于Verilog语言的游戏。原型是我们两人都非常喜爱的一款游戏——The Binding of Isaac: Rebirth。在三天三夜的奋战后,基本完成了预期目标。由于亲自编写了其中种种,我们深知新手初期使用Verilog语言有多困难。而可悲的是,这又是之后计算机组成课程和体系结构课程所需的!因此,我们将top部分源码放在这里,供同袍们参考。若想引用还请注明出处。 代码部分

LuvLucifer的博客 1386

Win10家庭版如何添加本地用户和组

在众多Windows版本中,Windows 10以其丰富的功能和卓越的性能吸引了大量用户。然而,对于使用Win10家庭版的用户来说,他们可能会遇到一些功能上的限制,特别是在用户和组管理方面。虽然家庭版在某些高级功能上有所缩减,但我们仍然可以通过一些技巧来实现对本地用户和组的管理。本文将详细介绍如何在Win10家庭版中添加本地用户和组,以便用户能够更好地管理计算机资源。

nntxthml的博客 4558

TCP/IP数据包结构详解细化

一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解网络数据包的结构,以及协议分析。如:网络监控,故障排查等。IP包是不安全的,但是它是互联网的基础,在各方面都有广泛的应用。由IP协议衍生的协议族有10数种(据我所知),以后还会出现更多的基于IP的。先从实际出发吧!一般我们在谈上网速度的时候,专业上用带宽来描述,其实无论说网速或者带宽都是不准确的,呵呵。比如:1兆,512K……

yongchengping的博客 1391

Android 跨进程通信-(一)Binder概念引入

前言 主要对Android中的跨进程通信进行总结下,这篇先梳理下里面的涉及的一些概念 一 多进程 1.进程与线程 进程:系统中正在运行的一个应用程序,某个程序一旦运行就是一个进程,是资源分配的最小单位; 线程:程序执行的最小单位,包含在进程中,一个进程可以包含多个线程。 2.Android应用中的多进程 (1)dalivk虚拟机 Android系统的底层任务管理以及驱动都是基于Linux系统。一个Android系统其实就是一个Linux系统,通过adb shell进入连接的手机,就可以看到Li

nihaomabmt的专栏 1104
上一篇: sizeof
下一篇: c_str string 转换成char
Dark_Passion
博客等级 码龄17年 14粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值