- 🎥 个人主页:Dikz12
- 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
- 欢迎大家👍点赞✍评论⭐收藏
目录
TCP/IP五层(或四层)模型
传输层
TCP和UDP的区别
UDP协议
校验和
如何基于校验和完成数据传输?
校验和是怎么计算的?
TCP协议
TCP协议报文格式
TCP/IP五层(或四层)模型
传输层
就是对应用层数据,在进行打包,变成传输层的数据报.把刚才的应用层数据,基础上拼接上传输层的报头.
学习传输层,就要学习传输层的典型协议TCP协议和UDP协议.
TCP和UDP的区别
UDP: 无连接 、面向数据报 、不可靠传输 、 全双工.
TCP: 有连接 、面向字节流 、 可靠传输 、 全双工.
UDP协议
学习一个协议,最重要的就是去理解协议报文格式。
上图可以理解成:
UDP报头:分成四个部分,每个部分占两个字节。
UDP报文长度:2个字节,16位表示数据,范围 0 - 65536 => 64kb (UDP 数据报最大就是64kb).
UDP载荷 : 真正保存数据的地方.
校验和
在网络传输的过程中,由于外界干扰的情况下 ,就可能出现数据传输错误的情况。所以,就要有能识别出出错的数据,而校验和就是一种检查方式.
如何基于校验和完成数据传输?
1. 发送方,把要发送的数据整理好(data1),在通过一定的算法,计算出校验和 checksum1.
2.发送方把data1 和 checksum1 一起通过网络发送出去.
3.接收方收到数据,收到的数据称为(data2),这时候数据可能就不一样了,收到校验和checksum1.
4.接收方在根据 data2重新计算校验和(相同的算法).
5.对比,checksum1 和 checksum2 是否相同,如果相同,则认为data1 和 data2 大概率是相同的;否则,data1 和 data2 一定不同.
校验和是怎么计算的?
此处UDP中使用的是CRC算法(循环冗rong余算法)
就是把当前要计算的校验和的数据,每个字节,都进行累加,把结果保存到这个 两个字节的变量中。(累加过程中如果溢出,也没关系)
如果中间某个数据,出现传输错误,第二次计算的校验和就会和第一次不同。
CRC这个算法其实不是特别的靠谱,导致两个不同的数据,得到相同的校验的概率还是比较大的。(前一个字节恰好少1,后一个字节恰好多一)
md5 算法
这个算法是很常用的,要了解它的一些特点.
1.定长.
无论你原始的数据多长,计算得到的 md5,都是固定长度。
2.分散.
给定两个原始数据,只要有一个字节不同,得到的 md5值都会差异很大。
3.不可逆.
给一个原始数据,计算 md5,非常容易;给你md5,还原出原始数据,计算量非常庞大,甚至超出了现有的计算机算力的极限,理论上是不可行的。
TCP协议
TCP协议报文格式
32位序号 和 32位确认序号 :应用于TCP机制中的确认应答.
4位首部长度:TCP的报头长度是不固定的(变长的)报头最短是20字节(没有选项);最长是60字节.只有4位表示,最大取值范围15,单位是4个字节,所以最大值是60字节。
保留6位 : UDP有个问题,长度64kb,改不了,就很难受。所以,设计TCP的大佬就留了一个小心机,现在不用,先占个位置,后面需要再使用。
6个标志位:用来区分TCP报文的类别,分别用于TCP不同的机制中.
16位窗口大小:应用于TCP机制中的流量控制.
16位校验和: 跟UDP一样的.