前面的文章我们讲了HTTP和HTTPS协议,接下来我们讲Java中最重要的协议TCP和UDP,让我们回顾一下TCP的特点,有连接,可靠传输,面向字节流,全双工,这里可靠传输就是尽可能把数据传过去,至少知道对方有没有收到。
一、TCP协议七大
1、确认应答
通过ack(应答报文)告知对方我收到了,TCP接收方就可以根据数据进行排序,应答报文ack设置为1
2、超时重传 ,丢包
超出一定时间,没有收到应答报文,就看做丢包了,就要触发重传
通过确认应答和超时重传,这就是TCP保证传输可靠性的核心机制
3、连接管理
握手和挥手不携带载荷数据,只是打招呼数据包
建立连接:三次握手

所谓的连接指的是通信双方各自保存对方端关键信息
LISTEN:服务器启动随时可以有客户端连上来
ESTABLISHED:连接建立完毕,随时可以发送数据
三次握手的意义:
1、初步验证通信链路是畅通的
2、验证双方的各种发送能力,接收能力正常
3、协商关键信息,序号多少开始
断开连接:四次挥手

三次握手一定是客户端主动发起syn第一次握手,一定是客户端开头的
四次握手,客户端和服务器都可以主动发起FIN,实践角度,是客户端断开连接可能性大




谁是主动发起FIN的一方就会进入到TIME_WAIT
谁是被动发起FIN就会进入CLOSE_WAIT,这个地方等待应用程序调用close方法
1、CLOSE_WAIT正常是看不到的,如果这边发现大量CLOSE_WAIT说明服务器出现bug
2、如果第一个FIN丢了,A无法在规定时间拿到ack,a重新发送FIN,如果是第一个ack丢了,同前,第二个FIN丢了也是一样的,在第二个FIN到达a之前,连接还存在,能及时处理ack,a收到ack就把连接释放了,a收到FIN之后,不能立即释放而是等一下,这个就叫TIME_WAIT,他的手机等待两分钟,不同系统时间可能不一样
4、滑动窗口
TCP为了保证可靠性,会以效率为代价,批量传输


前几个数据包直接发送,发到一定量之后等待,发一定量就是窗口大小
下一组发送,收到一个ack就发下一条

同时数据包也会丢失

后面的ack到达会覆盖前面的ack含义

比如上面如果1001-2000丢包,就会反复索要这里数据包,直到对方重传成功,才会继续后面的,即超时重传,数据量小,而快速重传就是大量数据
5、流量控制
滑动窗口越大,效率越高,但是不能无限大,就收方处理能力有限

这里相当于一个缓冲区,发送方速度不能太快,应用程序读取速度要跟的上,流量控制就是让接收方根据自身处理能力调整滑动窗口大小

接收方会把剩余缓冲区空间填入这个属性,发送方调整窗口大小,滑动窗口就是动态变化

如果一直不发,就无法触发ack,然后就会触发窗口探测包
6、拥塞控制
流量控制是依据接收方处理能力进行限制,而拥塞控制是根据链路转发能力进行限制

最开始窗口很小,如果没有丢包,就会指数增长使窗口变大,到达一定阈值后,就不会增长那么快,然后就可能丢包,这里就开始减少,新版本是当前的窗口除以2,然后进行线性增长
7、延时应答
默认情况都是收到数据包一瞬间返回ack,但是也可以通过延时返回ack提高效率

但是并不是所有包都可以延时应答,是隔开n个包回答异常,超过最大延时时间就应答一次,具体的参数根据系统而异
8、捎带应答
TCP有延时应答了,基于延时应答,返回业务数据顺便把上次的ack带回去

ack可以往后延时一定时间,然后返回数据的时候一起把ack返回
9、面向字节流
通过字节流传输很容易混淆包和包之间的边界,无法区分从哪里到哪里是一个完整数据包,

1、为了解决这个问题我们就会约定包和包之间的边界不如用一个分隔符隔开,读到\n就结束

2、约定包的长度,比如每个包开头四个字节,表示数据包多长

10、异常情况处理
1、某个进程崩溃了
进程崩溃和主动退出是一样的,进程释放回收文件描述符,正常进行四次挥手
2、主机关机
正常关机还是杀死所用的用户进程,就和上面进程崩溃一样
3、主机掉电

A突然掉电,B后面发过来的数据包都没有收到ack,触发超时重传,重传到达一定次数,B会主动发一个复位报文RST,重置tcp连接,发送ack没有回应,就会主动断开,这里是接收方掉电,发送方掉电,接收方等待一定时间就会发生一个心跳包,来触发ack,如果没有就会发生rst,如有就会继续
4、网线断开
A的视角就是和上面接收方掉电一样,B的时间就是发送方掉电一样


二、IP协议
ip协议主要是两个,

4位版本,现在IPv4 IPv6
4位首部长度都是4字节
8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为
0). 4位TOS分别表⽰: 最⼩延时, 最⼤吞吐量, 最⾼可靠性, 最⼩成本. 这四者相互冲突, 只能选择⼀个. 对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要
16位总长度
一个IP数据报 报头+载荷





1、地址管理,标识网络上面一个设备
把IP分为两类公网和私网


2、路由选择,两个节点之间规划一个合理的路径
当数据包到达某个路由器的时候,就会匹配这个路由器的路由表,这个路由表就记录了周围设备ip是啥,以及也会记录每个设备要通过那个口转发过去
1、如果目的ip刚好匹配了路由表记录,直接安装当前对应的口转发过去
2、如果没有匹配到,路由有一个下一跳,指向上一级路由器位置

路由器越往上,可查记录更多
三、以太网协议,数据链路层,物理层
以太网数据帧

mtu描述最长载荷是多少

DNS服务器


总结
核心作用
负责同一局域网内直连设备之间的数据传输,完成单一跳的数据转发。
必掌握知识点
- 以太网:局域网通用技术标准,同时定义数据链路层 + 物理层规范(拓扑、传输速率、介质等)。
- 以太网帧结构:规定帧头(MAC 地址、类型)、数据载荷、尾部 CRC 校验,载荷长度 46~1500 字节。
- MAC 地址:48 位硬件物理地址,唯一标识局域网设备,负责单段链路寻址。
- ARP 协议:实现 IP 地址 ↔ MAC 地址映射,通过广播查询目标 MAC,本地维护带过期时间的 ARP 缓存表。
- MTU(最大传输单元):链路层单次能承载的最大数据长度,以太网默认 1500 字节;超出会触发 IP 分片。
二、网络层
核心作用
跨不同网段寻址,为数据包选择路由路径,实现端到端跨局域网传输。
必掌握知识点
- IP 地址与 MAC 地址区分:IP 负责全网端到端定位主机;MAC 仅负责局域网单跳转发,每经过路由器 MAC 会更换。
- IPv4 报文格式:包含源 / 目的 IP、TTL、分片标识、上层协议号、校验和等关键字段。
- 网段划分
- 老式 ABCDE 五类地址划分(存在地址浪费,现已淘汰);
- CIDR 无类子网划分(主流,子网掩码区分网络号 / 主机号)。
- IP 地址资源短缺解决方案
- CIDR 提升地址利用率;
- 私有 IP+NAT 地址转换;
- IPv6 扩容至 128 位地址。
- 私有 IP 与公网 IP:10/172.16~31/192.168 三段为局域网私有 IP,不可直接访问外网,需 NAT 转换为公网 IP。
- 路由转发流程:路由器查询本地路由表,匹配目的 IP,直连网段直接转发,无匹配则走默认网关逐跳传递。
- IP 分片:数据包长度超过链路 MTU 时,网络层拆分 IP 包;任意分片丢失,整包接收失败。
- NAT 原理:路由器实现私有 IP 与公网 IP 互相转换,NAPT 通过「IP + 端口」映射实现多主机共享单个公网 IP。
三、传输层
核心作用
区分同一主机上多个应用进程,实现端到端的数据收发,依靠端口号区分程序。
必掌握知识点
- 端口号:0~1023 知名固定端口;1024~65535 客户端动态分配端口;五元组(源 IP、源端口、目的 IP、目的端口、协议)唯一标识一条通信连接。
- UDP 协议
- 特性:无连接、不可靠、面向数据报、头部仅 8 字节;发送 / 接收报文一一对应,无粘包问题;
- 限制:单包最大 64KB,超 MTU 分片后丢包率高。
- TCP 协议(重点) 1)可靠性保障:校验和、序列号有序重组、确认应答 ACK、超时重传、重复包去重; 2)连接管理:三次握手建立连接、四次挥手断开连接;掌握 TIME_WAIT、CLOSE_WAIT 等核心状态含义; 3)传输优化机制:滑动窗口、快重传、流量控制(防止接收缓冲区溢出)、拥塞控制(避免网络拥堵)、延迟应答、捎带应答; 4)面向字节流:内核存在收发缓冲区,读写操作互不匹配,衍生粘包问题; 5)粘包解决方案:定长报文、包头携带长度、包分隔符;
- 拓展:可在 UDP 应用层复刻 TCP 逻辑(序列号、ACK、重传、滑动窗口)实现自定义可靠传输;
- MTU 对传输层影响:TCP 协商 MSS 规避 IP 分片;UDP 超大报文极易分片,丢包风险高。
四、应用层
核心作用
面向业务逻辑,提供各类网络服务,直接对接用户 / 开发程序。
必掌握知识点
- 自定义应用协议:可基于 TCP/UDP 自行设计报文格式解决业务数据传输;
- DNS 域名解析:底层使用 UDP,将域名转换为 IP 地址,存在多级缓存、递归 / 迭代查询流程。