发现看书还是要做点笔记才行,看了就忘,没有多大的效率…
自顶向下这本书,说的不会很晦涩(虽然没看过别的),很多方面可以理解,但是涉及到一些算法原理的时候就有点头疼了,自己底子太差了…
这次看到了 第三章运输层 3.5.2 节 tcp报文段结构
记录之前先介绍点要是涉及的知识点
每次tcp传输 数据或者存储数据 是在缓存中取出或存储的,每次拿多少或存多少是有限制的,我们称之为最大报文的端长度(MMS),注意的是,MMS时这报文段里面的数据字段。在tcp协议传输中最大的传输字节是1500字节(称之为最大传输单元 MTU)
现在进入正题
tcp报文段分为两部分 分别是 首部字段 和 数据字段
首部字段通常是40个字节,在前面我们说了 最大传输字节是1500字节,所以数据字段的大小是1400字节,也就是说
MMS(最大报文段长度) 为 1400字节。
当使用TCP发送大文件的时候,就把大文件分割成多个长度为MSS的数据字段 。
下面介绍报文段首部
-
序号字段
前面说了大的文件会被分割,我分割后传输出去,接收的一方怎么来确定收到的数据是正确排序呢?这就需要序号字段来帮忙了, 简单的说就是使发送的数据字段有序号
假如主机A传输500 00 字节文件到主机B,首先,文件被分割,假设分割的大小为1000字节,开始传输,序号为0的报文发送出去,下一个呢,序号为多少呢? 我们知道下次传输出去,是从1000个字节开始,所以呢,下一个的序号字段为 1000 ,再下个呢,为2000 , 以此类推 …那为什么是这样呢,不可以直接把数据字段直接标记序号吗,例如 0 1 2 3 …,用字节的偏移量来作为序号,我可以知道每次穿了多少,传完之后也直接可以算出发送了多少的包。
万一发送很多怎么办,当序列号增加到2^32−1后,会重新从0开始,由于2……32字节为4GB,可以保证重复使用的序列号代表的数据已经成功到达对端 -
确认号
首先呢,tcp是全双工通信的。我们拿客户端和服务器来说明什么事 确认号
客户端和服务器开始传输数据前,他们是已经相互通信好的(三次握手),客户端发数据给服务器的同时,服务器也可能在发送数据给客服端, 书上说 (书上说是主机A和B,我这里说是客户端和服务器)
服务器的数据到达客户端的每个报文都有一个序号用于从服务器流线向到客户端的数据。
这个就是确认号,这时候 服务器就说:我想要你传下一个数据时的序号为我流向你的数据 (就是确认号)。
再来简单地说,确认号是指我想告诉你,我下次想收到的怎样序号的数据字段;看下图
seq 为序列号
ack为确认号这
以上就是序号 和 确认号 的一些简单理解 ,其他的后期再看看 (书上还有知识点,我觉得重点理解就是可以了吧,没太多精力…)