TCP报文段首部格式

大部分TCP报文头部都是20个字节,有的数据包要加上选项。

上面一行代表4个字节,源端口和目的端口都是2个字节。

TCP协议是面向字节流的协议

TCP是一段一段分块的发送数据的

序号指的就是你当前分段的数据块的第一个字节在整个文件中的位置,就是对应的序号。对端收到数据之后,按照序号的从小到大重新组装起来,得到的就是我们要发送的文件。所以TCP是面向字节流的协议。

确认号:

如果被叫收到了序号是1的数据段,该数据段的长度是4个字节,最后一个字节的是4,那么下次我想收到的数据段的序号应该是5开始的,所以这里的确认号就是5.

如果收到的数据段的最后一个字节是180,那么确认号就是181

字段数据偏移:

该字段用来指定TCP首部的大小,如果这里的值是40,减去固定的20个字节,tcp首部那么偏移的大小就是20.

用来表示TCP的报文段。

例如数据偏移的值占4位,如果是1111,对应的值是15,此时还要剩4,表示TCP的头部是60个字节,偏移就是40个字节。

所以TCP的头部最小是20个字节,最大是60个字节。

上面就是web客户端向web服务器申请网易数据,xp向web发送一个数据,第一个包序号是1,确认号也是1(希望web服务器发送序号是1的数据包),数据的长度是203个字节

web服务收到请求之后,连续发送了两个数据包,确认号都是是204表示收到了客户端序号是1长度是203个字节的数据,希望下次发送的数据的序号从204开始

标记为URG标记位如果是1表示不管发送缓存中最后还有多少数据需要发送,该数据段都优先传输。

Ack和syn主要用在TCP握手的三次连接中使用

syn是tcp的请求建立连接的标志位:

第一包数据:序号是0,发送数据的长度是0,因为没有收到对端的数据,所以确认号是0,

Syn的标志位设置成1,这里没有发送的数据,只发送TCP的20个字节的头部

第二包数据:序号是0,因为收到了对端的数据(数据的长度是0,序列号是0),那么确认号是1,发送数据的长度也是0,同时标志位syn和ack 都是1

第三包:发送写序列号是1,确认号也是1,同时将ack标志位设置成1

syn的攻击:

我们可以弄很多假的客户端去和服务器建立TCP连接,导致服务器瘫痪

第二种情况就是:让服务器和服务器自己建立大量的TCP连接,导致服务器资源耗尽。

Psh字段的作用:

接受端接受数据是按照缓存中的数据依队列依次交给上层应该程序去处理,如果收到的数据中带有psh标志位,表示直接将数据放在缓存的头部,优先立刻可以提交给应该程序。

RST标志位:

表示会话过程中TCP连接异常终端,RST标志位是1.

FIN表示正常结束连接,比如网页传输完成了,web服务器给客户端回复一个FIN数据包,正常断开TCP连接。

TCP的窗口字段:占2个字节

在TCP三次握手的时候,A计算机会告诉B计算机字节接受缓存的大小是65535,那么A计算机最大的发送缓存就是65535.

同理B计算机也会告诉A计算机自己的最大接受缓存是64034自己,A计算机最大的发送缓存就是64034字节。

依据对方的接受窗口大小来设置自己的发送窗口大小。

校验和字段:

校验的TCP的首部和数据字段再加上12个字节的伪首部三个部分组成

我们来看下udp的校验:

TCP校验和计算方法同上,只需要将版本号17换成6就可以了。TCP的协议号是6

紧急指针只有在URG标志位是1的时候才有用,如果紧急指针的值是50,表示TCP数据部分的前50个字节的数据需要紧急发送。

选项字段:

选项指针:

在tcp三次握手的时候可以通过选项告诉对端自己tcp包最大传输的字节MSS是1460字节

还可以告诉对端选择性确认功能:

还可以告诉对端支持SACK选择性确认功能。

2 TCP如何实现可靠性传输

网络层是主要是实现数据的传输,不保证数据的可靠传输,数据的可靠传输是在传输层实现的。

A发了M1,在规定的时间内如果没有收到对端M1的确认,就重新发送M1.

B收到了两个M1,丢弃第二次重复的M1数据

停止等待协议的缺点就是信道利用太低

我们来看看下面这种方式

现在发送12个数据包

窗口的大小是5

先发送 1 2 3 4 5这五个数据包

当收到第一个数据包的回复之后,窗口向右移动,第一个数据包可以从缓存中删除掉。

发送窗口中的数据包只有收到确认之后才能够从滑动窗口中删除。

累计确认

B计算机说收到了第三个数据包,表示前三个数据包都都收到了,第一个数据包和第二个数据包就不用再回确认信息了

B收到了第一个数据包,第二个数据包,第四个数据包,第三个数据包在传输的过程中丢失了,这个时候B给A回复的确认标识是2,A要重新传输第三个数据包和第四个数据包。

韩顺刚-tcp报文头协议详细分析第一包数据:序号是0,发送数据的长度是0,因为没有收到对端的数据,所以确认号是0, Syn的标志位设置成1,这里没有发送的数据,只发送TCP的20个字节的头部的更多相关文章

  1. tcpdump抓包二进制tcp协议详细分析

    1.tcpdump -i eth0 port 11751 and src host 192.168.1.34 -x -s0 tcpdump: verbose output suppressed, us ...

  2. 三、tcp、ip协议详细

    1. 什么是 TCP/IP? TCP/IP 是一类协议系统,它是用于网络通信的一套协议集合. 传统上来说 TCP/IP 被认为是一个四层协议 1) 网络接口层: 主要是指物理层次的一些接口,比如电缆等 ...

  3. 传输层——TCP报文头介绍

    16位源端口号 16位目的端口号 32位序列号 32位确认序列号 4位头部长度 保留6位 U R G A C K P S H R S T S Y N F I N 16位窗口大小 16位检验和 16位紧 ...

  4. [apue] 一个查看当前终端标志位设置的小工具

    话不多说,先看运行效果: >./term input flag 0x00000500 BRKINT not in ICRNL IGNBRK not in IGNCR not in IGNPAR ...

  5. HTTP协议详细分析

    1.HTTP概述 1.1.什么是HTTP? 它是Hyper Text Transfer Protocol的缩写.超文本传输协议. 它是客户浏览器和web服务器之间的一种一问一答的规则.问答机制/握手机 ...

  6. Ubuntu搭建NFS服务器,NFS协议详细分析

    目录 1. Ubuntu搭建NFS服务器 2. NFS协议分析 2.1 实验拓扑: 2.2 在kali抓包分析 1. Ubuntu搭建NFS服务器 ​ NFS(Network FileSystem,网 ...

  7. 进程保护--CrossThreadFlags标志位

    原理: 1. 将进程的所有线程的线程CrossThreadFlags标志位设置成Terminated或者System. 效果:任务管理器,WSYSCheck,ICESWORD无法结束进程.. 但PCH ...

  8. 三次握手和四次挥手以及TCP标志位的详细介绍

    一.TCP标志位 在讲TCP三次握手和四次挥手之前,先说一下TCP标志位,方便后续的理解. 简单来说,TCP标志位的值代表了当前请求的目的. 标志位一共有6种,分别是: SYN(synchronous ...

  9. 基于TCP与UDP协议的socket通信

    基于TCP与UDP协议的socket通信 C/S架构与初识socket 在开始socket介绍之前,得先知道一个Client端/服务端架构,也就是 C/S 架构,互联网中处处充满了 C/S 架构(Cl ...

随机推荐

  1. Linux(二):VMware虚拟机中Ubuntu安装详细过程

    Linux(二):VMware虚拟机中Ubuntu安装详细过程 目录 1 准备 2 安装 2.1 虚拟机的建立 2.2 虚拟机安装Ubuntu系统 2.3 虚拟机设置 3 完成 1 准备 1.操作系统 ...

  2. IDEA字节码学习查看神器jclasslib bytecode viewer介绍

    转载来自:https://blog.csdn.net/w605283073/article/details/103209221 一.背景 很多人想学习Java反汇编后的字节码,但是一方面缺乏好的资料, ...

  3. Java实现 LeetCode 712 两个字符串的最小ASCII删除和(最长公共子串&&ASCII值最小)

    712. 两个字符串的最小ASCII删除和 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 ...

  4. Java实现 LeetCode 398 随机数索引

    398. 随机数索引 给定一个可能含有重复元素的整数数组,要求随机输出给定的数字的索引. 您可以假设给定的数字一定存在于数组中. 注意: 数组大小可能非常大. 使用太多额外空间的解决方案将不会通过测试 ...

  5. Java实现第九届蓝桥杯测试次数

    测试次数 题目描述 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机. 各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后 ...

  6. 使用dotnet Cli向nuget发布包

    长话短说, 今天分享如何在nuget.org创建并发布.NET Standard package. 前置 安装勾选.NET Core开发套件的Visual Studio; 安装dotnet Cli 从 ...

  7. [RH134] 8-磁盘管理

    一.磁盘结构 我们以但磁盘的硬盘为例,如图所示: 从内向往有很多的磁道(这里我们只画了5条,实际上非常多),这个磁盘被划分为很多扇区.每个扇区有一个固定的大小,例如512Bytes. 对于多磁盘的硬盘 ...

  8. OpenJudge - 2977:生理周期

    原题链接 总时间限制: 1000ms 内存限制: 65536kB 描述 人生来就有三个生理周期,分别为体力.感情和智力周期,它们的周期长度为23天.28天和33天.每一个周期中有一天是高峰.在高峰这天 ...

  9. 温故知新-快速理解zookeeper功能&应用&选举机制

    文章目录 zookeeper简介 什么是zookeeper zookeeper应用场景 zookeeper特点 zookeeper的角色 zookeeper的数据模型 节点数据结构 节点类型 zook ...

  10. Spring AOP学习笔记02:如何开启AOP

    上文简要总结了一些AOP的基本概念,并在此基础上叙述了Spring AOP的基本原理,并且辅以一个简单例子帮助理解.从本文开始,我们要开始深入到源码层面来一探Spring AOP魔法的原理了. 要使用 ...