博主曾经学 Linux 的时候,觉得知识点很多很难很困惑,遂问一前辈,怎么才能学通学精达到融会贯通,前辈意味深长地丢给博主三个字:写博客。博主于是屁颠屁颠儿地跑过来写博客了,本人大三网络工程专业,最近为了找实习在学习 linux,刚好看到 TCP 部分,那就拿 TCP 报文分析来做第一篇博文吧~

首先要有一个概念,即 TCP 首部最小为20个字节,这20个字节分为 5行,每行为 4个字节,也就是 32位;谈到这里大家应该会在脑海中画一个长32宽5 的矩形,如果可以的话再给它分行,分为5行。就像下面这个样子:

这 20  个字节是怎么来的呢?又以什么样的形式存在呢?里面包含什么内容呢?

那么让我们来想想这个报文中应该有什么东西,首先 TCP 是用来建立连接的,是在什么情况下用来建立连接呢?我们知道对于计算机网络通信来说,我需要用一个端口号来确定跟对方的哪个端口建立连接,需要用一个IP地址来找到对方主机所在位置,还需要用MAC地址来确定跟对方所在位置的哪个主机进行通信。其中的端口号就是在TCP包头中确定的,那么我们的包头中前两个内容可以确定,即源端口号和目的端口号。分别填到我们刚刚的图中的哪个位置呢?要占用多大的空间呢?这个比较好记的方法就是,一般接触过网络方面知识的都会知道端口号最大为65535,即0-65535总共65536个端口号,65536是2 的 16次方,即一个端口号要个它预留16位的空间才能支持这么多端口号,那么源端口和目的端口总共需要占32位,我们填到第一行,就如下图:

是这样有了目的端口号和源端口号我们就可以组成一个包头,然后把这个包头加在数据包前面就可以交付下一层,然后这个数据包就可以肆无忌惮地遨游在互联网上了吗?当然不是啦~这样未免太简单粗暴而且不安全了吧,试想一下如果我们的数据在向下层交付了之后这个数据包在网络上传播,万一在某一个节点我们的这个数据包出现了错误,接收的主机也要这样傻乎乎地接收这个数据包么?所以我们的TCP一定要有一些机制来保证接收端可以发现这样的错误同时向发送端重新请求这个数据。来,让我们慢慢再想,既然TCP是可靠的面向连接的,那么它一定有检错机制以及出错处理机制,就是前方发现收到的数据包出现错误了,我怎么请求重传?是要再重新请求整个数据包么?那如果我们的数据非常大怎么办?这样重传会造成网络堵塞的吧?但是实际环境中特别大的数据包也是很常见的,所以我们的TCP做了一个很明智的决定,就是我把数据包分段,这个段大小叫做“最大报文段长度(Maximum Segment Size,MSS)(附1)。(请先记住这个概念,我们之后再解释这个概念)先发送一段给接收方,接收方收到以后确认无误了,那他就跟发送方说我收到了这一个数据包,而且是正确的,所以请你把下一段也发给我吧。那么TCP有一个机制就是发送一段然后确认一段,这样的话接收方收到的数据肯定是准确无误的,那么为了实现这个技术,我们要做哪些工作呢?

TCP 是面向字节流的,也就是在一个 TCP连接中传送的每一个字节流中每一个字节都是有编号的,如果我要给TCP数据包(即TCP报文的数据字段部分)分段的话肯定是把这个字节流分段,那么我在TCP包头中一定要有一个字段来表明当前的数据包中数据字段在整个大的数据包中的位置,怎么标记这个位置呢?最好的办法肯定是给字节流中的字节进行编号,然后用这个编号来标记这个字节的位置。那为了实现这个东西,我们可以在TCP的包头中增加一个选项,这个选项可以标记当前数据包中数据字段的第一个字节在整个大的数据包的字节流中的位置,这个选项我们称之为报文段序号。那么这个序号该定多少合适呢,其实呢,TCP可以一次性对4GB大小的数据进行分段,并不是不支持更大的数据格式,这个我们后面再说(附2)。4GB大小即2 的 32 次方(这里要区分B(Byte,即字节)和b(bit,位) )。我要描述一个大小为2^32字节的数据包,那么我最少要给这个“序号”字段预留32位的长度,那么我现在可以向刚刚的表格中再填一行数据,就像下面:


好了,这样我可以把报文段发送给接收方了,可是设想一下如果接收方接收到报文段了,他一看这个报文段是对的,怎么去告诉发送方我已经收到一个对的报文段了,那么请你把下一个报文段发给我呢?或者如果接收方收到数据包一看,哎呀妈呀,这个报文段不对啊,他开始懵逼了,他怎么告诉发送方他收到的报文段是错误的,而且他怎么要求发送方重传刚刚的数据包呢?这提醒我们要在刚刚的基础上再添加一些东西到我们的包头里。

下节再写!

由 TCP 报文格式谈 TCP — 源端口号、目的端口号、报文段序号(一)相关推荐

  1. TCP 报文格式及TCP Flags

    (一)前言        TCP 是一个基于连接的四层协议,提供全双工地,可靠地传输系统.它能够保证数据被远程主机接收.并且能够为高层协议提供flow-controlled 服务. (二)TCP 报文 ...

  2. tcp报文格式_34.TCP取样器

    阅读文本大概需要3分钟. 1.TCP取样器的作用 TCP取样器作用就是通过TCP/IP协议来连接服务器,然后发送数据和接收数据. 2.TCP取样器详解 TCPClient classname:TCP报 ...

  3. Centos7下搭建DMHS(源端oracle目的端达梦,另附目的端oracle)

    搭建DMHS 目录: 搭建DMHS 前言 1.部署oracle环境 1.1目的端oracle的安装 1.1.1UNIXODBC 安装 1.2源端oracle的安装 2.安装DMHS 2.1环境准备 3 ...

  4. tcp报文格式_腾讯面试中的TCP/IP协议简述+经典面试题

    面试题有福利 TCP/IP协议简述+ TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器, ...

  5. TCP 的那些事 | TCP报文格式解析

    TCP(Transmission Control Protocol 传输控制协议)提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之 ...

  6. TCP/UDP报文格式及各种通信机制简介

    TCP/UDP报文格式及各种通信机制简介 一.UDP报文 二.TCP报文 三.TCP通信机制 1,确认应答机制 2,超时重传机制 3,滑动窗口及快重传机制 4,流量控制 5,拥塞控制及慢启动机制 6, ...

  7. tcp报头及报文格式

    TCP协议主为了在主机间实现高可靠性的包交换传输协议.本文将描述协议标准和实现的一些方法.因为计算机网络在现代社会中已经是不可缺少的了,TCP协议主要在网络不可靠的时候完成通信,对军方可能特别有用,但 ...

  8. (一)深入浅出TCPIP之理解TCP报文格式和交互流程

    目录 1.引入TCP: 1.1 TCP用户代码 2. TCP数据报文格式 3 TCP栈及socket的初始化

  9. TCP头部格式和封装

    文章目录 12.3 TCP头部和封装 12.3.1 端口号 12.3.2 序列号 12.3.3 头部长度 12.3.4 相关控制位 12.3.5 窗口大小 12.3.6 校验和 12.3.7 选项字段 ...

最新文章

  1. dbms_stats.lock_table_stats对于没有统计信息的表分区同样有效
  2. 2021春季学期-创新设计与实践-Lesson3
  3. python输入字符串从大到小排列_791. 自定义字符串排序(Python)
  4. 廖雪峰javascript教程学习记录
  5. Durid数据库连接池设置ConnectionInitSqls参数解决数据库设置编码utf8mb4
  6. AIX上增加逻辑卷时报错误0516-787 extendlv: Maximum allocation for logical volume
  7. Android 系统(135)---Android anr 分析步骤总结
  8. 去除面部黑色素小妙招_去除暗黄皮肤的小妙招 7招让你白皙动人
  9. MySQL中的前缀索引
  10. VC++使用CImage在内存中Bmp转换Jpeg图片
  11. 《初级会计电算化应用教程(金蝶KIS专业版)》——导读
  12. (转)量化投资发展史:野蛮、乱象、科学
  13. In-Class Essay结构范文分享
  14. android WebView去广告 使用javascript脚本去除webView广告(两种思路)
  15. VINS-Mono学习(四)——回环检测与重定位
  16. 逆向脱壳-fsg手动脱壳
  17. C++动态爱心 520 七夕情人节整活
  18. JavaScript高级程序设计(红宝石书)学习笔记
  19. YEEZY 350灰橙被叫成灰橘,BOOST V2椰子表示很慷慨
  20. Jenkins+Pipline+Docker 自动部署SpringBoot项目流程

热门文章

  1. 官方mysql安装步骤图解_mysql安装图解 mysql图文安装教程(详细说明)
  2. 欠的债总要有人替你还
  3. 大数据工程师基础试题
  4. 《先知·法律》|《先知·买卖》
  5. webpack打包优化
  6. 四川信息职业技术学院计算机网络专业,四川航天职业技术学院计算机科学系专业介绍...
  7. 如何成为优秀的软件模型设计者?
  8. Spark SQL连接外部数据源
  9. 计算机中2种格式化,电脑的各种格式化有什么区别
  10. 2022ICPC网络赛第二场