TCP三次握手和TCP四次挥手

一 TCP三次握手

TCP建立连接的过程叫做握手,握手需要客户端和服务器之间交换三个TCP报文段。如图所示,假设主机A为TCP客户端,主机B为TCP服务端。在最初时间,两端的TCP进程都是处于CLOSED状态

(1)主机A主动发起连接请求,向B发送连接请求报文段,这时首部的同步位字段SYN=1,同时选择一个初始序号seq=x,此报文段不携带数据,但要消耗一个序号(序号详情见上篇文章:序号字段);

(2)主机B收到报文段请求时,如果同意建立连接,则向A发送确认数据段,确认报文段中吧SYN和ACK字段都设置为1,确认号为ack=x+1(确认号详情见上篇文章确认号字段,注意确认确认号字段ack和ACK字段的区别),同时为自己选择一个序号seq=y,此报文段同样不携带数据;

(3)主机A收到主机B的确认后,还要给主机B发送一个确认报文段。确认报文段的ACK值为1,确认号为ack=y+1,而自己的序号为seq=x+1,当主机B收到了主机A的确认包时,彼此进入ESTABLISHED状态,准备传输数据。

TCP建立连接的过程我们称作TCP的三次握手,正是此种建连机制,保证了TCP协议的可靠传输。

在整个传输过程中,主机A向主机B发送请求连接的报文段,如果一直未收到主机B的确认数据报,主机A会一直发送建连数据报,直到收到主机B的确认数据报或者建连请求关闭。

当主机A收到了主机B的确认包,主机A会向主机B发送一个确认包,如果主机B未收到主机A的确认包,主机B会认为建连未成功,只要当均收到对方对应确认包(都能确认彼此双方均已收到),才可以正式开始传输数据。

二 TCP四次挥手

当TCP双方传输数据完毕后,需要进一步释放连接。再释放开始之前,彼此双方处于ESTABLISHED状态

(1)主机A进程首先向其TCP发出连接释放报文段,并停止发送数据,主动关闭连接,主机A会把连接释放报文段首部的终止控制位设置未1,序号seq=u,u等于前面已传送过的数据的最后一个字节的序号加1.

(2)主机B收到主机A的连接释放报文段,会立即发送出一个确认报文段,ACK=1,ack=u+1,syn=v,v等于前面主机B已传送过的数据的最后一个字节的序号+1,此时主机A和主机B之间单向连接已经释放,我们称此时的状态未半关闭状态。主机A无法向主机B发送数据,但主机B可以向主机A发送数据,且主机A需要接受。

(3)若主机B已经没有向主机A发送的数据,其应用进程就通知TCP释放连接。此时主机B发送的连接释放报文段FIN置为1,此时序号seq=w,但是确认号ack仍需要重复上次的确认号ack=u+1。

(4)主机A收到主机B的连接释放报文段后,向主机B发送确认报文段,ACK字段置为1,确认号ack=w+1,序号seq=u+1。至此,TCP连接释放。

此过程我们称为TCP的四次挥手。

相关推荐
updayday8542 小时前
客户附件不该发往旧邮箱,如何在发送前拦截 - Ping64 邮件安全管控
大数据·网络·数据库·安全·智能路由器
其实防守也摸鱼2 小时前
Chrome 扩展安全攻防实录:从攻击面到防御实践
开发语言·前端·网络·chrome·安全·web安全·php
小茬粥2 小时前
QEMU 宿主机网卡实例发现与采集脚本(标准 Linux / Proxmox VE 适配版)COLT_CMDB_QEMU_IFACE.sh
网络
见合八方3 小时前
借助半导体光放大器实现功率预算超31dB的112.5Gbit/s长距无源光网络
网络·5g·soa·光通信·激光雷达·半导体光放大器
夜雪一千4 小时前
锐捷天蝎路由器WiFi优化设置教程:解决邻居WiFi干扰、远距离卡顿
网络·智能路由器
2301_780789664 小时前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
lazy H4 小时前
【计算机网络】第 15 篇:Java BIO、NIO 与高并发网络通信——从 Socket 理解 I/O 模型
网络·后端·tcp/ip·计算机网络·nio·408
垆边人似月.4 小时前
RDMA 文件传输踩坑(四):从固定延时改造为 READY/ACK 协议
linux·服务器·网络
乐维_lwops5 小时前
汽车集团网管平台建设案例:乐维网管工具实现跨区域网络统一监控与链路可视化
网络·网管平台·it监控·链路·统一监控
运维行者_6 小时前
供应链安全成最大风险源,企业如何构建可控的运维体系?
运维·开发语言·网络·数据库·安全·云计算·流量监控