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



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

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

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

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

最内部的是数据包内容


黄色部分:链路层

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

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

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


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

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

首部长度:指明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=1ACK=0表示该数据段没有使用捎带的确认域。链接应答则捎带了一个确认,即SYN=1ACK=1.本质上SYN位是用来表示CONNECTION REQUESTCONNECTION ACCEPTED,然后进一步用ACK来区分是请求还是应答,的确很高明。

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mongodb防火墙配置

http://ruby-china.org/topics/20128 https://docs.mongodb.com/manual/tutorial/configure-linux-iptables-firewall/转载于:https://www.cnblogs.com/diyunpeng/p/6256928.html

【python】动态调用函数名

环境: C:\Users\DELL\Desktop>python -V Python 3.9.10 源码: #!/bin/env python # encoding utf-8 import sys import socket# 获取本机ip地址 def get_host_ip():try:s socket.socket(socket.AF_INET, socket.SOCK_DGRAM)s.connect((8.8.8.8, …

AC Again hdoj 1582 搜索

AC Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 306 Accepted Submission(s): 84 Description “AC”这个单词大概是我们 ACMers 最希望听到的回答了。不过如果把它写下来,你还能认识吗&am…

Linux 系统应用编程——网络编程(利用TCP/IP 模型分析数据传输过程)

TCP/IP参考模型是一个非常基础,而且也非常重要的基础框架,要想入门数通这是个必须掌握的基本概念,本文档通过一个简单的示例,结合参考模型来分析一下数通的基本过程。网络环境非常简单,如下图所示,我们现在…

Python SQLAlchemy --3

本文為 Python SQLAlchemy ORM 一系列教學文: 刪除 學會如何查詢之後,就能夠進行後續的刪除、更新等操作。 同樣地,以幾個範例做為學習的捷徑。 123456789 user_1 User(user1, username1, password_1)user_2 User(user2, username2, passw…

C#DateTime.ToString格式化时间字符串

DateTime.ToString(string format) 中 format 参数(区分大小写): 参数 含义 d 月中的某一天。一位数的日期没有前导零。 dd 月中的某一天。一位数的日期有一个前导零。 ddd 周中某天的缩写名称,在 AbbreviatedDayNam…

Wordpress中显示页面当前位置

Wordpress中显示页面当前位置 在浏览网站的时候,很多网站都提供了页面定位的功能,一般在文章的上方以这样的形式显示: 首页 >> 分类 >> 子分类 >> „ >> 阅读正文 那如何在wordpress中实现这样一个功能呢&#xff1…

CentOS8下 nginx+php7.4安装pdo_sqlsrv 连接 SQL SERVER2012数据库

参考自:https://blog.csdn.net/lwprain/article/details/109598560 关键步骤是一二三,结合 pecl install 正常安装(先安装dnf install unixODBC-devel)即可搞定 ------------------------------------------------------------------------------------…

ArcGIS Engine 编辑- ITask

转自原文ArcGIS Engine 编辑- ITask 下面的代码是我们定制的一个工作流-给等高线赋值 namespace EngineApplication { [Guid("5b0c0692-eaf7-4d64-9cee-c8c1afaf06f4")] [ClassInterface(ClassInterfaceType.None)] [ProgId("EditeTest.ContourTask")] pu…

Linux 系统应用编程——网络编程(TCP 协议三次握手过程)

TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示: SYN ( synchronous 建立联机 ) ACK ( acknowledgement 确认 ) PSH ( push 传送…

知识管理在客户关系管理中的应用领域

CRM中的知识获取 CRM前端业务系统(包括销售管理、营销管理、客户服务三个模块)为与客户互动、获取客户知识提供了各种途径,如销售自动化系统、电子商务网站、呼叫中心、网络社区、博客等等,另外,企业还直接从外部环境、…

基于ELK的简单数据分析

原文链接: http://www.open-open.com/lib/view/open1455673846058.html 环境 CentOS 6.5 64位JDK 1.8.0_20Elasticsearch 1.7.3LogStash 1.5.6Kibana 4.1.4介绍 ElasticSearch是有名的开源搜索引擎,现在很多公司使用ELK技术栈做日志分析,比如…

Linux 系统应用编程——网络编程(高级篇)

一、网络超时检测 在网络通信过程中,经常会出现不可预知的各种情况。例如网络线路突发故障、通信一方异常结束等。一旦出现上述情况,很可能长时间都不会收到数据,而且无法判断是没有数据还是数据无法到达。如果使用的是TCP协议,可…

[win10] 在桌面上显示计算机、控制面板、网络

1. 右击桌面,选择个性化 2. 选择”主题", 点击“桌面图标设置” 3. 把想要放桌面的图标给钩上

linux下共享文件夹(windows可访问,linux也可访问)

2019独角兽企业重金招聘Python工程师标准>>> 本文是转字网上的两段,如果是菜鸟,想懂有点难度,我这里给点注释 在linux上共享文件夹windows下看 ******************************************* 首先给linux设一个ip,要和…

用nginx做了一下反向代理,得到的ip地址都是127.0.0.1

nginx反向代理配置时,一般会添加下面的配置: proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; loc…

【windows】 设置开机启动程序

开始 -> 运行,输入:shell:startup 将要启动的“快捷方式”放入此目录下。重启生效!

ssh时,密码输入框(密码输入提示)很晚才出现的解决方法

新配置了一台server(centos6.2),发现从windows使用putty登录时,在输入用户名后总是很慢才提示输入密码[rootFDFS-1 ~]# ssh -V OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010发现ssh的版本较高了使用另一台linux服务器连接&…

Linux time()函数解析

time() 函数语法如下&#xff1a; 所需头文件#include <time.h>函数原型time_t time(time_t * timer)参数说明timerNULL时得到机器日历时间&#xff1b; timer时间数值时&#xff0c;用于设置日历时间&#xff1b;函数返回值机器日历时间 功能: 获取当前的系统时间&#…

开源|LightGBM:三天内收获GitHub 1000+ 星

原创 2017-01-05 LightGBM 微软研究院AI头条【导读】不久前微软DMTK(分布式机器学习工具包)团队在GitHub上开源了性能超越其他boosting工具的LightGBM&#xff0c;在三天之内GitHub上被star了1000次&#xff0c;fork了200次。知乎上有近千人关注“如何看待微软开源的LightGBM&a…