TCP通信就像谈恋爱

TCP通信就跟谈对象一样就像这样:

sequenceDiagram participant boy participant girl opt connect note over boy,girl:双方三次握手连接确定关系 boy->>girl:小姐姐谈对象吗🥰? girl->>boy:好啊,确定关系啊😘? boy->>girl:好啊🤗. end loop transfer note over boy,girl:双方交谈 girl->>boy:你真漂亮啊,送你花花🌹 boy->>girl:😊,谢谢 note over boy,girl:双方产生矛盾 boy->>girl:那个girl真漂亮😍 girl->>boy:那你跟她在一起吧😤 end opt disconnect note over boy,girl:四次挥手进行分手仪式 boy->>girl:那现在就分手吧😒 girl->>boy:嗯嗯 girl->>boy:我同意现在分手(😌谋划已久) boy->>girl:嗯嗯 end

哈哈娱乐一下,下面进行TCP的通信过程讲解(真的很像的,哈哈)。
常用的TCP标志位,有3个:SYN(synchronous,同步位) ,ACK(acknowledgement,确认位) ,FIN(finish,停止位)
两个常用号码为:Acknowledge numbe(确认号),Sequence number(顺序号)
值得注意的是mss(Maximum Segment Size,最大报文长度,每次传输的最大值)经常使用默认值1460。

第一部分:建立连接操作

  1. 客户端向服务端发送SYN标志,表示想要建立链接,同时发送己方确认号1000和最大传输报文长度1460
  2. 服务端向客户端回复SYN标志,表示可以建立链接,同时发送己方确认号5000和由对方确认号得到的顺序号5001,最大传输报文长度1024
  3. 客户端向服务端发送确认号 5001
sequenceDiagram participant client participant sever opt connect note over client,sever:三次握手连接确定双方信息 client->>sever:SYN,1000(0),<mss 1460> sever->>client:SYN,5000(0),ACK 1001,<mss 1024> client->>sever:ACK 5001 end

第二部分:循环传输

  1. 服务端向客户端发送确认号1001和顺序号5001,并传输198个字节数据。
  2. 客户端向服务端发送确认号5199和顺序号1001,并,传输20个字节数据。
  3. 客户端向服务端发送确认号 1021
sequenceDiagram participant client participant sever loop transfer note over client,sever:sever向client传输198个字节数据 sever->>client:5001(198),ACK 1001 note over client,sever:client向sever传输20个字节数据 client->>sever:1001(20),ACK 5199 sever->>client:ACK 1021 end

第三部分:断开连接操作

  1. 客户端向服务端发送FIN标志,表示想要断开链接,同时发送确认号5199和序列号1021
  2. 服务端向客户端发送确认号 1022
  3. 服务端向客户端回复发送FIN标志,表示可以断开链接,同时发送确认号1022和序列号5199
  4. 客户端向服务端发送确认号 5200
sequenceDiagram participant client participant sever opt disconnect note over client,sever:四次挥手断开,每个方向单独断开 client->>sever:FIN,1021(0),ACK 5199 sever->>client:ACK 1022 sever->>client:FIN,5199(0),ACK 1022 client->>sever:ACK 5200 end

TCP的通信全过程甘特图展示

sequenceDiagram participant client participant sever opt connect note over client,sever:三次握手连接确定双方信息 client->>sever:SYN,1000(0),<mss 1460> sever->>client:SYN,5000(0),ACK 1001,<mss 1024> client->>sever:ACK 5001 end loop transfer note over client,sever:sever向client传输198个字节数据 sever->>client:5001(198),ACK 1001 note over client,sever:client向sever传输20个字节数据 client->>sever:1001(20),ACK 5199 sever->>client:ACK 1021 end opt disconnect note over client,sever:四次挥手断开,每个方向单独断开 client->>sever:FIN,1021(0),ACK 5199 sever->>client:ACK 1022 sever->>client:FIN,5199(0),ACK 1022 client->>sever:ACK 5200 end
posted @ 2021-04-28 22:51  FlameAlpha  阅读(91)  评论(0编辑  收藏  举报