连接的三次握手:

1握、client向server发送连接请求,发送的报文是:syn=1,seq number=生成的随机数x 。  这时client的状态是SYN_SEND
2握、server从syn=1知道client要进行连接。 然后向客户端回复信息,即ack number=x+1(x是client向server发送的seq number),syn=1,ack=1,seq=随机数y ,同时在server中为client分配系统资源。  这时server的状态是SYN_RECV
3握、client收到请求后检查ack number是否正常。(即是不是等于seq number+),同时检查ack是否为1.  如果都正确 ,client会再向server 发送ack number=y+1,ack=1。 server收到后确认seq与ack ,正确则连接建立成功。   并分配client资源。  最后client与server的状态皆是ESTABLISHED

 
中断的四次挥手:
中断的发起端可以是client,也可以是server
假设是client发起中断请求
1、client向server发送FIN报文, 告知server我要中断连接。 这时client的状态是FIN_WART_1
2、server收到FIN后,如果没有数据发送完毕,那么向client发送ACK。  代表我收到你的中断申请,但是我还有数据发送给你。  这时client状态为FIN_WAIT_2。  server的状态为CLOSE_WAIT
3、当server已经没有数据往client发送时,这时代表可以中断连接了,那么向client发送FIN,意思是说,OK啦,我这边数据已经给你都发送完毕了,已经准备好中断边接了。  这时server的状态是LAST_ACK
4、client接收到server的FIN后,向server回复ack,这时状态变为TIME_WAIT。 并不会马上关闭连接。 而是在30秒(这个是可配置的)后关闭连接(原因是server是收到ack后才会关闭连接,但是可能因为网络的原因server收到ack出现了延迟,所以就等30秒后再关闭client的连接)
5、server收到ack后,关闭连接。状态变为CLOSED。
6、过30秒(可配置)后,client关闭连接。 状态变为CLOSED。
 
 
有时间时,应该自己再补一张流程。 这样记忆起来就更加清晰了。
 
参考:

最新文章

  1. MongoDB学习笔记~数据模型属性为集合时应该为它初始化
  2. java full gc
  3. Web Serveice服务代理类生成及编译
  4. Linux环境变量的添加设置
  5. HTML与XHTML的区别
  6. 获取View的高度宽度,屏幕参数,状态栏高度
  7. WPF中的字体改善
  8. 教程:30分钟学会Adobe Premiere
  9. mysql 添加[取消]timestamp的自动更新
  10. c# 窗体最小化后截图实现
  11. 3.Java 加解密技术系列之 SHA
  12. BZOJ4079 [Wf2014]Pachinko
  13. Android为TV端助力:自定义view之太阳
  14. 简单python程序练习
  15. Win32汇编学习(9):窗口控件
  16. 基于opencv和QT的摄像头采集代码( GoQTtemplate3持续更新)
  17. Qt的Radio Button(单选按钮)
  18. python的数字图像处理学习(3)
  19. android适配不同分辨率的手机
  20. 20155315庄艺霖第三次作业之Linux初体验

热门文章

  1. 实现JavaScript自定义函数的整合、链式调用及类的封装
  2. iOS 工作遇到问题记录
  3. mac安装软件管家homebrew
  4. struts/Servlet,action转到jsp后,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)
  5. Eclipse 输入提示设置
  6. win平台检查内存泄露
  7. Java入门学习知识点汇总
  8. codeforces 471C.MUH and House of Cards 解题报告
  9. css样式自适应,支持数字
  10. 【xml】python的lxml库使用