传输层
在计算机网络中,传输层是将数据向上向下传输的一个重要的层面,其中传输层中有两个协议,TCP,UDP 这两个协议。
TCP
话不多说,我们直接来看协议报头。
源/目的端口号:表示数据从哪个进程来,到哪个进程去;
序号(Sequence Number)
在数据的传输中,传输报文的数据部分的每一个字节,都有一个他自己的编号。序号(Sequence Number),简称SN。
SN与SYN标志控制位的值有关,SYN值不同,SN表达不同的含义:
当SYN为1时,说明此时为连接建立阶段,这时的SN为初始序号:ISN(Intial Sequence Number),通过随机生成SN。
当SYN为0时,说明现在是数据传输阶段,第一个报文的序号是ISN+1,后面的报文的序号, 当前的报文的SN值+Tcp报文的净荷字节数(不包括Tcp报头) 。eg.如果发送端发送的报文的SN为3,他的净荷字节数为20,那么发送端发送的下一个报文的SN为20 。
在实际的数据传输中,SN的作用是当我们主机收到很多报文时,我们可以利用SN值对当前报文进行一个去重效果。
确认序号(Acknowledge Number)
对当前收到的序号进行一个确认。如果设置了一个ACK控制位,确认序号表示一个准备接受的包的序列号,注意,他的序列号指向的是准备接受的包,也就是下一个期望接受的包的序列号。
举个例子,假设发送端(如Cient)发送3个净荷为1000byte、起始SN序号为1的数据包给Server四服务端,Server每收到一个包之后需要回复一个ACK响应确认数据包给Client。ACK响应数据包的ACKNumber值,为每个Client包的为SN+包净荷,既表示Server已经确认收到的字节数,还表示期望接收到的下一个Cient发送包的SN序号。(三次握手详细图解)。
数据偏移(首部长度)
4位Tcp报头长度:表示该TCP 头部有多少个32 位bit(有多少个4 字节); 所以TCP 头部最大长度是15 * 4 = 60
标志控制位
· URG:占一位,表示紧急指针字段有效。在实际中,优先处理紧急字段,此时紧急字段指针才有用,并且指向紧急数据(应用较少,一般用来错误码,eg.在传输中,突然不要某个数据了)。
· ACK:置位ACK=1表示确认号字段有效:TCP协议规定,连接建立后所有发送的报文的ACK必须为1;当ACK=0时,表示该数据段不包含确认信息。当ACK=1时,表示该报文段包括一个对已被成功接收报文段的确认序号Acknowedgment Number,该序号同时也是下一个报文的预期序号。
· PSH:表示当前报文需要请求推(push)操作;当PSH=1时,接收方在收到数据后立即将数据交给上层,而不是直到整个缓冲中区满。(在窗口检测中&