这张图好像挺有名的,其实一开始我看见的时候是一脸懵逼的,但是通过翻书(大学时代最害怕的计算机网络),查阅他人博客等等办法,最后终于有了一个系统的了解,当然,这里知识点多而杂,大家可以多看几遍,结合上面那张图,这张图实际上非常清楚,大家看完底下的内容再回来看这张图一定会恍然大悟。
首先,大家先看这张图,要先从底下往上看,下面这个左边是绿色右边是红色的长方形实际上是一个数据包:
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的报文详细解读的更多相关文章

  1. TCP中的MSS解读(转)

    本文摘录自TCP中的MSS解读. MSS 是TCP选项中最经常出现,也是最早出现的选项.MSS选项占4byte.MSS是每一个TCP报文段中数据字段的最大长度,注意:只是数据部分的字段,不包括TCP的 ...

  2. MemCache超详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  3. MemCache超详细解读 图

    http://www.cnblogs.com/xrq730/p/4948707.html   MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于 ...

  4. 【转】TCP/IP报文格式

    1.IP报文格式 IP协议是TCP/IP协议族中最为核心的协议.它提供不可靠.无连接的服务,也即依赖其他层的协议进行差错控制.在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送.而所有 ...

  5. rpm软件包管理的详细解读

    CentOS系统上使用rpm命令管理程序包:安装.卸载.升级.查询.校验.数据库维护 1.基本安装 rpm -ivh PackageFile 2.rpm选项 rpm -ivh --test Packa ...

  6. 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 ...

  7. MemCache详细解读

    MemCache是什么 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高 ...

  8. Android BLE蓝牙详细解读

    代码地址如下:http://www.demodashi.com/demo/15062.html 随着物联网时代的到来,越来越多的智能硬件设备开始流行起来,比如智能手环.心率检测仪.以及各式各样的智能家 ...

  9. 计算机网络 之 TCP协议报文结构

    前言:上学期实训课,由于要做一个网络通信的应用,期间遇到各种问题,让我深感计算机网络知识的薄弱.于是上网查找大量的资料,期间偶然发现了roc大神的博客,很喜欢他简明易懂的博文风格.本文受roc的< ...

随机推荐

  1. openmesh - src - trimesh delete and add elements

    openmesh - src - trimesh delete and add elements openmesh 版本 8.1 About 本文主要介绍openmesh的如下接口 add_verte ...

  2. nalu,在java中使用lambda查询数据库

    不忘初心 最开始接触写代码的时候,用的是C井,查数据库直接硬编码sql,挺难受的. 后来学习到EntityFramework,用起来是真香,都是强类型,各种智能提示,代码写起来极度舒适,效率起飞. 最 ...

  3. unittest_assert断言(4)

    测试用例是否测试通过是通过将预期结果与实际结果做比较来判定的,那代码中怎么来判定用例是否通过呢?在python中这种判定的方法就叫做断言,断言可以使用python的assert方法,也可以使用unit ...

  4. linux安全篇:禁止频繁访问的ip访问nginx

    实验环境 版本:redhat6.5ip:172.16.1.100,172.16.10软件:nginx 172.16.1.10部署nginx [root@localhost tools]# lsngin ...

  5. Go的日志库go-logging

    配置文件config.yaml log: prefix: '[MY-LOG] ' log-file: true stdout: 'DEBUG' file: 'DEBUG' config/config. ...

  6. test_6 python的列表去重

    1.使用内置函数set() set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集.差集.并集等. 2.创建一个空的列表进行比较,把不重复的元素添加到新的列表中 #co ...

  7. 微服务架构 | 3.2 Alibaba Nacos 注册中心

    目录 前言 1. Nacos 基础知识 1.1 Nacos 命名方式 1.2 Nasoc 是什么 1.3 Nacos 的 4 个关键特性 1.4 Nacos 生态图 1.5 Nacos 架构图 1.6 ...

  8. Linux下Redis 6.2.6安装和部署详细图文步骤

    Redis(Remote Dictionary Server),即远程字典服务,是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的 ...

  9. 外观模式(Facade模式)

    外观模式的定义与特点 外观(Facade)模式又叫作门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式.该模式对外有一个统一接口,外部应用程序不用关心内部子系 ...

  10. python+fastdfs+nginx实现打包下载功能

    环境介绍:生产服务器开发人员需要给client下发数据,主要是图片及视频:图片服务器用fastdfs,下载由nginx 来提供: java 程序来调用此脚本,传递参数来决定打包文件内容: #!/usr ...