TCP三次握手,四次挥手简介

TCP(Transmission Control Protocol)传输控制协议,是一个传输层协议。

它是面向连接的、可靠的、基于IP的协议;接受端在收到发送端发送的信号后会回复一个确认信息,发送端收到这个确认信息后才会继续发送数据。

一、TCP三次握手

TCP是一个面向连接的协议,两个主机在互相发送数据之前必须先建立连接。

建立连接就是确保双方的网络是通畅的,双方可以进行通信。

TCP三次握手建立连接具体过程:

(1)TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器进入了LISTEN(监听状态)。

#在这里,发送数据的那一端是客户端,接收数据的那一段是服务端。

(2)TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这时报文首部中的SYN=1,同时选择一个序列号seq=x(该数是个随机值),此时TCP客户端进程进入了SYN_SEND(同步已发送状态)。

#TCP规定,SYN报文段不能携带数据,但需要消耗一个序列号。

(3)TCP服务器收到请求报文后,如果同意连接,则发出确认报文,确认报文中ACK=1,SYN=1,确认号ack=x+1,自己也要有一个初始的序列号seq=y,此时TCP服务进程进入SYN_RCVD(同步收到)状态。这个SYN报文也不能携带数据,但是要消耗一个序列号。

(4)TCP客户端收到确认后,还要向服务器给出确认,确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时TCP建立连接,客户端进入ESTABLISHED(已建立连接)状态。

#TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。

(5)当服务器收到客户端确认后也进入已建立连接状态,双方就可以开始通信了。

报文相关

seq序号:占32位,用来标识从发送端到接收端的数据的。

ack序号:确认序号,占32位,只有当ACK标识为1时,该序号才有效。是对发送方发送的数据的确认。

TCP的六个标志位:

SYN是握手的数据包,建立连接;
ACK是确认数据包,回应标识;
FIN是断开连接的数据包;
PSH表示数据包;
RST重置(重传) 网络不稳定时会看到许多;
URG是紧急指针。

二、TCP四次挥手

TCP四次握手终止连接。

你是不是有大大的疑惑:为什么建立连接三次握手就够了,断开连接时就需要四次连接?

这是因为,当客户端发送完数据的时候会向服务端发送一个FIN报文,而这个报文仅仅只能表示,我客户端这边数据发送完了,我不会再发送数据了,但是服务端可能还没有将数据发送完,所以就需要增加一次挥手,当服务端的数据也发送完成的时候,也会向客户端发送一个FIN报文。这样就确保了双方的数据都发送完毕并且没有丢失。

TCP四次挥手断开连接具体过程:

(1)客户端向服务端发送一个FIN报文,客户端进入FIN_WAIT_1状态。

(2)服务端收到客户端的FIN报文后,会回复一个确认信息,并继续发送没有发送完的数据,此时服务端进入CLOSE_WAIT状态。

(3)服务端也已将数据发送完毕,便向客户端发送一个FIN报文,服务端进入LAST_ACK状态。

(4)客户端收到服务端的FIN报文之后,进入Client_WAIT状态,接着发送一个ACK报文给服务端,服务端进入CLOSED状态。

大家可以参照上图观察序号的变化(只看序号变化即可,不要关注值),此处便不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值