TCP的三次握手与四次握手过程及状态转换
来源:互联网 发布:软件宣传推广 编辑:程序博客网 时间:2024/05/14 06:07
这是个网络编程面试的重点知识点,总结一下:
建立连接——三次握手
TCP通过三次握手建立服务器与客户端之间的连接。
所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个数据包。
三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。
在socket编程中,服务器首先调用socket、bind、listen和accept,并阻塞于accept,当客户端调用connect时,将触发三次握手过程。
第一次握手:客户端调用connect发送一个SYN数据包给服务器,并进入SYN_SENT状态,等待服务器的确认;
第二次握手:服务器收到客户端发来的SYN数据包,必须发回确认包(ACK)应答,同时自己也发送一个SYN包给客户端,此时服务器进入SYN_RCVD状态;
第三次握手:客户端收到服务器的数据后connect返回,进入ESTABLISHED状态,并向服务器发回确认包ACK,服务器接收到这个ACK后accept返回,也进入ESTABLISHED状态。
至此,三次握手完成,服务器和客户端就建立起了连接。上述过程图示如下:
终止连接——四次握手
TCP通过四次握手终止服务器与客户端之间的连接,一共需要发送四个数据包。
第一次握手:客户端或服务器调用close发起主动关闭,我们以客户端为例,客户端发送一个FIN给服务器,并进入FIN_WAIT_1状态;
第二次握手:服务器收到FIN后发送一个确认包ACK到客户端,并进入CLOSE_WAIT状态,客户端接收到ACK后进入FIN_WAIT_2状态;
第三次握手:经过一段时间,服务器做好了关闭连接的准备工作,然后调用close(代码主动调用或由内核调用)给客户端发送一个FIN,并进入LAST_ACK状态;
第四次握手:客户端收到服务器的FIN后发送ACK给服务器,然后进入TIME_WAIT状态,服务器接收到这个ACK后进入CLOSED状态。
至此四次握手完成,客户端与服务器间的连接被终止,图示如下(左边client,右边server):
- TCP的三次握手与四次握手过程及状态转换
- TCP三次握手与四次挥手的过程及原因
- TCP/IP三次握手与四次挥手过程状态详解
- TCP通信----三次握手与四次挥手状态转换
- TCP三次握手及四次挥手过程
- TCP的三次握手与四次挥手的状态详解
- TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用
- TCP/IP三次握手及断开四次握手过程
- TCP协议的三次握手与四次挥手过程图解
- TCP的三次握手与四次挥手过程介绍
- TCP三次握手 与 四次断开 的详细过程剖析
- TCP三次握手与四次挥手的过程以及原因
- 简单说明TCP的状态和三次握手、四次握手
- TCP的三次握手与四次断开
- TCP的三次握手与四次挥手
- TCP的三次握手与四次挥手
- TCP的三次握手与四次挥手
- TCP的三次握手与四次挥手
- python : BeautifulSoup 网页 table 解析范例
- hdu 1081 To The Max(矩阵中最大的和)
- java抽象类的创建
- Failed to create the java virtual machine 完全解决办法
- 树莓派_图像处理入门纪实(一)
- TCP的三次握手与四次握手过程及状态转换
- 双飞翼布局
- Angular 学习笔记
- Runtime 实现函数func方法
- 关于Android(JAVA)实例化接口假象的讨论
- 交叉工具链的使用
- 9.数据结构之二叉树
- Python的pep8(代码规范)
- 2.以普通表格型单表为模板定制模块:库存管理