【JavaEE初阶】网络原理——TCP报文结构、确认应答机制

目录

上节回顾

TCP协议

特征

TCP报文结构

16位源端口号、16位目的端口号

TCP报头长度

4位首部长度

保留位(6位)

TCP的核心机制

可靠性

核心机制一:确认应答


上节回顾

UDP协议

  • 固定8个字节的报头
  • 分为四个字段,每个字段占两个字节
  • 分别为源端口、目的端口、报文长度、校验和
  • 能够传递64kb的数据量
  • 若想要传输更大的数据包,需要拆包组包(很复杂)

TCP协议

特征

有连接,面向字节流,可靠传输,全双工

简单解释一下以上含义:

  • 有连接:TCP协议在传输数据前,要先建立专用的通信链路(即交互的双方都要保存对方的信息),结束通信后断开连接
  • 面向字节流:把应用层要传输的数据视为字节流进行传输
  • 可靠传输:相比于UDP把包发出去了就不管了的不负责任的态度,TCP协议通过各种机制来确保数据传输的可靠性(后面会讲到)
  • 全双工:TCP建立好连接之后,通信双方可以同时向对方传输数据,就好比打电话两个人可以同时说话那样

TCP报文结构

TCP的报文结构

接下来,我们依次认识各部分的含义

16位源端口号、16位目的端口号

  • 这两个是传输层的概念,也是传输层的核心内容

TCP报头长度

  • TCP报文的前5行的长度是固定的:固定占20个字节
  • 而选项的存在使得 TCP报头的长度是可变的
  • 选项部分最长可达40字节
  • TCP首部的大小范围是 20~60字节

4位首部长度

  • 作用是标识 TCP 首部的总长度
  • 首先我们要明确,这4位首部长度表示的是 "首部有多少个32bit"=> "首部有多少个4字节"
  • 比如 4位首部长度的值是6 说明这个TCP的首部有 6*4=24个字节 这么长 ,
  • 已知TCP的前五行已经固定占了20个字节,说明选项部分占了4个字节
  • 那么这4位首部长度可以最多表示多少个 "首部有多少个4字节" 呢?
  • 4位最多的情况=> 1111 =>转换为十进制是15 ,说明最多可以表示 首部有15个 "4字节"=>15*4=60字节
  • 已知首部固定有20字节,说明选项部分可占40字节
  • 所以TCP首部的大小范围是 20~60字节

保留位(6位)

UDP的问题在于=>长度不够,又不能扩展

  • 扩展会破坏UDP结构=>UDP报文无法正确解析
  • 决定扩展=>需要所有设备一起扩=>难以实现

TCP的设计者就考虑到了这些问题

于是,TCP报头中就预留了一些保留位(现在先不用,但是占个位置)->留下了一个可操作空间

TCP的核心机制

TCP最核心的6个标志位、16位校验和(用来检验数据是否出错)将结合TCP的核心机制一起讲解

可靠性

此处的可靠性不是说A给B发一个信息,B 100%能收到

是A 给B发了信息之后,尽可能地让B收到

因为再牛逼的软件技术,也顶不住挖掘机的一铲子(施工的时候一铲子把光缆给铲断了)

那A怎么知道B是否收到了呢?

核心机制一:确认应答

保证可靠性的一个关键前提是 发送方知道自己的数据是否被对方接收到

  • =>就让接受方收到数据后,返回一个"应答报文"(acknowledge -缩写-> ack)
  • 发送方收到应答报文,就可以确认对方是收到了
  • 区分一下应答和响应:响应是在业务场景下的,此处所涉及到的应答报文和业务无关,单纯只表达你发来的信息我收到了
  • 举个栗子~

以上的过程有明显缺陷,如果我连发多条,可能出现问题

这时候我还能理解对方的意思,但是,网络上有一个很神奇的现象->后发先至

这时候,我就会出现误解:这个同学不想吃麻辣烫,但是愿意借我钱

为啥网络上会出现"后发先至"的现象?

  • 在数据转发过程中,每个路由器、交换机就相当于一个"十字路口"
  • 有的数据包通过的快,有的慢
  • 每个数据包选择十字路口的哪个方向也是不确定的
  • 而且各路的拥堵情况不同
  • 最终导致数据包们到达接收方有快有慢->先出发的不一定先到

TCP的处理方案:给传输的数据进行编号

对TCP载荷部分进行编号:

对TCP载荷部分进行编号

由于TCP是面向字节流的

所以在编号的时候不是按照1条,2条这样的方式来编的

是按照"字节"来编号

给每个字节都分配一个编号

而且编号是连续递增的

一个TCP的载荷是由多个字节构成的,意味着有多个编号,此处的序号应该是写哪个序号呢?

  • 序号字段填写载荷部分的第一个字节的序号
  • 由于序号是连续递增的,容易推出后面的部分

序号放在报头里的这两个位置↑

给字节流编号后的数据收发方式

确认序号有两种含义:

  • < 1001 的数据都已经确认收到了
  • 接下来你要从1001开始编号并发送给我

下节我们再来讲处理先发后至的具体过程

这节就到这里啦~

欲知后事如何,且听下回分解

END✿✿ヽ(°▽°)ノ✿

相关推荐
墨痕诉清风2 分钟前
Web浏览器客户端检测网站网络健康(代码)
前端·网络·测试工具
ElevenS_it18812 分钟前
Redis监控实战:内存使用+命中率+连接数三类核心指标接入Zabbix+分级告警完整配置方案
运维·网络·redis·mybatis·zabbix
tq108644 分钟前
因果叙事、劳动分层与协作秩序
笔记
oo哦哦1 小时前
搜索矩阵系统的最短路密码:用Dijkstra算法和网络流理论,解释为什么你做了1000个关键词,流量还不如别人30个
网络·算法·矩阵
IP搭子来一个1 小时前
舆情监控系统怎么接入代理 IP?多平台多账号采集的配置全流程
网络协议·tcp/ip·数据分析
一起聊电气1 小时前
智能断路器:守护智能照明系统的AI电气安全闸门
网络·人工智能·安全
hu55667981 小时前
华硕路由RT-AC68U梅林固件外部网络(WAN) -自定义 DDNS
网络
cd_949217211 小时前
邮件安全联防预警平台“网哨M01”:全面联防对抗社工钓鱼攻击
网络·安全·web安全
渴了喝洗衣液2 小时前
课堂笔记 学习笔记
笔记
德迅云安全-小潘2 小时前
了解并防范跨站脚本攻击,XSS攻击全解析,德迅云安全SCDN提供全方位的安全
网络·安全·xss