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的四次挥手。

相关推荐
云飞云共享云桌面34 分钟前
昆山精密机械公司8个Solidworks共用一台服务器
运维·服务器·网络·3d·自动化·制造
葵野寺4 小时前
【RelayMQ】基于 Java 实现轻量级消息队列(七)
java·开发语言·网络·rabbitmq·java-rabbitmq
树码小子6 小时前
Java网络初识(4):网络数据通信的基本流程 -- 封装
java·网络
zhao3266857518 小时前
海外代理IP平台Top3评测:LoongProxy、神龙动态IP、IPIPGO哪家更适合你?
服务器·网络·tcp/ip
云边云科技8 小时前
企业跨区域组网新解:SD-WAN技术打造安全稳定网络体系
运维·网络·人工智能·安全·边缘计算
XMZH030428 小时前
网络编程;TCP控制机械臂;UDP文件传输;0910;ps今天没写出来
网络·tcp/ip·udp
Katherine_lin9 小时前
UDP特点及报文结构
网络·网络协议·udp
q5673152310 小时前
自动化拨号爬虫体系:虚拟机集群部署与增量管理
运维·爬虫·网络协议·自动化
刘 大 望10 小时前
传输层:UDP/TCP协议
java·网络·网络协议·tcp/ip·udp·信息与通信
跨境小新12 小时前
Facebook广告拒登是为什么?如何减少拒登概率?
大数据·网络