TCP 协议


前言

java 开发多年,一直对tcp 网络协议一知半解,作此篇记录下,不正之处 往诸君指正;


一、OSI 七层协议模型

常说的tcp/ip 协议,说到这不得不说一下 OSI 七层协议模型;具体见下图
在这里插入图片描述

二、TCP

1.报文格式

报文见下图
在这里插入图片描述

  • 端口号 : 代表的是传输到服务器的那个应用;
  • 32 位序号: 数据包的序号,标识是哪个报文;
  • 确认序号: 标识应答的是哪个报文;
  • SYN/ACK/FIN : SYN 代表是握手; ACK 代表是应答;FIN 代表是挥手;

2.三次握手

在这里插入图片描述

  1. 客户端发送握手连接报文,标识为SYN 序号seq,开始第一次握手,并消耗掉一个 seq;
  2. 服务端响应第一次握手报文 (标识为ACK),同时发送握手报文 SYN; 同时发送掉一个新的seq,开始第二次握手;
  3. 客户端收到服务端的ack 报文,同时接收服务端发来的syn 报文,并响应服务端的握手确认报文,开始第三次握手;

在这里插入图片描述

思考: 这里非要三次握手吗? 两次可以不呢?

3.四次挥手

在这里插入图片描述

  • 客户端发送关闭连接报文,标识为 FIN, seq=xxx ,开始第一次挥手;
  • 服务端收到挥手请求,并应答客户端的挥手报文,返回一个应答ack,开始第二次挥手,如果没有数据传完,则也带上数据,只到数据传输完毕;
  • 服务端发送一个挥手报文,开启第三次挥手;
  • 客户端应答服务端的挥手报文ack, 服务端收到ack 后,关闭服务端连接;

思考: 为什么握手只需要三次,而挥手却要4 次呢?


总结

思考一
网上有诸多答案,有说为了历史连接 重连的时候不去重复创建新链接的, 有说为了丢包后重试起来而进行第三次握手的; 众说纷纭;
以我个人理解,如果只有2次握手的话 只能证明 客户端知道和服务器是能正常收发消息的;而缺少第三次报文的话,服务端是没法确认服务端发送的消息客户端能收到的;

思考二
四次挥手 只有当客户端和服务端的数据都传输完毕了才进行挥手,之所以比握手多了一次就是需要将服务端的数据传输完毕给客户端,才多了一次挥手;

相关推荐

  1. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      31 阅读
  2. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      33 阅读
  3. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      22 阅读
  4. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      19 阅读
  5. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      13 阅读
  6. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      13 阅读
  7. <span style='color:red;'>TCP</span><span style='color:red;'>协议</span>

    TCP协议

    2024-06-08 04:52:02      8 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-08 04:52:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-08 04:52:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-08 04:52:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-08 04:52:02       18 阅读

热门阅读

  1. 进位(bit)

    2024-06-08 04:52:02       8 阅读
  2. 如何在Python中创建和使用自定义模块

    2024-06-08 04:52:02       11 阅读
  3. 局域网、城域网、广域网的ip

    2024-06-08 04:52:02       10 阅读
  4. SpringMVC:@RequestMapping注解

    2024-06-08 04:52:02       8 阅读
  5. 【嵌入式 - 关于MCU的内存分配】

    2024-06-08 04:52:02       9 阅读
  6. Android面试题汇总-Handler

    2024-06-08 04:52:02       11 阅读
  7. Mybatis面试系列五

    2024-06-08 04:52:02       9 阅读
  8. Vue3响应式基础——ref()和reactive()

    2024-06-08 04:52:02       7 阅读
  9. Vue封装localStorage设置过期时间

    2024-06-08 04:52:02       8 阅读
  10. 使用 Ant Design Vue 实现动态表头与数据填充

    2024-06-08 04:52:02       9 阅读
  11. learn-vue中template根节点元素Div

    2024-06-08 04:52:02       8 阅读
  12. 2024全国高考作文题解读(文心一言 4.0版本)

    2024-06-08 04:52:02       11 阅读