目录
一、TCP协议
1、什么是TCP协议?
2、TCP报文的封装格式
二、三次握手
1、为什么要进行三次握手呢?
三次握手的过程如下:
2、三次握手的详细过程以及客户端(Client)和服务器(Server)的状态
1、第一次握手,首先由Client发送TCP请求报文给Server,其中请求报文包含了标志位SYN=1,同时包含了一个初始序列号seq=x
2、第二次握手,由Server发送TCP确认报文给Client,其中的确认报文包含了标志位SYN=1,ACK=1,确认号为ack=x+1,同时也为自己选择一个初始序列号为seq=y
3、第三次握手,由Client发送TCP确认报文给Server,意思是给予Server确认的信号,其中包含了的标志位位ACK=1,确认号为ack=y+1,序列号为seq=x+1
状态解释:
三、四次挥手
1、为什么要进行四次挥手?
四次挥手的过程如下:
2、四次挥手的详细过程以及客户端(Client)和服务器(Server)的状态
1、第一次挥手,首先由Client发送TCP连接释放报文给Server,Client也停止发送数据,主动关闭TCP连接,其中连接释放报文包含了标志位FIN=1,同时包含了一个初始序列号seq=u
2、第二次挥手,当Server接收到了Client发送过来的TCP连接释放报文,它就会给Client回应一个TCP确认报文,其中包含了标志位ACK=1,同时包含了确认号为ack=u+1,同时也为自己选择了一个序列号为seq=v
3、第三次挥手,当Server已经没有向Client发送数据了,它就会 被动关闭 自己的CLOSE-WAIT状态,并且向Client发送TCP连接释放报文,其中包含了标志位FIN=1,ACK=1,假设Server现在的序列号为seq=w(因为Server在这CLOSE-WAIT半关闭状态又发送了一些数据给了Client,导致序列号发生改变),而且Server还要重复发送上次已经发送的确认号ack=u+1
4、第四次挥手,当Client正在从FIN-WAIT-2状态转化为TIME-WAIT时,他会向Server发送TCP确认包,其中包含了标志位ACK=1,确认号为ack=w+1,序列号为seq=u+1
状态解释:
四、UDP协议
1、什么是UDP协议?
2、UDP报文的封装格式
TCP协议是一种传输层协议,它是基于连接的、可靠的协议,用于在网络上可靠地传输数据。TCP协议通过三次握手建立连接,通过四次挥手断开连接。TCP协议提供流量控制、拥塞控制、数据重传等机制,确保数据的可靠传输。TCP协议常用于Web浏览、电子邮件、文件传输等应用中。它是传输控制协议,是可靠的,是面向连接的协议,但是传输效率低很低,如果需要传输效率高的化,可以选用UDP协议
源端口号:发送TCP进程对应的端口号
目标端口号:目标端接受进程的端口号
32位序列号:seq序号,0~2^32-1范围内,数据段标记,用于到目的端对到达包的重组
32位确认号:ack序号,0-2^32-1范围内,对发送端的确认信息,告诉发送端这个序号之前的数据段都收到了
其中6个标志位为:
URG:表示紧急指针(urgent pointer)是否有效。
ACK:表示确认号是否有效。
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在TCP接收缓冲区中)。
RST --》reset 重置位:表示要求对方重新建立连接。
SYN --》sync 同步:第一次请求建立连接
FIN --》表示通知对方本端要关闭连接了。
还有16位窗口大小表示指明本地可接收数据的字节数大小!
窗口大小:0-65535 接受多少数据 -》字节
计算机进行三次握手的主要目的是确保通信双方之间建立可靠的连接。
第一次握手:客户端向服务器发送一个连接请求报文段,其中包含一个随机数作为初始序列号。
第二次握手:服务器接收到客户端的请求后,向客户端发送一个确认报文段,其中包含确定的序列号和一个随机数作为确认号。
第三次握手:客户端接收到服务器的确认报文段后,再次向服务器发送一个确认报文段,其中包含确定的序列号和确认号。
通过这个过程,通信双方可以确保彼此都能够接收到对方的消息,并且能够正确地解析和处理这些消息。如果只进行两次握手,那么就无法确保连接的可靠性,因为可能会发生一些意外情况,例如客户端发送的连接请求报文段丢失或者被篡改。通过进行三次握手,可以最大程度地减少这些意外情况的发生,从而保证通信的安全和可靠性。
三次握手的过程如下图所示:
这时Client从CLOSED状态进入了SYN-SENT状态,Server由LISTEN状态向SYN-RCVD状态转换。
这时Server进入SYN-RCVD状态,而当Client接收到Server发送的TCP确认报文后,它由SYN-SENT状态转换为ESTABLISHED状态了。
当Server收到Client发送的TCP确认报文后,Server也从SYN-RCVD状态转换为ESTABLISHED状态了。
CLOSE:表示关闭连接状态,双方不会进行数据传输
LISTEN:表示监听状态,服务器(被动方)是否准备好与客户端(主动方)建立连接的状态。
SYN-SENT:表示客户端已经向服务器发送了SYN包,等待服务器确认(ACK)并发送SYN包的确认(SYN-ACK)。这个状态表明客户端正在尝试建立一个连接,并等待服务器的响应。
SYN-RCVD:表示了服务器等待客户端发送ACK确认消息的状态,服务器已经准备好建立连接,并且正在等待客户端的确认消息
ESTABLISHED:表示了客户端和服务器之间建立了可靠的连接,并且双方可以开始进行数据传输。在这个状态下,客户端和服务器都可以发送和接收数据。该状态是TCP连接的正常工作状态。
四次挥手是TCP连接的关闭过程,其目的是确保双方都已经完成数据的传输并释放相关资源,以便其他连接可以使用这些资源。
1. 客户端发送FIN报文段:客户端想要关闭连接,发送FIN报文段给服务器。
2. 服务器发送ACK报文段:服务器接收到客户端的FIN报文段后,发送ACK报文段给客户端,表示接收到了关闭请求。
3. 服务器发送FIN报文段:服务器也想要关闭连接,发送FIN报文段给客户端。
4. 客户端发送ACK报文段:客户端接收到服务器的FIN报文段后,发送ACK报文段给服务器,表示接收到了关闭请求。
这四次挥手是为了确保双方都能够确认连接已经关闭,避免出现数据丢失或重复发送的情况。因为TCP连接是全双工的,所以需要双方都发送FIN和ACK报文段来确认连接的关闭。而且四次挥手的目的是让双方都能够确认彼此已经完成数据传输,并释放相关资源,防止出现资源浪费的情况。
四次挥手的过程如下图所示:
这时候Client从ESTABLISHED状态转换为了FIN-WAIT-1(终止等待1)状态,等待Server的确认
这时Server由ESTABLISHED状态转换为CLOSE-WAIT状态,Client接收到了Server发送的TCP确认报文,就会从FIN-WAIT-1状态转换为FIN-WAIT-2状态了
这时Server就会从CLOSE-WAIT状态退出来,转变为LAST-ACK状态,等待Client的回应。当Client接收到了Server发送过来的TCP连接释放报文,它就会从FIN-WAIT-2状态转化为TIME-WAIT状态
这时Client会在TIME-WAIT状态等待2MSL时间后进入CLOSE状态,当Server接收到了Client发送的TCP确认包后,它会从LAST-ACK状态转换为CLOSE状态。
至此TCP的四次挥手完成了,Client和Server成功的断开了连接。
CLOSE:表示关闭连接状态,双方不会进行数据传输
ESTABLISHED:表示了客户端和服务器之间建立了可靠的连接,并且双方可以开始进行数据传输。在这个状态下,客户端和服务器都可以发送和接收数据。该状态是TCP连接的正常工作状态。
FIN-WAIT-1:表示TCP连接的一方已经发送了FIN(结束信号)并等待对方确认。在这个状态下,该方仍然可以接收对方发送的数据。如果对方确认了FIN,那么连接进入FIN-WAIT-2状态;如果对方发送了数据,那么连接回到ESTABLISHED状态。如果在一定时间内没有收到对方的确认或者数据,那么连接将超时并关闭。
FIN-WAIT-2:表示TCP连接中的一方已经发送了FIN报文段,即表示其已经完成了数据传输,并要求关闭连接。在此状态下,该方等待对方发送确认报文段,以确认对方已经接收到了FIN报文段并同意关闭连接。当该方收到确认报文段后,它会进入到TIME-WAIT状态,等待一定时间后关闭连接。如果在等待时间内没有收到对方的确认报文段,该方会重新发送FIN报文段,进入到FIN-WAIT-2状态继续等待。
CLOSE-WAIT:表示TCP连接的一端已经发送了FIN,表示它已经完成了所有的数据传输,并要求关闭连接。但是,另一端可能还有数据需要传输,因此它会进入CLOSE-WAIT状态,等待另一端发送完数据后再关闭连接。在这个状态下,TCP连接仍然是打开的,但是不再传输数据。一旦另一端发送完数据,CLOSE-WAIT状态的一端就会发送ACK,表示它已经收到了所有数据,然后进入LAST-ACK状态,等待另一端发送FIN来关闭连接。
LAST-ACK:表示TCP连接的一方(即发送FIN的一方)已经发送了FIN和ACK,等待对方发送最后的ACK确认,以便确认连接已经彻底关闭。在此状态下,TCP连接的一方仍然可以接收数据,但不能再发送数据。一旦收到对方的最后ACK确认,连接就会被完全关闭。
TIME-WAIT:是指在TCP连接关闭时,一方发送了最后的ACK确认后,会进入TIME-WAIT状态,并等待2倍的最大报文段生存时间(2MSL)后才能彻底关闭连接。这个状态的目的是为了保证网络上所有的报文段都能够被接收方正确地处理完毕,避免出现重复的数据包或者错误的连接。在TIME-WAIT状态下,连接不再接收或发送任何数据,但是仍然保持着连接状态,直到超时后才能彻底关闭。这个状态的存在可以保证TCP连接的可靠性和稳定性。
UDP(User Datagram Protocol)是一种无连接的传输层协议,它不保证数据的可靠性和完整性,也不提供流控制和拥塞控制。UDP协议非常轻量级,适用于一些实时性要求高、可容忍数据丢失的应用,例如音频、视频传输、网络游戏等。UDP协议的优点是传输速度快、延迟低、传输效率高,缺点是不可靠,需要应用层自己实现数据的可靠性和完整性
其中,源端口号和目的端口号各占16位,长度字段指定UDP报文的长度,包括UDP头和数据部分,校验和字段用于检测UDP报文是否损坏。在UDP报文中,数据部分的长度是可变的,因此UDP报文的总长度也是可变的。校验和字段是可选的,如果不使用校验和,则该字段的值为0。