计算机网路复习-TCP协议详解

1、TCP简介

TCP:全称Transmission Control Protocol,即传输控制协议。是位于传输层的一个协议, 在传输层上还有另外一个协议UDP,
全称User Data Protocol,即用户数据报协议,这篇文章只讲TCP,不讲UDP。

TCP特点:
        (1)、TCP是面向连接的,在通信之前双方必须建立TCP连接。
		(2)、TCP提供可靠的服务,TCP协议可以保证传输的数据按发送顺序到达,且无差错,不丢失,不重复。
	    (3)、TCP只能进行点对点的通信,不提供多播或者广播服务。
	    (4)、TCP报文段由TCP首部和TCP数据两部分组成。TCP首部的前20个字节是固定的,其后面是根据需要而增加的选项。
			所以TCP首部最大可达60个字节。
		(5)、TCP是面向字节流的。发送方的TCP协议将应用进程交下来的数据视为无结构的字节流,
			并且分割为若干报文段进行传输,在接收方TCP协议向应用进程递交的也是字节流。	

2、TCP报文段格式。

应用层的报文传送到传输层,分隔成若干段,每一段加上一个TCP首部, 就构成了TCP数据传输单位,称为TCP数据报文。

如图所示:


在这里插入图片描述

TCP报文结构如图:


在这里插入图片描述

(1)、源端口和目的端口:端口是应用层与传输层的服务接口,5组元信息,包括源IP地址,源端口,
目的端口,目的端口,TCP,可以标识一个TCP连接。
 	   
(2)、序号:TCP是面向字节流的,TCP传输的报文可看成为连续的字节流。
TCP报文段中数据部分的每一个字节都有自己的编号,该字段指明本报文发送的数据的第一个字节的序号。
 			
(3)、确认号:期望收到的下一个报文段首部的序号字段的值,也就是期望收到的下一个报文的数据部分起始的字节序号。
 
(4)、数据偏移:指出TCP报文首部产长度,以4字节为单位。这个字段占4位,表示0-15,所以TCP报文字段最大为60字节。
 
(5)、保留字段:占6位,暂时不清楚什么作用
 
(6)、标志位:占6位,用来区分不同类型的TCP报文,每个标志位占一个比特,响应标志位置1时有效。
多个标识位可以同时置1,在三次握手时,ACK 和SYN会同时置1.
	 	  URG:表明此报文中含有紧急数据。
	 	  ACK:表明确认字段有效。注意ACK并不消耗序号。
	 	  PSH:表明应该尽快将此报文交付给接收应用程序。
	 	  RST:表明TCP连接出错,必须释放连接,重新建立连接。
	 	  SYN:在连接建立用来同步序号。注意SYN需要消耗一个序号。
	 	  FIN:用来释放一个连接,注意FIN需要消耗掉一个序号。
 注意:消耗序号这里不太理解ACK标识跟确认号字段相关,而FIN和SYN标识位跟序号字段相关
  
(7)、窗口:该字段表明当前允许发送方发送的数据量,以字节为单位。
  
(8)、校验和:校验和字段校验的范围包括TCP伪首部,TCP首部,TCP数据3个部分。
  
(9)、紧急指针,:旨在URG标志位置1时有用,指明本报文中紧急数据的字节数。
  
(10)、选项:长度在0-40字节可变,最常用的选项字段为MSS(最大段长度),表示TCP报文段中数据字段的最大长度。

3、TCP连接管理
(1、连接的建立,即三次握手建立连接,过程如图所示:


在这里插入图片描述

第一次握手:发送端将SYN标识位置1,并随机初始化一个序号seq = x ,然后发送给接收端。
这次握手的作用是告诉接收端,开始建立连接。

第二次握手:接收端接收到发送端的TCP报文,然后将ACK位置1 ,确认序号 Ack  = x+1
(刚刚接收到序号为x包,所以期望接收到的下一个包的序号为x+1),接着将SYN位置1,
随机初始化序号 seq = y,将这个包发送给发送端。这次握手的作用是告诉发送端,接收端能正常收发包。

第三次握手:发送端在接收到接收端的包之后,知道接收端能正确接收包,这时会将ACK位置1,
确认号序为 Ack= y+1,序号为seq = x+1 然后发送给接收端。这次握手的作用是告诉接收端,发送端能正常收发包。

(2、连接释放,即四次连接释放连接,过程如图所示


在这里插入图片描述

 (1)、第一次挥手,主机A将FIN,ACK标志位置1,seq = y ,Ack = x,然后发送给主机B。表示告诉主机B,A想结束连接
 (2)、第二次挥手,主机B收到A发送的包,然后将ACK标志位置1,seq = x , Ack = y + 1。然后发送给主机A,告诉A,B收到A的包。
 (3)、第三次挥手,主机B将FIN标志位置1,seq = x +1 ,然后发送给A。表示B同意结束连接。
 (4)、第四次挥手,主机A将ACK标志位置1,seq = y + 1,Ack = x + 2。然后发送给主机B。表示双发连接释放完成  。

猜你喜欢

转载自blog.csdn.net/weixin_43352448/article/details/85800808