tcp 三次握手/四次挥手/状态变迁
http://blog.chinaunix.net/uid-22312037-id-3575121.html
1 序号: seq 序号 用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记
2 确认序号: ack序号, 只有ack标志位为1时, 确认序列号才有效 ack = seq +1
3标志位: 共6个,即URG,ACK,PSH,RST,SYN,FIN
a URG: 紧急指针有效
b ACK: 确认序号有效
c PSH: 接收方应该尽快将这个报文交给应用层
d RST: 重置连接
e SYN: 发起一个新连接
f FIN: 释放一个连接
三次握手: 指建立一个tcp连接,需要客户端和服务端总共发送3个包以确认连接的建立
1. 第一次握手: client将标志位SYN置为1,随机产生一个值seq = J,并将该数据发送给server,client进入SYN_SENT状态,等待server确认
2 第二次握手: server收到数据包后由标志位SYN=1知道client 请求建立连接,server将标志位SYN和ACK都置为1, ack = J + 1, 随机产生一个值seq = K,并将该数据包发送给client以确认连接请求, server进入SYN_RCVD状态
3 第三次握手: client收到确认,检查ack是否为J+1, ACK是否为,如果正确则将标志位ACK置为1,ack = K+1, 并将该数据包发送给server, server检查ack是否为K+1, ACK是否为1,如果正确则连接建立成功, client和server进入ESTABLISHED状态,完成三次握手,随后client和server之间可以开始传输数据了
四次挥手: 即终止tcp连接,就是指断开一个tcp连接时,需要客户端和服务端总共发送4个包以确认连接的断开
1. 第一次挥手: client发送一个FIN,用来关闭client到server的数据传送,client进入FIN_WAIT_1状态
2. 第二次挥手: server收到FIN后,发送一个ACK给client,确认序号为收到序号+1,server进入close_wait状态
3. 第三次挥手: server发送一个FIN,用来关闭server到client的数据传送,server进入LAST_ACK状态
4. 第四次挥手: client收到FIN后,client进入TIME_WAIT状态,接着发送一个ACK给server,确认序号为收到序号+1, server进入CLOSE状态,完成四次挥手