TCP的报文详细解读

这张图好像挺有名的,其实一开始我看见的时候是一脸懵逼的,但是通过翻书(大学时代最害怕的计算机网络),查阅他人博客等等办法,最后终于有了一个系统的了解,当然,这里知识点多而杂,大家可以多看几遍,结合上面那张图,这张图实际上非常清楚,大家看完底下的内容再回来看这张图一定会恍然大悟。
首先,大家先看这张图,要先从底下往上看,下面这个左边是绿色右边是红色的长方形实际上是一个数据包:
IP首部:
这个地方实际上是IP地址,是我们要发送到的机器的IP地址
IP数据部分:
这个里面东西就非常多了,有目标IP地址的目标端口信息,还有我们要发送的数据等等很多东西,也就是TCP的报文段,具体有些啥下面我会说到。
说完这里以后我们再往上看,有个左边黄色右边蓝色的长方形,这个就是我们刚才说的TCP报文段,也就是我们刚才说的IP数据部分,它也分两个部分:TCP首部和TCP数据部分
TCP首部:
这个首部东西还挺多的,分别都有自己的功能,所以这个首部很像是功能性的内容,比如这个数据包给哪个端口啊,是用来做什么的之类的,下面会讲到。
TCP数据部分:
这部分实际上就是我们的数据部分,就是我们要传输的数据
现在再往上看,我们会发现上面这个大块黄色的其实就是下面的小块黄色的长方形,也就是我们的TCP首部,图中详细的画出了其各个部分,甚至还标出了其各个部分的大小,下面我仔细讲一下各个部分的功能和作用:
我们先竖着看,可以看到整个叫做TCP首部,前五行叫做20字节的固定首部,说明前五行一共是20字节,并且这五行内容格式是固定的。并且五行一共20字节,那么一行4字节,也就是32位,横着看发现最上方已经写出来了32位,也就是用于来标识下方各个区域的大小是多少的刻度。
然后我们从上往下一行一行的看:
第一行我们看到了两个端口,端口这个概念是计算机里面的一个很常见的概念,分为物理端口和虚拟端口。所谓物理端口,那肯定是实际存在的,就像是交换机上面那些接口们,虚拟端口就比较有意思了,它是一个虚拟的概念,不可见,存在于计算机内部,我们知道计算机运行时是有非常多进程的,我们的数据肯定是传递给特定的一个进程,那用什么来唯一确定这个进程呢?就用端口号即可。每个进程都有自己对应的端口号,计算机虚拟端口号是一个16位数,也就是说,计算机一共有2的16次方-1这么多个端口号可以使用,也就是65535个,在图中,两个端口分别占用16位,便是这个原因。下面是具体各个部分的功能和定义:
源端口:
源端口我们一看就知道是指发送方计算机发送数据的出来的那个端口号
目的端口:
目的端口同理,指的是接收方计算机所接收数据的那个端口号
序号(seq):
seq号,我们知道一个数据可能是由多个数据包组成,序号的作用就是来标识各个数据包的先后顺序,序号占用32bit,那么序号最多有2的32次方-1个,那假如超过了这个个数怎么办呢?就从0开始重新编号,这个seq号比较重要,后面的三次握手的内容需要用到
确认号(ack):
ack号,注意ack号和下面的ACK标识是不一样的,ack=seq+1时说明发送方和接收方配对成功了。这个确认号是数据接收方反馈给发送方的一个属性,假如确认号为N,那么表示接收方已经接收到了N-1及其以前的数据
接下来的第四行东西有点多,如下:
数据偏移:
这个数据偏移是针对TCP报文段来说的,指的是从TCP报文段到TCP数据部分之间的距离,也就是TCP首部的大小,一般来说是20个字节,但是我们从图中可以发现第六行有个可变长度,所以有的时候其不是20个字节。
保留:
保留表示现在没有被使用,这段长度是可以被使用的。
URG:
URG=1时表示此报文为紧急报文,所以这个报文优先级最高,会被发送方放到最开头传输,需配合我们下面要说到的紧急指针一起使用
ACK:
ACK是用来指明连接是否建立的属性,当ACK=1时说明连接已经建立了,建立连接后的所有报文ACK都必须为1,并且规定只有当ACK=1时确认号才会有效
PSH:
这个属性是用于一端的应用进程希望在键入一个命令后立即就能收到对方的响应时使用,TCP可进行推送操作
RST:
这个字段其实就是reset,当我们的TCP连接出现严重错误时,我们需要将连接进行重置,这时候需要释放连接,重新建立新的连接
SYN:
这个属性比较重要,当它等于1时用于表示此报文为连接请求或者连接接受报文,当SYN=1且ACK=0时,那就说明此时是连接请求报文。当SYN=1且ACK=1时,说明此时是连接接受报文,并且当SYN=1时是不允许携带数据的,并且会消耗一个序号。
FIN:
此属性用于释放连接,是finnish的缩写,当发送方将FIN置1时,说明数据已经完全发送完毕,要求释放连接
窗口:
窗口是用来控制传输速率的属性,它表示接收方允许对方发送的数据量,来解决带宽不一致的问题
校验和:
用于校验首部和数据两部分
紧急指针:
当URG=1时,说明此报文为紧急报文,紧急指针指出本报文中紧急数据的字节数,紧急数据处理完毕TCP会告诉应用程序恢复正常工作,并且,窗口为0时也可以发送紧急数据
TCP的报文详细解读的更多相关文章
- TCP中的MSS解读(转)
本文摘录自TCP中的MSS解读. MSS 是TCP选项中最经常出现,也是最早出现的选项.MSS选项占4byte.MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的 ...
- MemCache超详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- MemCache超详细解读 图
http://www.cnblogs.com/xrq730/p/4948707.html MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于 ...
- 【转】TCP/IP报文格式
1.IP报文格式 IP协议是TCP/IP协议族中最为核心的协议.它提供不可靠.无连接的服务,也即依赖其他层的协议进行差错控制.在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送.而所有 ...
- rpm软件包管理的详细解读
CentOS系统上使用rpm命令管理程序包:安装.卸载.升级.查询.校验.数据库维护 1.基本安装 rpm -ivh PackageFile 2.rpm选项 rpm -ivh --test Packa ...
- modbus tcp数据报文结构
modbus tcp数据报文结构 请求:00 00 00 00 00 06 09 03 00 00 00 01 响应:00 00 00 00 00 05 09 03 02 12 34 一次modbus ...
- MemCache详细解读
MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...
- Android BLE蓝牙详细解读
代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...
- 计算机网络 之 TCP协议报文结构
前言:上学期实训课,由于要做一个网络通信的应用,期间遇到各种问题,让我深感计算机网络知识的薄弱.于是上网查找大量的资料,期间偶然发现了roc大神的博客,很喜欢他简明易懂的博文风格.本文受roc的< ...
随机推荐
- 物理CPU,物理CPU内核,逻辑CPU概念详解
1.说明 CPU(Central Processing Unit)是中央处理单元, 本文介绍物理CPU,物理CPU内核,逻辑CPU, 以及他们三者之间的关系, 一个物理CPU可以有1个或者多个物理内核 ...
- C# 使用阿里云发送短信
最近有个项目,短信服务使用的是阿里云的,由于时间问题,没有手动去构造sign去发送,而是直接使用阿里云的SDK发送,所以这里算是做个笔记,或许以后还能用得到 首先,我们需要安装阿里云的SDK,推荐使用 ...
- 在动态组件上使用 keep-alive
----------------------html.js.style----------------------------------------------- <!DOCTYPE html ...
- Python_魔法属性和方法
魔法属性 __doc__:表示类或方法的描述信息 __moudle__:表示当前操作对象的模块,当前模块时,显示__main__ __class__:表示当前操作对象的类型 __name__:表示类或 ...
- 【Java常用类】Instant:瞬时
Instant:瞬时 时间线上的一个瞬时点. 这可能被用来记录应用程序中的事件时间戳,该类型是面向机器的. now():获取本初子午线对应的标准时间 Instant instant = Instant ...
- leetcode 102. 二叉树的层次遍历 及 103. 二叉树的锯齿形层次遍历
102. 二叉树的层次遍历 题目描述 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / ...
- 安卓无法访问Azure服务器和微软API
Azure服务器保护机制限制移动端访问 必须使用移动app服务来转接api,才可以访问.
- Cesium中级教程7 - Geometry and Appearances 几何图形和外观
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 本教程将向您介绍提供使用Primitive API的几何图形和外 ...
- C++构造函数语义学(二)(基于C++对象模型)
带有虚函数的情况. 下面情况编译器也会在需要的时候为其合成. 1.如果一个类自己声明为虚函数. 1 #include<iostream> 2 using namespace std; 3 ...
- java-异常-自定义异常异常类的抛出throws
1 package p1.exception; 2 /* 3 * 对于角标是整数不存在,可以用角标越界表示, 4 * 对于负数为角标的情况,准备用负数角标异常来表示. 5 * 6 * 负数角标这种异常 ...