马哥linux干货分享之tcp三次握手四次断开详解

magedu_linux03 发布于 2014/08/28 14:53
阅读 245
收藏 3

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,6种标示:
SYN(synchronous同部位)tcp握手的第一次

ACK(acknowledgement 确认位),建立连接时用到的

PSH(push) 推送位,若为1,代表要求对方立即传送缓冲区内的其他对应封包,

FIN(finish结束

RST(reset重置)

URG(urgent紧急),为1表示紧急的报文封包


Sequence number序列号

Acknowledge number确认号


三次握手:


第一次握手:client发送位码为syn1,随机产生seq number=1000的数据包到服务器,serverSYN=1知道,client要求建立联机请求,
第二次握手:sever收到请求后要确认联机信息,向client发送ack number=(clientseq+1),syn=1,ack=1,随机产生seq=6777的数据包
第三次握手:client收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1
若正确,client会再发送ack number=(serverseq+1),ack=1(syn=0)server收到后确认seq值与ack=1则连接建立成功。
完成三次握手,双方开始传送数据。



TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接:


第一次握手:当客户端要建立连接时,首先发送syn=1,并随机产生一个序列号的报文到服务器,并进入SYN_SEND状态,等待服务器确认, 这时服务器是LISTEN状态
第二次握手:服务器收到报文请求,由SYN=1知道客户端要建立链接请求,向客户端发送ack number(客户端序列号+1)ack=1syn=1,同时自己也发送一个SYN包(syn=k),
SYN+ACK包,此时服务器进入SYN_RECV状态,

第三次握手:客户端收到服务器的SYNACK包,向服务器发送确认包ACK(服务器的序列号+1)ack=1server收到后确认seq值与ack=1,客户端和服务器进入 ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据.


一个完整的三次握手也就是请求---应答---再次确认




四次断开:

 

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。
收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。
首先进行关闭的一方是主动断开方,而另一方是被动断开方。


四次断开过程:


1、客户端发送一个FIN用来关闭客户端到服务器的数据传送,此时客户端进入TIME_WAIT1状态

2服务器收到这个FIN,它发回一个ACK,确认号为收到的序号加1,和SYN一样,一个FIN将占用一个序号,此时服务器进入CLOSE_WAIT状态,客户端端进入TIME_WAIT2
3当服务器端也没有要传送的数据时,服务器关闭与客户端的连接,发送一个FIN给客户端A,服务器进入LAST_ACK
4客户端发回ACK报文确认,并将确认号设置为收到序号加1,客户端进入TIME_WAIT,等待2MSL--120s,服务器端接后进入CLOSED

http://www.magedu.com

 

加载中
返回顶部
顶部