大白话了解TCP协议:TCP报文段首部的盛世美颜!?

解释TCP协议我觉得一篇是远远解释不完的
太长了读者也不愿意过多的看
我尽量用生动和短的篇幅用我们自己的话讲清楚
学习就像是谈恋爱一样,一开始肯定不是很了解,会有热恋期、吵架期、平淡期,走过来了,也就学成了。

写本文前我是写了其他的文章来做了一些铺垫的,感兴趣阔以看看

大白话了解TCP协议:了解TCP?先别急,来看看TCP的前世——“最简单的”可靠传输协议:停止等待协议

大白话解释TCP协议:等等,还有一些TCP协议的基础:滑动窗口协议

白话解释TCP协议:想知道TCP?我想先让你知道什么是传输层和UDP协议

干嘛要设计这个TCP?这么复杂计算机算的它不累吗?

TCP确实复杂,而且不同操作系统的TCP协议设计的细节也有所不一样!,但是也确实可靠!

设计TCP目的是为了能够将数据准确无误得接受到。
而准确传输的背后肯定是要代价的,所以TCP有各种机制来减少传输代价
在这里插入图片描述

TCP最基本的是啥!?是可靠!

在这里插入图片描述

TCP有几个特点:

  • TCP是面相连接的传输层协议:面向连接?没听过?其实也就是两台主机要说话之前必须要手拉手的意思一样,它表示必须先建立连接才能再建立通信~
  • TCP是实现端到端的控制:一对一,不做海王,真可靠。
  • TCP确保数据完整:它发誓数据一定会送到接收方手上,不丢不损。然后它就有着一大堆 可靠的传输机制 来保证它的安全性

下面是TCP的简单基本传输过程
在这里插入图片描述
建立连接→数据通信→释放连接

小明和小红交流的时候要牵手,这样会让小红觉得小明很可靠

TCP想握手,握哪只手比较好呢?传输端口:‘套接字’ 来决定

TCP提供的是一对一、端到端的控制。
端到端,就是端口到端口。(手对着手)
这里的端口,可不是什么IP地址啊、协议端口啊、应用进程啥的
这里它有个专门的端口:叫套接字

套接字:套接出来的字,是指:IP地址+端口号

比如:(192.168.1.1 135)

我们在用telnet传输数据的时候,就需要用到套接字,来确定TCP的传输端口:
在这里插入图片描述

TCP的绝美容颜:报文段首部

先来一张图:报文段的首部格式
在这里插入图片描述

复杂复杂复杂,太复杂了
诶诶别划走别划走
在这里插入图片描述

来分析一下这个盛世容颜吧~

  • 首先:TCP脸部的占地面积:固定最小20个字节 (32*5个位),妥妥大脸!
  • 源端口、目标端口:都站16位(也就是2字节),表示出发地和目的地!
  • 序号:占32位(4个字节),表示范围就是0~2^32-1,超过了这个范围就取模,序号用来编号使用,编号就是确保文件传输的准确性。
  • 确认号:占32位(4个字节)TCP有个确认的过程,确认号就是指期望收到下一个报文段的第一个数据字节的序号,注意:当有数据要发送给对方时,顺便确认,当没有数据发给对方时,单独发一个确认报文。 之后会细讲,不懂先不急,
  • 数据偏移:占4位,也叫首部长度。就是表示着首部的长度有多长。4位,最大不就只能表示15吗,可这首部固定都有20个字,咋整?没事,TCP规定了这里要乘以4,也就是说,可以表示的最大范围就是0~60。显而易见,就算最小的框框内都必须占4个字节。
  • 保留:保留6位,为今后使用。其实一直都用不上,因为每一次都是想为以后使用。
  • 紧急URG:表示非常紧急的包,当URG为1的时候,表示包的优先级很高.
  • 确认ACK:当ACK=1的时候确认有效,ACK=0的时候确认号无效,就表示出错啦!
  • 推送PSH:用的太少了,就是让psh=1的时候让接收方尽快接收并且交付应用进程。
  • 复位RST:RST=1的时候表示TCP连接中出现了严重的差错,必须直接断开连接。也可以用来拒绝一个非法的报文段或者拒绝打开一个连接。
  • 同步SYN:建立连接的时候用来同步序号。具体的后面会细细道来~
  • 终止FIN:当FIN=1的时候,请求对方释放连接,当对方确认后,会释放发送缓存。
  • 窗口:占两个字节,窗口字段是后面流量控制的关键,用来控制对方发送窗口的大小,单位为字节。接收方根据自身的缓存大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。
  • 检验和:占 2 字节,16bit。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP 报文段的前面加上 12 字节的伪首部。(和UDP一样的)
  • 紧急指针:占 16 bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。 (了解就好)
  • 选项:长度可变。这个东西叫做最大报文段长度 MSS (Maximum Segment Size),表示的是后面的数据最大的长度,不包括首部的。这样做的好处是告诉接收方:我的缓存所能接收一个报文段的最大数据长度是 MSS 个字节,一般MSS默认是536个字节。
  • 填充:凑数的,这是为了使整个首部长度是4字节的整数倍。

抓包看看
在这里插入图片描述

明天会仔细写写三次握手和四次挥手
通过抓包实验来阐述
在这里插入图片描述

posted @ 2021-04-22 13:38  Zeker62  阅读(102)  评论(0编辑  收藏  举报