大白话了解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字节的整数倍。
抓包看看
明天会仔细写写三次握手和四次挥手
通过抓包实验来阐述
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15046249.html