其他分享
首页 > 其他分享> > 画图TCP协议和三次握手及四次挥手

画图TCP协议和三次握手及四次挥手

作者:互联网

1. TCP协议

1.1. TCP特性

1. TCP提供一种面向连接的、可靠的字节流服务在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP
2. TCP使用校验和,确认和重传机制来保证可靠传输
3. TCP给数据分节(给每一个传送的数据字节都编号)进行排序,并使用累积确认保证数据的顺序不变和非重复
4. TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

1.2. TCP包头结构

image-20220814033248924

1. **源端口、目标端口**:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口
   某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通
   信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即65536
2. **序列号**:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字
   节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从 0
   开始
3. **确认号**:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:
   我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
4. **数据偏移**:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要
   指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多
   远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是
   TCP首部最大60字节
5. **URG**:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只
   有当URG=1时才有效
6. **ACK**:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规
   定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
7. **PSH**:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如
   果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到
   的数据读走,就会一直停留在TCP接收缓冲区中
8. **RST**:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放
   连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志
   的TCP报文段称为复位报文段
9. **SYN**:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报
   文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意
   建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
10. **FIN**:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的
    数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
11. **窗口大小**:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方
    发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value *
    Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
12. **校验和**:提供额外的可靠性
13. **紧急指针**:标记紧急数据在数据字段中的位置
14. **选项部分**:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:
    (2^4-1)*4-20=40字节

2. TCP三次握手

2.1. 说明

1. TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。
2. 客户端在收发数据前要使用 connect() 函数和服务器建立连接。建立连接的目的是保证IP地址、端口、物理链路等正确无误,为数据的传输开辟通道。
3. TCP建立连接时要传输三个数据包,俗称三次握手(Three-way Handshaking)

image-20220814032820698

2.2. 三次握手过程详解

3. TCP四次挥手

3.1. 说明

1.所谓四次挥手(Four-Way Wavehand)即终止 TCP 连接,就是指数据传送完毕需要断开一个 TCP 连接时,需要客户端和服务端总共发送 4 个包以确认连接的断开。在 socket 编程中,这一过程由客户端或服务端任一方执行`close`来触发。
2.由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

image-20220814032924791

标签:ACK,报文,画图,TCP,发送,四次,连接,客户端
来源: https://www.cnblogs.com/zxl1024320609/p/16586909.html