TCP协议的三次握手和四次释放详解
来源:互联网 发布:java进阶书籍推荐知乎 编辑:程序博客网 时间:2024/06/05 12:44
(一)TCP协议的三次握手建立连接:
首先客户端动态获取一个动态端口(范围在49151 ~ 65535之间),客户端会通过这个端口主动的打开这次请求;服务器如果规定好向外界提供某种服务,那么这个服务就会对应某个端口,并且这个端口会一直处于监听状态(listener),用来监听并接收客户端的请求并处理(比如:Web服务所对应的80端口);
(1)第一次:客户端获取目标端的IP地址和端口号时,就会发送一个SYN(Synchronize) 的同步请求,告诉服务器我要请求你某种资源,并且希望我们之间的数据能够同步,随机产生一个序列号SEQ = x (Sequence),发送给服务器端;
(2)第二次:服务器端接收到客户端的这次请求,要做出确认应答,就要相应发送一个SYN + ACK(我也给你发送一个同步消息,请客户端确认),随机产生一个 SEQ = y 的序列号,发送一个 ACK = x + 1(表明:我接受到了本次请求,并且我希望你下次发送报文段时,使用序列号 x + 1),服务器端也要告诉客户端我的窗口值(我一次性所发送和接收);
(3)第三次:客户端确认ESTIBLISHED,建立连接,给其服务器发送确认信息,并以序列号SEQ = x + 1发送,ACK = y + 1(表明:我接受到服务器端的数据传输,并且我希望你你下次传输报文段时使用序列号 y +1),并且告诉服务器端我的窗口值(我一次性能发送和接收总字节数的最大容量)。
这就是三次握手的概念,第三次报文段发送完毕,客户端和服务器端进入ESTABLISHED(连接成功)状态,完成三次握手,客户端可以向服务器端开始发送数据了!
(二)TCP协议的四次释放(挥手)断开连接:
(1)第一次:客户端发送完数据了,给其服务器发送信息,释放连接。就会自动将其 FIN = 1,表示客户端通知服务器,我访问完毕,要开始断开连接了,并且随机产生一个序列号SEQ = x;
(2)第二次:服务器端向客户端发送没有发送完的报文段。服务器也要对这次连接做出确认,发送 ACK 信息,表示对你这次释放连接的信息做出确认,随机产生一个序列号
SEQ = y,发送ACK = x+ 1(表明:我接收到断开连接的消息,如果你还传报文段就以这个序列号发送)。此时此刻,主机 A 到主机 B 的连接就释放了,连接处于半连接状态,相当于 A 向 B 说:“我已经没有数据要发送了,但如果你还要发送数据,我仍然可以接收!”;
(3)第三次:真正的服务器端与客户端断开连接,任务完成,报文段发送完毕。服务器发送完没有之前发送完的报文段信息以后,再次向客户端发送报文段信息,FIN = 1表示数据报发送完毕,可以结束之间的连接了,ACK 还是第一次客户端向服务器端发送释放连接的请求信息,SEQ = y(和第二次的序列号相同),并且 ACK = x +1(表明:之间你发偶数那个的信息我确认接收到了,你还想发送报文段时,就以这个序列号);
(4)第四次:客户端接收到 FIN = 1的信息,就说明连接可以断开,任务传输终于完成。给其服务端一个确认,SEQ = x +1,并且 ACK = y +1发送给其服务器端。
整个四次释放结束,主机A 和主机B就没有关系了,完全断开连接。(实际生活中也就是关闭浏览器)
注意:以上描述的TCP协议报文段中出现随机序列号,并且每次传输的过程当中在客户端和服务器端不同(客户端使用 x,服务器端使用 y ),主要就是用来将客户端和服务器端报文段的区别开来,方便组装成字节流,通过端口传送给应用层对应的应用进程进行处理。
- TCP协议的三次握手和四次释放详解
- TCP连接的建立 (三次握手) 和释放 (四次握手)
- TCP连接的建立 (三次握手) 和释放 (四次握手)
- 描述TCP 协议三次握手,四次释放的过程
- 详解TCP协议中的三次握手和四次握手
- TCP/IP三次握手协议和四次挥手协议详解
- 剖析TCP/IP协议建立和释放连接的三次握手与四次挥手过程
- TCP 协议的三次握手和四次握手
- TCP/IP协议三次握手与四次握手释放
- TCP协议详解-三次握手、四次挥手
- TCP协议三次握手、四次挥手详解
- 【网络】关于运输层中TCP协议的三次握手连接和四次握手连接释放过程简述
- TCP三次握手和四次挥手协议
- TCP三次握手和四次挥手协议
- TCP 三次握手和四次挥手协议
- TCP三次握手和四次挥手协议
- TCP三次握手和四次挥手协议
- TCP三次握手和四次挥手协议
- Android Studio错误代码不提示问题解决
- 前端js和后端PHP函数的调用
- 文件上传
- PCI 总线初始化
- spring-boot-starter-data-rest 资源暴露策略设置 RepositoryDetectionStrategies
- TCP协议的三次握手和四次释放详解
- 基于easyui的富文本编辑器的实现
- 海航集团连续两年获评“中国企业社会责任最佳责任企业”奖 不可能债务违约
- Linux下四款Web服务器压力测试工具(http_load、webbench、ab、siege)介绍
- 工厂模式实现多种数据库连接
- 游戏服务器端框架学习
- iOS-夜间模式(换肤设置)
- PHP设计模式系列
- 通过插值让matlab画出来的三维图光滑一些、视图选择