TCP协议介绍和三次握手,四次挥手的原理

TCP/IP协议簇的传输层协议:

TCP和UDP

TCP(Transmission Control Protocol):传输控制协议
面向连接的,可靠的进程到进程通信的协议。TCP提供全双工服务,即数据可在同一时间双向传输,每个TCP都有发送缓存和接受缓存,用来临时存储数据。(通信双方之间在进行通信之前要先建立连接,例如打电话)。

TCP报文段
TCP将若干个字节构成一个分组,叫报文段(Segment)
TCP报文段封装在IP数据报中
在这里插入图片描述
1.源端口号:发送方进程对应的端口号。
2.目标端口号:对应的是接收端的进程的端口号。
3.序号:发送端为每个字节进行编号,便于接受端正确重组。
4.确认号:用于确认发送端的信息。这个是用来告诉发送端这个序号之前的数据段都已经收到了,如确认号是N,就表示前N-1个数据段都已收到。
5.首部长度:用它可以确定TCP首部数据结构的字节长度。一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节。
6.保留:作为扩展位,目前没有用到。
7.控制位:
URG:紧急位。紧急指针有效位。
ACK:确认位。只有当ACK=1时,确认序列号字段才有效;当ACK=0 时,确认号字段无效。
PSH:急迫位。标志位为1时,要求接收方尽快将数据段送达应用层。
RST:重置位。当RST值为1时,通知重新建立TCP连接。
SYN:同步(连接)位。同步序号位,TCP需要建立连接时将这个值设为1。
FIN:断开位。当TCP完成数据传输需要断开连接时,提出断开连接的一方将这个值设为1。
8.窗口大小:说明本地可接收数据段的数目。这个值的大小是可变的,当网络通畅时接收端响应消息会将这个窗口值变大以加快传输速度,当网络不稳定时减小这个值可保证网络数据的可靠传输,TCP中的流量控制机制就是依靠变化窗口的大小实现的。比如下载速度从一开始的几KB逐渐提升到几MB 的过程。
9校验和:用来做差错控制。字段检验的范围包括首部和数据这两部分。数据段在发送时和到达目的地时会进行校验和计算,若这两次的校验和一致,则说明数据基本是正确的,否则将认为该数据已被破坏,接收端将丢弃该数据。
10.紧急指针:和URG配合使用,当URG=1时有效。
11.选项:在TCP首部可以有多达40字节的可选信息.例如:最大报文段长度MSS(Maximum Segment Size).MSS告诉对方TCP:“我的缓存所能接收的报文段的数据字段的最大长度是MSS个字节”。

UDP(User Datagram Protocaol):用户数据报协议
是无连接、不保证可靠性的传输层协议,也就是说发送端不关心发送的数据是否到达目标主机、数据是否出错等,收到数据的主机也不会告诉发送方是否收到了数据,它的可靠性由上层协议来保障。(传输数据速度更快、效率更高)

TCP的“三次握手”和“四次挥手”

这里先把PC1作为客户端,PC2作为服务端

“三次握手”
在这里插入图片描述
第一次握手是由客户端发起,客户端会向服务端发送一个报文,在报文里面SYN为标志位,Seq=x,SYN=1,当服务端收到这个报文之后就知道客户端要跟我发送一个新的连接,于是客户端就会向客户端发送一个确认消息包,这个消息包Seq=y,Ack=x+1,SYN=1,ACK=1。以上两次握手之后对于客户端而言其实是已经知道所有的信息,就是我既能给服务端发消息且还能收到服务端的消息,但是对于服务端而言两次握手是不够的,因为到目前为止服务端只知道一件事情,就是客户端发给我的消息我能知道,但是我发给客户端的消息客户端能不能收到还不知道。所以还要进行第三次握手,第三次握手就是当客户端收到服务端确认消息的报文之后,还要继续给服务端进行一个回应,Seq=x+1,Ack=y+1,ACK=1的确认消息。通过以上三次连接后,不管是客户端还是服务端都彼此知道了既能给彼此发消息也能收到对方的消息,那么这个连接就可以被安全的建立了。

四次握手
在这里插入图片描述
四次握手机制也是由客户端发起的,客户端会发送一个报文,在报文里面FIN/ACK位作为标志位,FIN=1,ACK=1。当服务端收到这个报文之后就知道了客户端想要和我断开连接。但是此时服务端不一定能做好准备,因为当客户端发断开连接这个消息之后对于服务端而言极有可能还有未发送完的消息,还有继续发送。所以对于服务端而言只能进行一个消息确认,就是我先告诉服务端,我知道你要和我断开连接了,但是我这里可能还有没做好准备需要等我一下,等会我会告诉你,于是发完这个消息确认包之后,可能过一会他就会继续发送一个断开连接的报文,也是一个FIN/ACK为标志位的报文,FIN=1,ACK=1.是由服务端发送给客户端的。这个报文表示了服务端已经准备好了断开报文的准备,那么当这个报文发给了客户端之后,客户端同样要给服务端继续发送一个消息确认的报文,一共有四次,通过这四次相互沟通和连接,我就知道了不管是服务端还是客户端都已经做好了断开连接的准备,于是连接就断开了。

### TCP/IP 协议中的四次挥手过程与原理 #### 四次挥手的过程 当应用程序结束通信时,会触发传输控制协议 (TCP) 的终止连接机制。这一过程涉及四个步骤,通常被称为“四次挥手”。以下是详细的流程: - **第一次挥手**:主动关闭方(通常是客户端)发送一个 FIN 报文段给被动关闭方(通常是服务器),表示希望断开连接并停止数据传输[^1]。 ```plaintext Client Server | | FIN -> | | | ``` - **第二次挥手**:接收到 FIN 后,被动关闭方返回一个 ACK 报文作为响应,确认编号为收到的 FIN 序列号加一。此时,虽然逻辑上已经同意断开连接,但实际上可能还有未处理的数据要传送给对方,因此不会立即关闭连接[^2]。 ```plaintext Client Server | | <- ACK | | | ``` - **第三次挥手**:一旦被动关闭方完成了所有待发送的数据传递,则也会发出自己的 FIN 请求来通知另一端可以彻底切断连接了[^3]。 ```plaintext Client Server | | <- FIN | | | ``` - **第四次挥手**:最后一步是由最初发起中断请求的一侧回应最后一个 ACK 给另一侧,表明其接收到了对方发来的 FIN 并准备好完全释放这条链路资源。至此整个双向链接正式解除[^4]。 ```plaintext Client Server | | ACK -> | | | ``` #### 三次握手解释 相比之下,“三次握手”的目的是为了建立一个新的可靠连接而不是拆除现有连接。“三次握手”确保双方都能正确地初始化各自的缓冲区其他必要参数,并验证彼此的身份以及网络路径的有效性。具体来说,在这个过程中每一边都会告知对方自己期望使用的初始序列号以便后续消息能够有序到达目的地而不丢失或重复。 - 客户端首先发送带有同步标志(SYN)设置为1的数据包到服务器,同时携带一个随机选择的起始序列号X。 - 接着服务器回复一个同样设置了SYN位并且包含了它自己的初始序列数Y加上对前一条信息的认可(通过将ACK置为1并将确认号码设为X+1)的消息给客户机。 - 当客户机再次接收到上述应答之后再回送一次仅含ACK标记的信息回去,其中包含对于之前所接受到的那个新序列数值Y+1的确证;自此以后二者便进入了稳定的状态——即所谓的 ESTABLISHED 阶段,准备就绪用于实际的数据交换活动开始了[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值