TCP四层概念模型/OSI七层网络模型
OSI七层网络模型称为开发式系统互联网参考模型,为开放式互联信息系统提供了一种功能结构的框架。TCP/IP模型则是实际使用到的模型。
TCP传输控制协议(英语:Transmission Control Protocol,缩写:TCP)工作在传输层,是一种面向连接的、可靠的、基于字节流的传输层通信协议.
优点:体现在稳定、可靠上,在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开连接用来节约系统资源。
缺点:慢、效率低、占用系统资源高、易被攻击。TCP在传递数据前要建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制都会消耗大量时间,而且要在每台设备上维护所有的传输连接。
源端口、目标端口:进程之间通信需要通过计算的端口号,一个端口号同一时间只能被一个进程占用,只有知道了两个需要通信的进程的端口号才可以进行后续操作
序号:本报文所发送数据的第一个字节编号
确认号:接收方收到发送方下一个报文的第一个字节编号
数据偏移:表示TCP报文首部长度,共4位
URG:是否包含紧急数据
ACK:是否确认号字段有效
PSH:提示接收方立即接收缓冲区中的数据,方便后续数据留有空间
RST:是否和主机连接发生严重错误,这时必须释放连接再重现建立连接
SYN:建立连接时使用,同步序号
FIN:通知对方着一端马上要关闭连接了
窗口大小:允许对方现在发送的数据量
检验和:提供额外的可靠性
紧急指针:指向紧急数据在数据字段中的位置
选项部分:根据TCP首部长度进行推算
TCP三次握手
在使用TCP通信之前必须要先建立连接,这时就需要通过三次握手这个过程来建立起通信通道,如下图所示
第一次握手:首先客户端发出建立了连接请求,向服务器发送一个同步报文SYN=1,此时选择一个随机数seq=x为初始序列号,然后客户端进入SYN=SENT状态,等待服务器的反馈
第二次握手:然后服务器收到连接请求报文后,向客户端发送同步确认报文SYN=1,ACK=1,确认号为ack=x+1,此时选择一个随机数seq=y作为初始序列号,之后服务器进入SYN_RECV状态。
第三次握手:最后客户端收到服务器的确认后,向服务器发送一个确认报文ACK=1,确认号为ack=y+1。序列号为seq=x+1,客户端和服务器都进入established状态,完成三次握手,建立连接。
TCP四次挥手
当通信完成后,需要关闭这个建立好的连接状态,可以先由客户端发起,也可以由服务器发起,如下图所示
第一次挥手:客户端发送一个FIN=1和序列号seq=m,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态
第二次挥手:服务端收到FIN后,此时有可能服务端在与其他客户端进行交互,但是会先发送确认字符ack=m+1确认收到客户端请求,此时会在发送一个新的序列号seq=v给客户端。服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态。
第三次挥手:服务端关闭与其他客户端交互后,服务端再次发送一个FIN,再次放确认字符ack=m+1,并且发送新的序列号seq=p给客户端,服务端进入LAST_ACK状态(最后确认)。
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,发送确认字符ack=p+1和序列号seq=m+1给服务器,此时服务端进入CLOSED状态,完成四次挥手。
TCP的任务是在IP层不可靠的、尽力而为服务的基础上建立一种可靠数据传输服务。TCP提供的可靠数据传输服务保证接收方进程从缓存区读出的字节流与发送方发出的字节流完全一样。TCP使用了校验、序号、确认和重传等机制来达到这一目的。