三次握手:

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)

B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。

  • 第一次握手:A的TCP客户进程也是首先创建传输控制块TCB,然后向B发出连接请求报文段,(首部的同步位SYN=1,初始序号seq=x),(SYN=1的报文段不能携带数据)但要消耗掉一个序号,此时TCP客户进程进入SYN-SENT(同步已发送)状态。
  • 第二次握手:B收到连接请求报文段后,如同意建立连接,则向A发送确认,在确认报文段中(SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y),测试TCP服务器进程进入SYN-RCVD(同步收到)状态;
  • 第三次握手:TCP客户进程收到B的确认后,要向B给出确认报文段(ACK=1,确认号ack=y+1,序号seq=x+1)(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。TCP连接已经建立,A进入ESTABLISHED(已建立连接)。

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

四次挥手:

  • 假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说“我Client端没有数据要发给你了,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,”
  • 告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。
  • 当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。Client端收到FIN报文后,”就知道可以关闭连接了。
  • 但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。
  • Ok,TCP连接就这样关闭了!

最新文章

  1. 深入java集合学习2-ArrayList的实现原理
  2. iOS原生项目中集成React Native
  3. MySQL安装(转)
  4. [mysql] linux 下mysql 5.7.12 安装
  5. Pull Requests
  6. ASP.net 的URL路由选择(System.Web.Routing.dll)
  7. 使用Doxygen工具生成Cocos2D-x 2.1.0文档
  8. C#基础——集合及特殊集合
  9. transform-origin 的定位
  10. 网页中使用CSS和JS阻止用户选择内容
  11. 在jdbc中使用properites文件进行使用
  12. hbase 导入导出、hbase shell 基本命令。
  13. JUnit介绍(转)
  14. Codeforces 1096D - Easy Problem - [DP]
  15. [Dynamics 365] 关于Currency的一点随笔
  16. 【51Nod】1920 空间统计学 状压DP
  17. 第十一章 Helm-kubernetes的包管理器(下)
  18. 【hdu4135】【hdu2841】【hdu1695】一类通过容斥定理求区间互质的方法
  19. Django 后台 无法显示文章标题
  20. 关于fork()父子进程返回值的问题

热门文章

  1. uber_go_guide解析(二)
  2. 新蜂商城的mybatis plus版本,添加了秒杀专区、优惠卷领取以及后台搜索功能
  3. 解锁Renderbus客户端使用新技巧----快速渲染效果图篇
  4. 剑指offer 面试题9:用两个栈实现队列
  5. memcached+magent的集群部署详细过程
  6. mysql的安全问题
  7. oracle 存储过程和包的权限
  8. Redis中哈希分布不均匀该怎么办
  9. kernel升级模式RKS让人振奋
  10. three.js cannon.js物理引擎地形生成器和使用指针锁定控件