【计算机网络】TCP的报文头部

怎样保证TCP的可靠性?

(1)保证数据能够到达对方
(2)保证数据不重复、不乱序
应答确认、超时重传
滑动窗口:发送方发送数据,接收方速率匹配
拥塞控制算法:发送方发送数据的速率,与当前网络情况的匹配
(3)保证数据不失真
16位校验和,冗余检验、TCP头部和数据部分

TCP的报文头部

在这里插入图片描述
1、序号(seq):在一个TCP连接中传送的每一个字节流中的每一个字节都按顺序编号。序号值由系统初始化的某一个随机值ISN和本报文段第一个字节数据在整个字节流中的偏移量组成。
2、确认号(ack)用作对另一方发送的tcp报文段的响应
例如:B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501 ~ 700), 这表明B正确收到了A发送的到序号700为止的数据。
因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。
总之,应当记住:
若确认号=N,则表明:到序号N-1为止的所有数据都已正确收到。
3、头部长度:实际上指出了TCP报文段首部长度。最大值为60字节(说明没有选项数据)
4、URG:表明紧急指针是否有效。URG=1为有效,URG=0为无效
5、ACK确认号。仅当ACK= 1时确认号字段才有效。当ACK= 0时,确认号无效。
TCP规定,在连接建立后所有传送的报文段都必须把ACK置1。
6、PSH:当接收方收到PSH=1的报文段后,立即处理数据,而不再等待整个缓冲区满才处理数据。
也就是,提示接收端应用程序应该立即从tcp接受缓冲区中读走数据,为后续接收的数据让出空间
7、RST:复位报文段。当RST=1时,表明TCP连接出现了严重差错,必须释放连接重新建立连接。还可以便是拒绝一个非法的报文段或拒绝连接。
8、SYN:在连接建立时用来同步序号。当SYN= 1而ACK= 0时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使
SYN=1和ACK=1。
因此,SYN置为1就表示这是一个连接请求或连接接受报文
9、FIN:用来释放一个连接。当FIN= 1时,表明此报文段的发送方的数据已发送完毕,并要求释放连接。
10、窗口:指接收本报文段的一方的窗口(不是发送端自己的)。是TCP流量控制的一个手段。因为接收方的数据缓存空间有限,所以窗口值的大小表示从本报文段的首部的确认好算起,接收方允许发送方发送的数据量。
它告诉对方本端的tcp接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。

  • 假定A收到了B发来的确认报文段,窗口是20字节,确认号是31。表示B期望收到的下一个序号是31,而序号30为止的数据已经接收到。
  • 发送窗口表示,在没有接收到B的确认的情况下,A可以连续把窗口内的数据都发送过去。凡是已经发送过的数据,在未收到确认之前都必须暂时保留,以便在超时重传时使用。
  • 窗口越大,发送方就可以在收到对方确认之前连续发送更多的数据。
    总之,窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着。
    11、校验和:由发送端填充接收端对tcp报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意这个校验不仅包括tcp头部,也包括数据部分。这也是tcp可靠传输的一个重要保障。
    12、紧急指针:紧急指针仅在URG = 1时才有意义,它和序号字段的值相加表示最后一个紧急数据的下一字节的序号。
    它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。

应答确认和超时重传

在这里插入图片描述


版权声明:本文为qq_43411373原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。