tpc三次握手和四次断开的过程讲解

dzdp163 2014-08-15 05:08:55


TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:
SYN(synchronous同部位),tcp握手的第一次
ACK(acknowledgement 确认位),建立连接时用到的
PSH(push) 推送位,若为1,代表要求对方立即传送缓冲区内的其他对应封包,
FIN(finish结束)
RST(reset重置)
URG(urgent紧急),为1表示紧急的报文封包

Sequence number序列号
Acknowledge number确认号

三次握手:


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


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

第一次握手:当客户端要建立连接时,首先发送syn=1,并随机产生一个序列号的报文到服务器,并进入SYN_SEND状态,等待服务器确认, 这时服务器是LISTEN状态
第二次握手:服务器收到报文请求,由SYN=1知道客户端要建立链接请求,向客户端发送ack number(客户端序列号+1),ack=1,syn=1,同时自己也发送一个SYN包(syn=k),
即SYN+ACK包,此时服务器进入SYN_RECV状态,
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(服务器的序列号+1),ack=1,server收到后确认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
...全文
12152 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
@世宁 2014-10-29
  • 打赏
  • 举报
回复
学到东西,讲得很不错
  • 打赏
  • 举报
回复
lovelace521 2014-08-15
  • 打赏
  • 举报
回复
哈哈,看到了马哥教育的字样,赞一个~

3,286

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 实用资料发布区
社区管理员
  • 实用资料发布区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧