TCP协议以及网络分层

网络分层
在这里插入图片描述
面向连接的传输层协议TCP协议

一、TCP协议究竟是怎样的

TCP在应用程序之间建立了虚拟线路。
TCP(Transmission Control Protocal) 传输控制协议
进程和进程之间的数据传输工作:
传输层在进程和进程之间进行工作,他将应用层的数据通过复用技术进行分装以后,产生一个一个的进程,这些进程通过复用技术 将他们分装为message,送到网络层进行IP分包以后进入到网络链路层进行处理,在接收端经过网络层,到达传输层以后经过解包解复用的技术,将这些进程还原成一个一个process。
在进程和进程之间进行数据传输的时候依赖于端口
在这里插入图片描述

二、TCP的数据格式

在这里插入图片描述 ◇源端口和目的端口:各占2字节。端口是传输层与应用层的服务接口,传输层的复用和分用功能都要通过端口才能实现。

◇ 序号:占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

◇ 确认号:占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。

◇ 数据偏移:占4位,它指出 TCP报文段的数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是32位字(以4字节为计算单位)。

◇ 保留:占6位,保留为今后使用,但目前应置为0。

◇ 紧急URG:当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

◇ 确认ACK:只有当ACK=1时确认号字段才有效。ACK=0时,确认号无效。

◇ 推送PSH:当TCP收到PSH = 1的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。

◇ 复位RST :当RST=1时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

◇ 同步SYN:SYN = 1表示这是一个连接请求或连接接受报文。

◇ 终止 FIN:用来释放一个连接。FIN=1表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

◇ 检验和:占 2 字节。检验和字段检验的范围包括首部和数据这两部分,在计算检验和时,要在 TCP 报文段的前面加上12字节的伪首部。

◇ 紧急指针:占 16 位。指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。

◇ 选项:长度可变。TCP最初只规定了一种选项,即 MSS(最大报文段长度Maximum Segment Size)。MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” MSS是 TCP 报文段中的数据字段的最大长度,数据字段加上TCP首部才等于整个的TCP报文段。

◇ 填充:为了使整个首部长度是 4 字节的整数倍。

◇ 窗口:占 2 字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP 连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

三、TCP数据传输的全过程

TCP的三次握手
第一次握手:客户端向服务器端发送一个SYN包,并且客户端进入到SYN SEND状态等待服务器的确认
第二次握手:服务器收到SYN包以后,必须给客户一个SYN的确认,同时自己也会发一个SYN的包(SYN+ACK)一个确认包,服务器进入到SYN RECEIV状态
第三次握手:客户端收到服务器的SYN+ACK的包以后,向服务器发送一个确认包ACK
当包发送完毕后客户端和服务器之间就建立了TCP连接,进入到了ESTABLISHED的状态,完成了三次握手的工作,当数据的收发完成以后,双方希望将连接进行消除
TCP的四次挥手 第一次挥手:客户端向服务器端发送一个FIN报文,意思是说客户端没有数据要发送了,如果服务器还有数据没有发送完成,则可以继续发送数据。 第二次挥手:服务器端给客户端一个ACK的回馈,这个回馈告诉客户端,服务器已收到请求,但是还没准备好断开连接,让客户端进一步等待其他消息。客户端进入到一个FIN WAIT状态,继续等待服务器端的FIN报文。 第三次挥手:服务器端确定数据已经完全发送完毕以后,就会向客户端发送一个FIN的报文。这个FIN的报文告诉客户端,服务器的数据也完成了,现在可以关闭连接了 第四次挥手:客户端收到服务器端的FIN报文后,知道可以关闭连接了,会向服务器发送一个ACK之后进入到TAND WENK状态,如果服务器没有收到ACK,则可以重传。当服务器收到ACK后就知道可以断开连接了。 这时候客户端会等待一个RMSL(最大报文段的生存时间),等待了这样一个时间段后依然没有收到服务器端的任何回复,则说明服务器端以及正常关闭,则客户端也关闭连接。