图中括号中的数字代表的是当前域所占的空间大小,单位是bit位。

黄色的是数据链路层的头部,一共14字节

绿色的部分是IP头部,一般是20字节

紫色部分是TCP头部,一般是20字节

最内部的是数据包内容

黄色部分:链路层

目的MAC当前step目的主机的mac地址

源MAC当前step的源主机的mac地址

类型:指定网络层所用的协议类型,通常是IP协议,0x0800

绿色部分:网络层,这里用的是IP包头格式

版本:记录数据报属于哪一个版本的协议,如IPv4或IPv6

首部长度:指明IP头部长度,单位是字,也就是两个字节。该域的值最小为5,就是标准的头部长度;最大为15,表明有扩展部分。

服务类型:用来区分不同服务的需要

数据报总长:包含IP头部的数据报的总长度。注意,这里不包括链路层的头部,目前最大值是65535字节。

分组ID这个域的作用是当一个大的数据报被拆分时,拆分成的小的数据段的这个域都是一样的。

标记:共三个bit,第一个未使用;第二个DF(Don’t Fragment),设置成1表示这个数据包不能被分割,这个是针对路由器的一条指令;第三个MF(MoreFragment),如果一个数据包被分割了,那么除了最后一个分段以外的所有分段都必须设置为1,用来表示后面还有更多的分段没有到达,最后一个设置为0,用来表示分割的段全部到达。

段偏移量:这个域有13bit,也就是每一个数据报最多有8192个分段。每一个分段的长度必须是8字节的倍数,也就是说8字节是分段的基本单位,当然分组的最后一个段不做限制。这样最大的数据报长度为8*8192=65536字节,比目前限制的最大数据报长度还多1,能够满足对网络中所有数据报传送的需求。

生存时间:这是一个生存期计数器,最大为255s,但是实际上使用的时候用作跳数计数器,当值为0时数据报被丢弃,用来避免一个数据报过久的逗留在网络中。

高层协议:这里和链路层的类型作用相同,用来表示更高层的协议,这个数据报里是TCP

首部校验和:IP头部的校验和

源IP地址:数据报来源主机的IP地址

目的IP地址:数据报目的主机的IP地址

紫色部分:传输层,这里用的是TCP协议

源端口号:数据报来源主机的端口号

目的端口号:数据报目的主机的端口号

注意:IP地址,目的IP地址,源端口号,目的端口号这四个字段唯一的确定了一个TCP链接。

TCP序号(sq):发送的TCP的序号,从0开始,实际中这个值就是发送的数据报中内容的字节数,比如我发送的第一个报中sq=0,数据报内容20字节,那么下一个数据报的sq就应该是21。

捎带的确认(ack)确认收到上一个数据报,然后act的值是指定自己想要收到的下一个数据报的sq,比如我收到一个数据报的sq=0,数据报内容20字节,那么我的ack就应该是21,用来标明我sq=0,内容为20字节的数据报已经收到,我接下来期望收到的是sq=21的数据报。

首部长度:和IP头部的长度域类似,这个域用来标明TCP头部的长度,单位也是字。

保留:6bit未使用的域

Flag从左到右,[URG|ACK|PSH|RST|SYN|FIN]

ACK 设置为1表示前面的确认(ack)是有效的,否则前面的确认应被忽略。

PSH 表示要求对方在接到数据后立即请求递交给应用程序,而不是缓冲起来直到缓冲区收满为止。

RST 用于重置一个已经混乱的连接。

SYN 用于建立连接的过程。在链接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域。链接应答则捎带了一个确认,即SYN=1和ACK=1.本质上SYN位是用来表示CONNECTION REQUEST和CONNECTION ACCEPTED,然后进一步用ACK来区分是请求还是应答,的确很高明。

FIN 用来释放一个连接。它表示发送方已经没有数据要传输了。然后,在关闭一个连接后,关闭进程可能会在一段不确定的时间内继续接收到数据。SYN和FIN数据段都有TCP序号,从而保证了这两种数据段被按照正确的顺序来进行处理。

窗口大小:指定了从被确认的字节算起可以发送多少个字节。要深入理解这个域的含义,可以参看TCP用色控制和慢启动算法

http://blog.csdn.net/alexander_xfl/article/details/13170371

校验和:校验范围包括TCP头、数据报内容和概念性伪头部。概念性伪头部又包括源IP,目的IP,TCP协议号。

紧急指针:指向数据报中紧急数据最后一个字节的下一个字节。

Linux 系统应用编程——网络编程(TCP/IP 数据包格式解析)相关推荐

  1. Linux 网络编程——TCP/IP 数据包格式解析

    图中括号中的数字代表的是当前域所占的空间大小,单位是bit位. 黄色的是数据链路层的头部,一共14字节 绿色的部分是IP头部,一般是20字节 紫色部分是TCP头部,一般是20字节 最内部的是数据包内容 ...

  2. TCP/IP数据包格式详解-包括数据链路层的头部

    图中括号中的数字代表的是当前域所占的空间大小,单位是bit位. 黄色的是数据链路层的头部,一共14字节 绿色的部分是IP头部,一般是20字节 紫色部分是TCP头部,一般是20字节 最内部的是数据包内容 ...

  3. 网络技术入门 :HTTP报文和TCP/IP数据包

    本章把HTTP报文和TCP/IP数据包放在一起.是因为: 报文是一个完成的有意义的数据. 数据包可以理解为组成报文的传输单元. 应用程序的数据一般都比较大,因此TCP会按照网络包的大小对数据进行拆分. ...

  4. TCP/IP数据包结构具体解释

    [关键词] TCP IP 数据包 结构 具体解释 网络 协议 一般来说,网络编程我们仅仅须要调用一些封装好的函数或者组件就能完毕大部分的工作,可是一些特殊的情况下,就须要深入的理解 网络数据包的结构, ...

  5. ibm aix 抓包命令_在IBM AIX上模拟丢弃的TCP / IP数据包

    本文介绍: AIX内核扩展,允许来往于指定主机的指定百分比的TCP / IP数据包被随机丢弃,以模拟不利的网络状况. 加载,激活和卸载内核扩展的实用程序. C和Java™实用程序,用于监视到达目标主机 ...

  6. IP数据包格式(ICMP协议与ARP协议)

    这里写目录标题 IP数据包格式 网络层的功能 IP数据包格式 ICMP协议 ping 广播域 ARP协议(地址解析协议) 无故ARP ARP工作原理: ARP报文 查看arp缓存表(静态arp和动态a ...

  7. Linux操作系统下C语言网络编程(全文23475字,包含了Linux系统下所有网络编程的知识点,附程序代码)

    一.简介 如今网络应用随处可见,web.http.email 等这些都是网络应用程序,他们都有着基于相同的基本编程模型,有着相似的整体逻辑结构,并且还有着相同的编程接口.我们需要了解基本的客户端-服务 ...

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

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

  9. TCP/IP数据包结构分解

    一般来说,网络编程我们只需要调用一些封装好的函数或者组件就能完成大部分的工作,但是一些特殊的情况下,就需要深入的理解 网络数据包的结构,以及协议分析.如:网络监控,故障排查等-- IP包是不安全的,但 ...

最新文章

  1. Linux服务器上监控网络带宽的18个常用命令
  2. 研究生跟了一个很棒的导师,是什么神仙体验?
  3. 电脑日常故障及处理(二)
  4. VS2008常见编译错误(总结篇)
  5. @FindBy、@FindBys、@FindAll的区别
  6. 深圳大学计算机科学专业排名,深圳大学专业排名及介绍 哪些专业最好
  7. 【BZOJ3576】江南乐,博弈
  8. Spring @Async 注解
  9. 不以跬步无以致千里——Day1
  10. CMFCPropertyGridCtrl 的简单教程
  11. 我的十年创作之路(三)——书稿创作经验谈
  12. *第六周*数据结构实践项目一【建立顺序栈算法库】
  13. 摘抄:敏捷测试自动化策略
  14. 漂亮的thinkphp 跳转页封装
  15. 宝塔站点配置SSL证书
  16. 分数阶微积分学薛定宇电子版_薛定宇
  17. MySQL: Incorrect string value: '\xF0\xA4\xBD\x82'分析解决
  18. 七年级计算机上册知识题,Word综合应用复习七年级信息技术上册教案
  19. java操作word文档(文字,图片,表格添加以及替换操作)
  20. [附源码]java毕业设计网络身份认证技术及方法

热门文章

  1. 艾伟:ASP.NET跨页面传值技巧总结
  2. AspNetCms 国内×××聚
  3. leetcode617. 合并二叉树(dfs)
  4. 函数式编程基础_在收件箱中免费学习函数式编程的基础
  5. NOIP201202寻宝
  6. 进程间通信 (IPC) 方法总结(三)
  7. webpack入门——构建简易版vue-cli
  8. oracle 的使用
  9. kindeditor简单使用
  10. python + pyqt5 UI和信号槽分离方法