TCP报文解析
概述
在《网络基础总结(一)》总结了TCP建立连接和断开连接的流程,然而TCP协议远比我所了解的复杂得多,我所知的可以说就冰山一角,所总结的也只是纸上谈兵,仅仅只能对TCP有个肤浅的认识,关于TCP协议细节可以推荐读下《TCP/IP 详解 卷1: 协议》,这篇随笔就看下TCP的报文吧。
TCP报文

我们如何区分一台电脑上的不同应用进程?就像我们区分人一样,不同的人给标识不同的名字,偶尔还会遇到重名的,在计算机上重名的现象就禁止发生的,不同的应用进程,区分它们的是不同的端口号,有人占了这个端口运行,就不允许别人使用这个端口,所以不管是UDP协议还是TCP协议中端口号都尤为重要,源端口和目的端口都必不可少的,没有他们计算机不知道把数据发给哪个应用进程。
源端口:源头,发送方计算机上的端口号。
目的端口:接收一方计算机的端口号。
序号:序号,顾名思义,序号就是编号,给每个传输的字节编个号。老大,老二,老三,这样TCP就知道了,哪个应该先来,哪个应该后到,就解决了乱序的问题,在写的第一篇随笔中,用抓包工具给大家展示的三次握手,如果大家有注意可以看到sequence Number总是为0,其实不是这样的,seq的增加是和传输的字节数相关的,抓包工具为了显示更友好,使用相对序号。
确认号:这个就更好理解了,我给你写封信(发包),发出去总要有回信吧,确认一下信收到没,如果没回,我就认为信可能某种原因,丢了(包)。那我就继续发,直到你收到为止。这就解决丢包的问题,所以我们认为TCP是靠谱协议,但对于TCP来说,他面临的网络环境是很复杂的,如果网络状况确实很差,是没有任何有效的保证的,TCP也无能为力,唯一能做的,就是努力的重传。
数据偏移:数据偏移还有个名称也叫首部长度,因为TCP首部是长度可变的,这个报文段到底多长,也就是说指出TCP数据部分在整个TCP报文段的什么位置。
接下来就是一些状态位了,在第一篇随笔中有提过,SYN发起联机,ACK回复,RST重新联机,FIN结束联机等,前文提过TCP协议是双工的,双方要维护连接的状态,这些带状态位包的发送,会引起双方状态的变化。就像现实中,人与人之间,双方不断发出不同信号,两边的关系也会不断变化,个人认为是一个道理的。
窗口:说得专业点,告知发送端这个接收端缓存有多少,控制发送端发送数据的速率,达到流量控制。其实就是通信双方都声明一个窗口,标识出自己能够处理的能力,别丫的发送太快,把接收端撑爆,也别发得太慢,浪费了处理能力。
检验和:这个就有点像我们常见的验证码了,主要是对整个TCP报文段来说,TCP首部和数据在发送端和接收端之间发生任何的改动,接收方检验有差错,这个TCP段就会被直接丢弃。
紧急指针:紧急指针,就要想起我们的标志位UGR,它要配合URG一起使用,意思就是这个紧急指针只有在URG被置位才有用。紧急,紧急,八百里加急,它的作用很明显,TCP知道你要发送紧急数据,TCP会将接下来数据发送中,所有TCP报文段URG标志置位,哪怕你报文段没有紧急数据,这个动作要持续到紧急数据被发送为止。要注意的是紧急数据并不会开辟一条新的连接通道单独发送,依然是随着普通数据一起发送。
选项部分:最长报文大小,接收方或发送方所能接受的最大报文段的长度。通常连接方都在通信的第一个报文段中指明这个选项。
填充:见名知义,选项部分如果不是32位的整数倍,要添加填充位,加入额外的零,保证TCP头是32的整数倍。
数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。
参考:https://www.cnblogs.com/feng9exe/p/8058891.html
======================================================
如发现错误,请及时留言,lz及时修改,避免误导后来者。感谢!!!
TCP报文解析的更多相关文章
- C#ModBus Tcp 报文解析
上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 读一组线圈 读取站号为1 从地址12开 ...
- TCP连接过程及报文解析
可能大家都听过TCP建立连接时需要经历三次握手和四次挥手的. 那么具体的握手挥手的过程是怎么样的呢? 这篇文章就通过WireShark抓包来了解TCP连接建立和断开的过程. 实验方法: 写一段简单的代 ...
- Tcp/ip 报文解析
在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...
- TCP协议解析
本文摘抄自:http://www.kuqin.com/shuoit/20141018/342719.html 本文描述了TCP协议,首先简单介绍了TCP完成了一些什么功能:介绍了TCP报文格式,以及典 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠 ...
- 报文解析及CRC类
/// <summary> /// 报文解析转换类 /// </summary> public class DatagramConvert { public static En ...
- 计算机网络(8)-----TCP报文段的首部格式
TCP报文段的首部格式 概述 TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节. 源端口和目标端口 各占2个字节,分别写入源端口号和目的端口号. 序列号 占4个字节,表示本报 ...
- ISO8583报文解析
在此只写了一个8583报文的拆包,组包其实也差不多的. 不多说直接上文件, 具体思路过程,在解析类里面写的有. 其中包含了四个文件 8583resp.txt报文 ISO8583medata配置文件 B ...
- TCP报文首段格式
参考:https://www.bilibili.com/video/av9876107?from=search&seid=5217429010533979778 TCP(Transmissio ...
随机推荐
- 从JavaWeb危险字符过滤浅谈ESAPI使用
事先声明:只是浅谈,我也之用了这个组件的一点点. 又到某重要XX时期(但愿此文给面临此需求的同仁有所帮助),某Web应用第一次面临安全加固要求,AppScan的安全测试报告还是很清爽的,内容全面,提示 ...
- HttpDNS的坑以及一个针对安卓不太完善的测试方案
背景:单位因为域名劫持(具体表象是某个地区的用户ping不通域名或者因为DNS解析的ip跨网段导致访问速度很慢)需要运维经常去定位,于是提出了httpDNS方案. 想法是美好的,现实是残酷的.没引入这 ...
- laravel项目使用twemproxy部署redis集群
twemproxy是twitter开发的一个redis代理proxy,Twemproxy可以把多台redis server当作一台使用,开发人员通过twemproxy访问这些redis servers ...
- Apriori算法-频繁项集-关联规则
计算频繁项集: 首先生成一个数据集 def loadDataSet(): return [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]] 测试数据集da ...
- Ocelot中文文档-转换Headers
Ocelot允许在请求下游服务之前和之后转换头部.目前Ocelot只支持查找和替换.这个功能在Github #190提出.我确定这个功能可以在各个方面发挥作用. 添加到请求 这个功能在GitHub # ...
- 第三章 C++的三种基本控制结构
0x C++提供的三种基本控制结构 顺序结构:按照先后顺序依次执行程序中的语句 选择结构:按照给定条件有选择地执行程序中的语句 循环语句:按照给定规则重复地执行程序中的语句 1x 第一节 C++语句 ...
- SSM博客登录注册
我的博客采用的是 spring+springmvc+mybatis框架,用maven和git管理项目,之后的其他功能还有待进一步的学习. 首先新建一个maven项目,我的项目组成大概就这样, 建立好项 ...
- WebApiClient库支持AOT
1 库简介 WebApiClient是开源在github上的一个http客户端库,内部基于HttpClient开发,只需要定义c#接口(interface),并打上相关特性,即可异步调用http-ap ...
- ThreadPoolExecutor 学习笔记
线程池的奥义 在开发程序的过程中,很多时候我们会遇到遇到批量执行任务的场景,当各个具体任务之间互相独立并不依赖其他任务的时候,我们会考虑使用并发的方式,将各个任务分散到不同的线程中进行执行来提高任务的 ...
- (Lesson2)根据类名称和属性获得元素-JavaScript面向对象
描述:在编写选择器的时候遇到的一根问题,我需要实现Jquery的选择器功能,第一个根据ID获取Element非常简单,第二个根据类(class)去获取Element集合,这个相对复杂,而根据name和 ...