1、socket中TCP的三次握手建立连接详解

我们知道tcp建立连接要进行“三次握手”,即交换三个分组。大致流程如下:

  • 客户端向服务器发送一个SYN J
  • 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1
  • 客户端再想服务器发一个确认ACK K+1

只有就完了三次握手,但是这个三次握手发生在socket的那几个函数中呢?请看下图:

图1、socket中发送的TCP三次握手

从图中可以看出,当客户端调用connect时,触发了连接请求,向服务器发送了SYN J包,这时connect进入阻塞状态;服务器监听到连接请求,即收到SYN J包,调用accept函数接收请求向客户端发送SYN K ,ACK J+1,这时accept进入阻塞状态;客户端收到服务器的SYN K ,ACK J+1之后,这时connect返回,并对SYN K进行确认;服务器收到ACK K+1时,accept返回,至此三次握手完毕,连接建立。

总结:客户端的connect在三次握手的第二个次返回,而服务器端的accept在三次握手的第三次返回。

2、socket中TCP的四次握手释放连接详解

上面介绍了socket中TCP的三次握手建立过程,及其涉及的socket函数。现在我们介绍socket中的四次握手释放连接的过程,请看下图:

图2、socket中发送的TCP四次握手

图示过程如下:

  • 某个应用进程首先调用close主动关闭连接,这时TCP发送一个FIN M;
  • 另一端接收到FIN M之后,执行被动关闭,对这个FIN进行确认。它的接收也作为文件结束符传递给应用进程,因为FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据;
  • 一段时间之后,接收到文件结束符的应用进程调用close关闭它的socket。这导致它的TCP也发送一个FIN N;
  • 接收到这个FIN的源发送端TCP对它进行确认。

这样每个方向上都有一个FIN和ACK。

=======================================================================================================

TCP的状态 (SYN, FIN, ACK, PSH, RST, URG)

在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG.

其中,对于我们日常的分析有用的就是前面的五个字段。

它们的含义是:

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,

如果只是单个的一个SYN,它表示的只是建立连接。

TCP的几次握手就是通过这样的ACK表现出来的。

但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。

RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。

一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。

PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。

TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

概念补充-TCP三次握手:

TCP(Transmission Control Protocol)传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)

第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包;

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。  第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;  第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.

TCP的三次握手建立连接和四次握手释放连接相关推荐

  1. Wireshark抓包示范:TCP三次握手建立连接和四次握手断开连接

    转载请标注: 披萨大叔的博客 http://blog.csdn.net/qq_27258799/article/details/51379508 如果您觉得这篇文章对您有帮助,请点下文章最下面的赞~ ...

  2. 用wireshark抓包分析TCP协议的三次握手连接、四次握手断开

    用wireshark抓包分析TCP协议的三次握手连接.四次握手断开 一.TCP三次握手图解 二.TCP得四次挥手过程 三.用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 一.TCP三 ...

  3. TCP三次握手建立连接和四次挥手关闭连接

    TCP三次握手 是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据. 第一次握手:客户端发送第一个包,其中S ...

  4. HTTP 三次握手  建立连接 和  四次握手断开连接

    三次握手建立连接  第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确认联 ...

  5. 什么是三次握手、什么是四次握手

    在上一篇我们了解的TCP的报文格式和TCP连接管理机制:TCP初认识 今天来理解什么是三次握手,什么是四次挥手 图1 TCP连接管理 什么是三次握手 在网络数据传输中,传输层协议TCP(传输控制协议) ...

  6. TCP断开连接的四次握手

    过程 HostA发送一条请求消息,携带序列号seq=100. HostB收到消息回复确认消息携带序列号 seq=300,确认信息ack等于101(101是HostA发送的seq+1) 第1次握手:发送 ...

  7. TCP建立连接三次握手和释放连接四次握手

    TCP建立连接三次握手和释放连接四次握手     [尊重原创,转载请注明出处]http://blog.csdn.net/guyuealian/article/details/52535294 在谈及T ...

  8. TCP协议三次握手连接四次握手断开和DOS攻击

    转载: http://hi.baidu.com/xgdcisco/blog/item/60da65f70fd8145d342acc28.html: http://blog.csdn.net/losty ...

  9. 图解TCP四次握手断开连接

    建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...

最新文章

  1. 英伟达颠覆CPU!Arm架构专为AI而生,性能超x86十倍
  2. 对accuracy、precision、recall、F1-score、ROC-AUC、PRC-AUC的一些理解
  3. webform登录操作中正则表达式运用
  4. Python的进程和线程(二)——IO密集型任务
  5. GNU (内部)make函数
  6. xx Chrome浏览器更新2020版本:黑暗模式一样使用
  7. linux安装ssh放在,Linux安装SSH
  8. gtx1050ti最稳定的驱动_笔记本1050ti显卡安装最新驱动版本 (415.27) 记录 NVIDIA显卡GeForce系列...
  9. 【原型图设计工具】墨刀使用说明
  10. YOLOV3 config理解
  11. jena mysql_在Jena框架下基于MySQL数据库实现本体的存取操作
  12. js获取android系统版本号,JS获取系统版本和手机型号
  13. 搭建Orthanc服务器-DICOM服务器
  14. tomcat9开启远程调试功能
  15. 我也写写致青春观后感
  16. maya xgen基础头发
  17. oracle配置文件(profile文件)
  18. FCN(全卷积神经网络)
  19. 一次Linux系统被攻击的分析过程
  20. 一名学生A希望访问网站www.google.com。学生A在其浏览器中输入http://www.google.com并按回车.....

热门文章

  1. 字典-变量的定义以及应用场景
  2. mysql的事物隔离级别
  3. excel转html放在tomcat,Excel转web!把excel在线打开??
  4. c语言前后指针怎么用,详解一下——C语言指针该怎么用
  5. CIDR地址块及其子网划分
  6. JAVA程序中 + 号的使用
  7. Java生成pgp密钥对_在Javascript中生成PGP密钥对,并使用加密的PGP私钥对文本进行签名...
  8. c#如何使用反射去创建一个委托_【自学C#】|| 笔记 37 创建线程
  9. CAM350 10.7 中文界面
  10. leetcode 167 Two Sum II - Input array is sorted