文章目录

  • I TCP 传输过程
  • II TCP 传输示例
  • III TCP 传输特殊情况处理

I TCP 传输过程


1. TCP 传输过程 : 排序 , 顺序发送 , 顺序组装 ;

  • 排序 : TCP 发送数据时 , 会将数据拆分成不同的片段 , 并对这些片段进行排序 ;
  • 顺序发送 : 将排序好的数据片段顺序发送 ;
  • 顺序组装 : 在接收端按照顺序将数据片段组装成原数据 ;

2. 超时重发机制 : 如果某个数据片没有到达 , 或者送达时间超时 , 接收方会将相关信息反馈给发送方 , 发送方需要将该数据片重新发送 ;

3. 拆分数据作用 ( 节省流量 ) : 当数据没有送达或者超时 , 是需要重新发送数据的 , 如果不拆分数据 , 将一整包数据整体发送 , 如果发送失败 , 需要重新发送整个数据 , 这样就非常浪费流量 ;

4. 数据重发机制 : 服务器端收到客户端发送的数据时 , 其会定时向客户端发送服务器端已经收到的数据 , 如果客户端没有收到服务器端反馈的某条数据已经送达 , 客户端就会认为该数据没有送达 , 客户端重新将该数据重新发送一遍 ;

II TCP 传输示例


1. A 向 B 发送 5 个数据包 :

  • ① 发送第一帧数据 ( 完成 ) : 首先将第一帧数据发送给 B , B 收到 1 数据 , 将收到 1 数据反馈给 A , 表明已经收到了第一帧数据 ;
  • ② 发送第二帧数据 ( 反馈信息未送达 ) : 发送第二帧数据 , 接收方收到了 2 数据 , 但是反馈信息没能发送给 A ;
  • ③ 发送第三帧数据 ( 没有送达 B ) : 发送的第三帧数据没有发送到 B , 中途丢包了 ;
  • ④ 发送第四帧数据 ( 反馈信息未送达 ) : 第四帧数据送达 B , 但是 B 的反馈信息没有送达 A ;
  • ⑤ 发送第五帧数据 ( 完成 ) : 第五帧数据发送到 B , B 的反馈信息也送到了 A ;

2. 重发数据 : 其中第三帧数据没有送达 , 时钟超时 , B 将相关信息发送到 A , A 重发第三帧数据 ;

III TCP 传输特殊情况处理


1. 发送过程中没有按顺序到达 : 被拆分的数据包是按照排好的顺序发送到接收端的 , 但是由于网络原因 , 可能到达接收方不是原来的顺序 , 接收方会重新进行排序 ;

2. 丢包情况处理 : 如果发送端在超时时间内没有收到接收端的某个包的反馈信息 , 就会认为该包没有送达 , 在超时后 , 会重新发送该包数据 ;

3. 连接断开情况处理 : 如果连接传输中途断开 , 需要进行重连 , 重连后再次发送数据 ;

【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )相关推荐

  1. java网络编程TCP传输—流操作—拿到源后的写入动作

    在网络编程中的TCP传输里,拿到Socket的源后,应该怎么进行读写操作呢,下面我列举了两种方法,希望大家帮忙补充···· 1.利用byte数组作为一个缓冲区进行读写 客户端上传 1 //获取sock ...

  2. Java网络编程 ---- TCP 网络通信编程

    视频:[零基础 快速学Java]韩顺平 零基础30天学会Java 文章目录 1. Socket 2. TCP 网络通信编程 3. 应用案例 1(使用字节流) 4. 应用案例 2(使用字节流) 5. 应 ...

  3. java网络编程--TCP程序设计

    一,本章目标 了解Socket和ServerSocker类的作用 掌握ECHO程序开发 将多线程应用在TCP程序上实现多用户操作 二,具体内容 在java网络程序中,客户端只要符合连接的通讯协议,那么 ...

  4. Java网络编程---TCP通信

    TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象,从而在通信两端形成网络虚拟链路,一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信 Java对基于TCP协议的 ...

  5. java网络编程 UDP通信协议实现局域网内文件的发送和接收

    要实现两台内网下的机子进行通信,首先得知道接收方的内网IP,获取IP的方式:可以打开任务管理器的以太网进行查看: 如下 也可以通过 win+r 输入cmd ,然后输入 ipconfig  回车  进行 ...

  6. Java 网络编程TCP协议之发送数据和接收数据的详解

    博主前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住也分享一下给大家,

  7. Java网络编程 - TCP通信

    文章目录 TCP通信 快速入门(一发一收) 编写客户端代码 编写服务器代码 多发多收 多发多收(同时接受多个客户端) 线程池优化 TCP通信 快速入门(一发一收) TCP协议回顾: TCP是一种面向连 ...

  8. java网络编程 TCP程序

    在java中,使用Socket完成TCP(传输控制协议)程序开发,使用此类可以方便地建立可靠的,双向的,持续的,点对点通信连接 服务端: ServerSocket    程序段:Socket Serv ...

  9. java网络编程-- 文件传输

    客户端发送 package cn.usts.edu.lesson03;import java.io.*; import java.net.InetAddress; import java.net.So ...

最新文章

  1. mysql-data-dumper
  2. 【操作】vue-markdown使用
  3. 2 什么是计算机网络设置密码,计算机网络技术及应用(第2版)第6章网络操作系统基本配置.ppt...
  4. 新唐M0 KEIL环境搭建,找不到device不识别,关键:Nu-Link_Keil_Driver
  5. shader 获取法线_Unity Shader 入门到改行5——法线贴图
  6. colorkey唇釉是否安全_好物推荐|哇哦!有被这些唇釉美到耶
  7. 黑莓桌面管理器4.2_虚拟桌面管理器行业现状调研分析及发展趋势预测报告(2020)...
  8. 关公战秦琼java,IDE 之争是在争啥
  9. linux下的C语言开发(动态库)
  10. Mybatis异常There is no getter for property named ‘XXX‘ in ‘class java.lang.String‘
  11. windows与Linux间远程拷贝文件(pscp命令)
  12. RabbitMQ-彻底删除服务
  13. 如何高效的自学编程(新手篇)
  14. python中shift_Python Pandas dataframe.shift()用法及代码示例
  15. 使用Springboot+Feign Clients快速搭建REST客户端应用
  16. 树莓派自己加内存条_拔掉MacBookPro,用8GB树莓派4工作一天,体验原来是这样的...
  17. 人类想要拥有金钱、权力、美丽、永生、幸福……但海龟只想做一只海龟
  18. 西瓜皮18.6.27
  19. 百度7天GNN学习-图与图学习中
  20. 前端利用Canvas+Video合并流实现截屏和录屏功能

热门文章

  1. PHP ORM框架ezpdo(2)之EZPDOSQL
  2. 大学生学业指导类书目
  3. Linux常用基本命令(cut)
  4. poj2478 Farey Sequence (欧拉函数)
  5. hadoop中NameNode、DataNode和Client三者之间协作关系及通信方式介绍
  6. 1.网页学习-开始学习第一步:
  7. 《当程序员的那些狗日日子》(十二)公司里的靓丽风景
  8. 算法学习:主席树(可持久化线段树)
  9. post发送 ArrayBuffer
  10. Wrong FS: hdfs://xxx/xxx expected: file:///