TCP报头
一:TCP报头
1.1: 16位源端口号 && 16位目的端口号
1.2: 选项
指的是可选的,这部分内容在报头中可以存在,也可以不存在,
存在多少都是可以选择的.
就像买台式电脑,可以选择装独立显卡,也可以选择不加独立显卡
可以选择加不加风扇(加一个,还是多个)
1.3: 4位首部长度
4位首部长度指的是报头的长度,而不是总tcp报文的长度.
但TCP报头的长度是可变长的,如果选项完全没有,TCP报头长度就是20个字节,如果选项内容拉满,tcp报头最长就是60个字节(也就是选项部分最多是40个字节)
4bit表示的范围是0-15,不能表示到60啊??
其实这里首部长度的单位是"4字节",实际的首部长度是要在这个数字的基础上4,也就是154 =60.
1.4: 保留位
UDP报文长度使用两个字节表示,太小了,最大范围就是65535=>64k(最多64k的数据)
而在TCP报头中,提前申请好一块空间,这个空间暂时先不用,但是以后,如果TCP需要扩展一些新的功能,就可以使用这个保留位来表示了.
1.5 :标志位
TCP报头中的6个标志位,(TCP的灵魂)
1.6: 16位窗口大小
1.7: 16位紧急指针
1.8: 32位序号 && 32位确认序号
1.9: 16位校验和
发送的数据可能会发生比特翻转,此时就需要校验和来确定发送的数据是否发生改变.
发送方:根据要发送的数据,计算得到一个校验和 ,把数据+校验和一起发给接收方
接收方:根据接收的数据,按照同样的方法,计算得到一个校验和
接收方根据自己计算出来的检验和与接收方的校验和进行对比,如果不相同,就把数据扔了.
发送方的数据可能没出错,但校验和可能在传输的过程中出错,这种情况下,接收方仍会把接收到的数据扔了.