TCP协议(二)

TCP的运输连接管理:

三次握手大概就是这么个过程。 
通过第一次握手,服务器知道客户端能够发送数据。通过第二次握手,客户端知道服务器能发送数据。结合第一次握手和第二次握手,客户端知道服务器能接收数据。结合第三次握手,服务器知道客户端能够接收数据。 
至此,完成了握手过程,客户端知道服务器能收能发,服务器知道客户端能收能发,通信连接至此建立。三次连接是保证可靠的最小握手次数,再多次握手也不能提高通信成功的概率,反而浪费资源。此时就建立了全双工的通信。 

为什么不能两次: 
当客户端想要建立连接时发送一个SYN,然后等待ACK,结果这个SYN因为网络问题没有及时到达B,所以客户端在一段时间内没收到ACK后,在发送一个SYN,服务器也成功收到,然后客户端也收到ACK,这时客户端发送的第一个SYN终于到了服务器,对于服务器来说这是一个新连接请求,然后服务器又为这个连接申请资源,返回ACK,然而这个SYN是个无效的请求,客户端收到这个SYN的ACK后也并不会理会它,而服务器却不知道,服务器会一直为这个连接维持着资源,造成资源的浪费 
那三次握手为什么可以?两次握手的问题在于服务器端不知道一个SYN是否是无效的,而三次握手机制因为客户端会给服务器回复第二次握手,也意味着服务器会等待客户端的第三次握手,如果第三次握手迟迟不来,服务器便会认为这个SYN是无效的,释放相关资源。但这时有个问题就是客户端完成第二次握手便认为连接已建立,而第三次握手可能在传输中丢失,服务端会认为连接是无效的,这时如果Client端向Server写数据,Server端将以RST包响应,方能感知到Server的错误。参考这个文章

TCP是面向连接的协议。运输连接使用拉力传送TCP报文的。

TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。因此,运输连接就有三个阶段,即:连接建立、数据传送、连接释放。

TCP连接的额建立采用客户服务器方式,主动发起连接建立的应用程序叫客户,被动地等待连接的应用进程叫服务器。

TCP的建立连接过程叫做握手,需要交换三个TCP报文段。简称三次握手。

A打算建立TCP连接时,向B发出连接请求报文段,这是首部中同步位SYN=1,同时选择初始序号seq=x。这是TCP客户进入SYN-SENT状态。

B收到连接请求报文段后,如同意连接,则向A发送确认。再确认报文段中把SYN、ACK置1,确认号是ack = x+1,同时为自己选择一个初始序号seq=y。这时TCP服务器进入SYN-RCVD状态。

TCP客户收到B的确认后,还想B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号等于seq=x+1。这时TCP连接已建立,A进入ESTABLISHED状态。

B收到A的确认后,也进入ESTABLISHED状态。

为什么不是三次?

最后一次确认主要是为了防止已失效的连接请求报文段突然又传送到了B,发生错误。

 

TCP的连接释放:

数据传输结束后通信双方都可以释放连接。现在A和B都处于ESTABLISHED状态。A的应用进程先向其TCP发出连接释放报文段,并停止再发送数据,主动关闭TCP连接。

A的连接释放报文段首部的终止位FIN置1,其序号seq=u,等于前面已传送的数据的最后一个字节加一。这是A进入FIN-WAIT-1状态,等待B的确认。

B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送的数据的最后一个字节的序号加一。然后B就进入CLOSE-WAIT状态。TCP服务器进程这是应通知高层应用进程,因而从A到B这个方向的连接就释放了,这是的TCP连接处于半关闭状态,即A已经没有数据要发送了,但若B发送数据,A任要接收。

A收到来自B的确认后,就进入FIN-WAIT-2状态,等待B发出的连接释放报文段。

若B已经没有数据了,应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使FIN=1。B还必须重复上次已发送过的确认号ack=u+1,seq=w。这时B就进入LAST-ACK状态,等待A的确认。

A在收到B的连接释放报文段后,必须对此发出确认。在确认报文段中ACK=1,ack=w+1,而自己的序号是seq=u+1。进入TIME-WAIT状态。这时还没有释放掉,必须经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。MSL叫做最长报文段寿命。当A撤销掉相应的TCB传输控制块后,就结束了这次的TCP连接。

B只要收到A发出的确认,就进入CLOSED状态。在B撤销掉相应的TCB传输控制块后,就结束了这次的TCP连接。B的结束时间比A要早一些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值