TCP(传输控制协议详解)详解

太过爱你忘了你带给我的痛 2021-10-24 00:31 706阅读 0赞

TCP协议的特点

(1)TCP协议是面向连接的运输层协议

在数据传输前必须建立连接,数据传输之后释放连接。

(2)TCP提供可靠交付的服务

所谓可靠是指在传输过程中无重复,无丢失,无错误。但是同时会增加开销。

(3)每一条连接都是点对点连接(一对一)

(4)面向字节流

所谓字节流指的是以传输过程中流入进程和流出进程的字节序列,虽然传输过程中是一个一个数据报,但这只是为了方便传输,之后在目的端重新装配。

(5)TCP提供全双工通信

所谓全双工是指一端既可以是客户端,也可以是服务器。

在这里插入图片描述

  1. TCP头部有20个固定字节,选项部分长度不定,最多40个字节。

(1)源端口和目的端口:各占2个字节。端口是指传输层和应用层的服务端口。传输层的分用和复用就是通过端口实现的。

分用:在发送端,多个客户端进程公用一个传输层。

复用:在接收端,传输层会根据端口号分配给不同的应用进程。

(2)序号字段:占4个字节。范围是0—2^32-1。因为TCP是面向字节流,所以它为每一个字节进行编号。

(3)确认号:占4个字节,是期望收到下一个报文段的数据部分的第一个序号。

(4)数据偏移:占4个字节。是指TCP报文段的数据开始的部分距TCP报文段起始部分的偏移量。

(5)保留字段:占6个字节。

(6)标识符:

URG:当URG置1时,表示紧急指针有效,它告诉系统此报文段有紧急数据,应尽快传送。

ACK:ACK置1,表示确认号字段才有效。此外,TCP规定,建立连接后,传输的所有报文段的ACK都需要被置1.

PSH:当接收者收到PSH=1时,会立即把数据传输给应用程序,而不会等到缓冲区满了,再做提交。

RST:RST=1,表示TCP连接出现了严重的问题,必须释放重连。

SYN:建立连接的时候使用。

  1. SYN=1ACK=0时,表示为请求连接。
  2. SYN=1ACK=1时,表示为同意连接的请求应答。

FIN:FIN=1,表示请求释放连接。

(7)窗口:占2个字节,表示接受端的接收窗口的大小。用于实现流量控制。将接收端发送过去的窗口大小设置成发送端的发送窗口大小,从而控制了发送端的发送效率。

(8)校验和:用于检测发送过程中是否出现错误。

(9)紧急指针:用于标识紧急数据的尾部。

(10)选项字段:(需要掌握的几个选项)MMS—最大报文长度,实际是报文段的最大数据长度。窗口扩大因子。时间戳选项。

TCP可靠传输技术

TCP提供的可靠传输而使用的方式是序号,确认号,超时重传,滑动窗口等可靠传输机制。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
开始的时候,客户端和服务器端分别创建自己的传输控制块(TCB),创建完后server进入Listen状态,此时准备接受client发送的请求。

第一次握手:客户端向服务器端发送连接请求。

  1. SYN=1,ACK=0表示请求连接。
  2. X表示本次字节流的初始序号。
  3. TCP规定:此时没有数据传输,但是消耗一个序号。

第二次握手:服务器向客户端发生应发响应。

  1. SYN=1ACK=0表示同意连接的应答响应。
  2. Y表示本次字节流的初始序号。
  3. X+1表示希望收到的字节起始序号。

第三次握手:当客户端收到连接同意的应答后,还要向服务端发送一个确认报文段,表示:服务端发来的连接同意应答已经成功收到。

  1. 该报文段的头部为:ACK=1seq=x+1ack=y+1

客户端发完这个报文段后便进入ESTABLISHED状态,服务端收到这个应答后也进入ESTABLISHED状态,此时连接的建立完成!

为什么连接只需要三次握手,而不是两次握手?

当客户端接收到应答响应是,就会进入estabished状态,而服务器端只有收到客户端的连接请求后才会进入estabished状态。

此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源。

在这里插入图片描述
第一次挥手:A已经发送完数据,请求释放连接,只发送报文头,此时A进入FIN_WAIT状态。

  1. FIN=1,表示释放连接。
  2. seq=uu-1表示确认的最后一个数据序号。

第二次挥手:B收到连接释放请求之后,会告诉它A到B这个方向已经释放。B向A发送应答响应,B进入CLOSE_WAIT状态。

  1. ACK=1:除TCP连接请求报文段以外,TCP通信过程中所有数据报的ACK都为1,表示应答。
  2. seq= vv-1BA发送的最后一个字节的序号。
  3. ack=u+1表示希望收到从第u+1个字节开始的报文段,并且已经成功接收了前u个字节。

第三次挥手:当B向A发完所有数据后,向A发送连接释放请求,请求头:FIN=1,ACK=1,seq=w,ack=u+1。

  1. B便进入LAST-ACK状态。

第四次挥手:A收到释放请求后,向B发送确认应答,此时A进入TIME-WAIT状态。

  1. 该状态会持续2MSL时间,若该时间段内没有B的重发请求的话,就进入CLOSED状态,撤销TCB。当B收到确认应答后,也便进入CLOSED状态,撤销TCB

原文链接:https://blog.csdn.net/weixin\_41191846/article/details/79676110

发表评论

表情:
评论列表 (有 0 条评论,706人围观)

还没有评论,来说两句吧...

相关阅读

    相关 TCP--传输控制协议

    推荐 《图解TCP/IP》,简直是程序员的福音 TCP 协议是 面向连接的, 可靠的,流传输,协议。  流:是指 不间断 的[数据结构][Link 1],可以想象成排水管

    相关 TCP传输控制协议

    TCP被誉为是可靠的数据传输协议,它是通过下面的方式来提供可靠性的: (1)应用数据被分割成TCP认为最合适发送的数据块。这和UDP完全不同。应用程序产生的数据报长度将保持

    相关 TCP协议详解

    TCP头部结构 ![70][] 16位端口号:告知主机该报文段的源端口和目的端口。 32位序号:一次TCP通信过程中某一个传输方向上的字节流的每个字节的

    相关 传输控制协议TCP

    1.与[UDP][]不同,TCP要求“所有数据必须全部到达”,比如发一封邮件,当然不能随意漏掉信息。 TCP与UDP一样,有端口号和校验和项,如图1,解释与[UDP][]中一