TCP连接:“三次握手,四次挥手”

最近学习了计算机网络,这是一点学习心得,大家多提意见啊。

先放图:

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

 

TCP连接过程建立时解决的三个问题:

(1)确保双方都知道对方是存在的。

(2)允许双方协商一些参数(如最大窗口值、时间戳选项等)。

(3)能够对运输实体资源(如缓存大小)进行分配。

 

1.TCP连接建立

下面是TCP连接建立图示:

 

      

假设主机A运行的是TCP客户程序,而B运行TCP服务器程序。最初两端的TCP进程都处于CLOSED(关闭)状态。(注意到A主动打开连接,而B被动打开连接)

 

BTCP服务器进程先创建传输控制块TCB(存储连接的重要信息,如:TCP连接表,当前的发送和接收序号,等等),准备接受客户进程的连接请求。然后服务器就处于LISTEN(收听)状态。如有,及作出响应。

ATCP客户进程首先创建传输控制模块TCB,然后向B发出连接请求报文段,这是首部的同步位SYN = 1,选择一个初始序号seq = x。这时,TCP客户进程进入SYN-SENT(同步已发送)状态。

B收到连接请求报文段后,如同一连接,则向A发送确认。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。

TCP客户进程收到B的确认后,向B给出确认,这时TCP连接已经建立,A进入ESTABLISHED(已建立连接)状态。

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

 

上面连接建立的过程叫做三次握手,或三次联络。(这里的“三次”是指:A发送一个报文给BB发回确认,然后A再加以确认,来回共三次。实际上这三个报文构成连接建立的“一次握手”。)完成三次握手,主机A与主机B开始传送数据。

 

为什么A还要发送一次确认呢?这里A还要发送一次确认是为了防止已失效的连接请求报文段突然又传送到B,而产生错误。

 

2.TCP连接释放

 

上图的TCP连接释放过程是四次握手,但也可以看成是两次握手。


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

 

1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。

3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值