TCP通信的三次握手和四次挥手

TCP通信的三次握手和四次挥手 TCP(Transmission Control Protocol) 

传输控制协议 

三次握手

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

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急) Sequence number(顺序号码) Acknowledge number(确认号码) 

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接第一次握手:客户端发送syn包(syn=1),随即产生seq number=1234567的数据包到服务器,并进入SYN_SEND状态,等待服务器确认。服务器由syn=1可知,客户端要求建立连接。【第一次握手发送两个包】

第二次握手:服务器端发送ack(ack=1)和ack number=1234567+1来嗯个包,表示确认受到客户端发来的包,同时又向客户端发送syn包(syn=1)和seq number=2345678两个包到客户端,表示向客户要求建立连接,并且进入SYN_RECV状态。  

【第二次握手发送四个包】

第三次握手:客户端发送ack包(ack=1),ack seq number=2345678+1两个包发送给服务器端,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.    

【第三次握手发送两个包】

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


TCP为什么非要进行三次连接呢?

自己是这样理解的

1.安全

每次在向对方请求建立连接的时候都会发送一个seq number,回应的时候也会发送一个ack number=seq number+1 这样包就确定是目的主机发的,不存在被换包的情况。

2.防止死索

具体和下面所讲的意思基本相同

在谢希仁的《计算机网络》中是这样说的:      为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。在书中同时举了一个例子,如下: “已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”


TCP四次分手

第一次挥手:客户端向服务器端发送FIN包(FIN=1)seq unmber=X 

【第一次挥手发送两个包】

第二次挥手:服务端向客户端发送ACK(ACK=1) ack number=X+1

【第二次挥手发送两个包】

第三次挥手:服务端向客户端发送FIN(FIN=1)seq number=Z 

【第三次挥手发送两个包】

第四次挥手:客户端向服务端发送ACK(ACK=1),ack number=Z+1

【第四次挥手发送两个包】


为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值