5.9.1 TCP的连接建立

  • TCP连接建立需要在客户和服务器之间交换3个TCP报文段。
    客户端和服务器端的报文段需要交互三次,称之为三报文握手。
    在这里插入图片描述

  • 如上图,
    假定主机A运行的是 TCP客户程序 ,而B运行 TCP服务器程序
    起初两端的TCP进程都处于 CLOSED(关闭)状态
    B的TCP服务器进程先创建 传输控制块TCB ,准备接受客户进程的连接请求。然后 服务器进程 就处于 LISTEN(收听)状态 ,等待客户的连接请求;若有则作出响应。
    A的TCP客户进程也是首先创建 传输控制模块TCB ,① 然后在打算建立TCP连接时,向B发出 连接请求报文段 ;此报文段首部中的 同步位SYN=1 (TCP规定 SYN报文段 即SYN=1的报文段不能携带数据,但要消耗掉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规定ACK报文段可以携带数据,若需携带数据也不消耗序号,此情况下下一个数据报文段的序号仍是seq=x+1)。此时TCP连接已经建立,A进入 ESTABLISHED(已建立连接)状态 ,B收到A的确认后,也进入 ESTABLISHED状态。

  • 总结
    1、A向B发送请求;
    2、B向A发送确认,同时B向A发送请求;
    3、A向B确认连接;

  • A最后再发送一次确认的必要性
    防止 已失效的连接请求报文段 突然又传送到了B,产生错误。
    如:
    A发出的 第一个连接请求报文 迟到了,于是A超时重传了 第二个连接请求报文
    迟到的这个报文 在AB连接释放后才到达B;
    若不需要A的最后一次确认,此时只要B向A发回对这个迟到的连接请求报文的确认,B就以为建立了连接;但是A并没有发出建立连接的请求,也不会向B发送数据,而B会一直等待A发来数据,B的许多资源被浪费

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值