网络基础笔记
DHCP是什么?
DHCP(动态主机配置协议) 是网络中用于自动分配和管理IP地址的核心协议。以下是其关键要点:
1. 核心功能
- 自动分配IP地址:设备接入网络时,DHCP自动为其分配IP地址,无需手动设置。
- 配置其他参数:同时分配子网掩码、默认网关、DNS服务器等关键网络信息。
2. 工作流程(4步)
- 发现(Discover):设备广播“DHCP发现”消息,寻找可用DHCP服务器。
- 提供(Offer):服务器响应,提供一个未使用的IP地址。
- 请求(Request):设备确认接受该IP地址。
- 确认(Acknowledge):服务器最终确认分配,完成配置。
3. 主要优点
- 减少配置错误:自动化避免手动输入错误。
- 高效管理IP:通过“租约”机制回收闲置IP,防止地址耗尽。
- 支持大规模网络:企业、校园等场景可集中管理数千设备。
- 灵活性:支持动态分配(临时IP)和静态分配(固定IP,如打印机)。
4. 租约机制
- IP地址分配有有效期(如24小时),到期后设备需续租或释放IP。
- 确保IP资源不被长期占用,提升利用率。
5. 典型应用场景
- 家庭网络:路由器内置DHCP,为手机、电脑自动分配IP。
- 企业网络:通过专用DHCP服务器管理大量设备。
- 公共场所:咖啡厅、机场WiFi动态分配临时IP。
为什么电脑ip地址多为192.168开头?
私有ip地址规范
1. 私有IP地址的规范
- IPv4地址资源有限,为避免公共互联网上的IP耗尽,国际组织(IANA)保留了 三个私有地址段 供内部网络使用:
- 10.0.0.0 ~ 10.255.255.255(A类,支持超大型网络)
- 172.16.0.0 ~ 172.31.255.255(B类,支持中型网络)
- 192.168.0.0 ~ 192.168.255.255(C类,支持小型网络)
- 192.168.x.x 是C类地址,默认子网掩码为
255.255.255.0
,每个子网最多支持 254个设备,非常适合家庭和小型办公场景。
2. 简单且易管理
- 192.168.x.x 的子网划分简单,无需复杂配置。例如,家庭路由器默认分配的地址通常是 192.168.0.1 或 192.168.1.1(网关),其他设备依次分配为
192.168.1.2
、192.168.1.3
等。 - 相比之下,
10.x.x.x
或172.16.x.x
的子网更大,需要更复杂的规划,适合企业而非普通用户。
3. 路由器的默认设置
- 大多数家用路由器(如TP-Link、华为、小米等)出厂时默认使用 192.168.1.1 或 192.168.0.1 作为管理地址,导致用户习惯沿用这一地址段。
- 厂商选择这一范围是因为它足够小,避免地址浪费,同时降低用户配置门槛。
4. 避免与公共IP冲突
- 私有地址(如192.168.x.x)不会在公网出现,因此多个局域网可以同时使用相同的私有IP,通过NAT(网络地址转换)访问互联网。
- 如果使用公网IP作为内网地址,可能导致路由混乱或无法访问特定资源。
5. 历史惯例与普及性
- 早期网络教程、设备文档普遍以 192.168.x.x 为例,用户和工程师形成了使用习惯。
- 当多数人默认使用这一范围时,新设备也会遵循“惯例”以兼容现有网络。
为什么不用其他私有地址?
- 10.x.x.x:适合大型企业(如跨国公司),但普通用户无需复杂子网划分。
- 172.16.x.x:介于A类和C类之间,适用场景较少,配置复杂度较高。
- 192.168.x.x 在简单性、设备兼容性和普及度上综合最优。
总结
192.168.x.x 成为主流,是私有地址规范、路由器厂商默认设置、用户习惯共同作用的结果。它平衡了易用性和功能性,完美适配小型网络的需求。如果需要更多设备或复杂网络,则可能选择其他私有地址段。
什么是“子网掩码”和“默认网关”?
1. 子网掩码:网络的“邮政编码”
-
通俗比喻:
假设你家住在“阳光小区5栋301室”,子网掩码就像小区的划分规则。例如,规则是“前3位表示小区和楼栋(阳光小区5栋),最后1位是门牌号(301)”。这样,同一栋楼的邻居(同一子网)可以直接串门,而不同楼栋的人需要找物业帮忙联系。 -
专业解释:
-
子网掩码(Subnet Mask)是一个32位的二进制数,用于划分IP地址的网络部分和主机部分。
-
例如:IP地址
192.168.1.10
,子网掩码255.255.255.0
(二进制11111111.11111111.11111111.00000000
)。 -
通过按位与运算,可以提取网络地址: (1与1得1,其他得0)
示例:简单C类网络
IP地址: 192.168.1.100
子网掩码: 255.255.255.0- 转换为二进制
IP地址:11000000.10101000.00000001.01100100 子网掩码:11111111.11111111.11111111.00000000
- 按位与运算
IP地址: 11000000.10101000.00000001.01100100 子网掩码: 11111111.11111111.11111111.00000000 结果: 11000000.10101000.00000001.00000000
- 转回十进制
192.168.1.0 → 网络地址
- 转换为二进制
-
作用:判断两个设备是否在同一个子网。如果是,直接通信;如果不是,需通过默认网关。
-
-
示例:
- 设备A:
192.168.1.10/24
(子网掩码255.255.255.0
)。 - 设备B:
192.168.1.20/24
→ 同一子网(网络地址均为192.168.1.0
)。 - 设备C:
192.168.2.30/24
→ 不同子网(网络地址为192.168.2.0
)。
- 设备A:
2. 默认网关:网络的“邮局”
-
通俗比喻:
默认网关就像小区的邮局。如果你要寄信给外市的朋友,信件会先送到邮局,再由邮局转发到外部网络。邮局的地址(比如“阳光小区1号信箱”)就是默认网关。 -
专业解释:
- 默认网关(Default Gateway)是本地网络的出口IP地址,通常是路由器的接口IP。
- 当设备需要访问外部网络(如互联网或其他子网)时,数据包会发送到默认网关,由网关负责路由转发。
- 作用:实现跨子网或跨网络通信,依赖路由表(Routing Table)决定下一跳地址。
-
示例:
- 家庭网络中,路由器的LAN口IP是
192.168.1.1
,所有设备的默认网关设置为该地址。 - 当你的手机(
192.168.1.5
)访问百度时,数据包先发送到192.168.1.1
,再由路由器转发到互联网。
- 家庭网络中,路由器的LAN口IP是
专业知识点补充
-
CIDR表示法:
- 子网掩码可以用简写的“斜杠记法”,如
255.255.255.0
=/24
,表示前24位是网络地址。
- 子网掩码可以用简写的“斜杠记法”,如
-
广播域与子网划分:
- 子网掩码通过缩小广播域(Broadcast Domain)提升网络效率。例如,
/24
子网最多容纳254台主机(主机位全0和全1保留)。
- 子网掩码通过缩小广播域(Broadcast Domain)提升网络效率。例如,
-
三层网络模型:
- 默认网关工作在网络层(OSI第三层),根据IP地址路由数据包,而交换机基于MAC地址(数据链路层)转发。
-
路由表:
- 路由器通过路由表决定数据包路径。例如:
目标网络:0.0.0.0/0(默认路由) → 下一跳:运营商网关 目标网络:192.168.1.0/24 → 直接连接(无需网关)
- 路由器通过路由表决定数据包路径。例如:
总结
- 子网掩码:决定设备是否在同一个“小区”(子网),像邮政编码划分区域。
- 默认网关:充当“邮局”,处理发往外部网络的数据包。
- 核心目的:子网掩码优化本地通信,默认网关实现跨网络通信。
什么是ARP协议?
ARP(Address Resolution Protocol,地址解析协议) 是计算机网络中用于将IP地址解析为MAC地址的协议。它是局域网(LAN)通信的基础协议之一,工作在数据链路层(OSI模型的第二层)。
ARP的作用
在局域网中,设备之间的通信依赖于MAC地址(物理地址),但用户通常使用IP地址(逻辑地址)进行通信。ARP的作用就是通过已知的IP地址查询对应的MAC地址,从而实现数据包的正确传输。
ARP的工作原理
-
ARP请求(广播)
- 当设备A需要与设备B通信(已知设备B的IP地址但未知其MAC地址)时,设备A会向局域网内广播一个ARP请求包,内容为:“谁的IP地址是X.X.X.X?请告诉我你的MAC地址。”
-
ARP响应(单播)
- 局域网内所有设备都会收到此广播,但只有IP地址匹配的设备B会向设备A发送一个ARP响应包,包含自己的MAC地址。
-
缓存表更新
- 设备A收到响应后,会将IP地址与MAC地址的映射关系存储在本地的ARP缓存表中,后续通信直接使用缓存信息,无需重复查询。
ARP缓存表
- 功能:临时存储IP地址与MAC地址的映射关系,减少重复查询的开销。
- 缓存时间:每条记录通常有生存时间(TTL),超时后自动删除并重新查询。
- 查看方式:
在命令行中可通过arp -a
(Windows)或arp -n
(Linux/macOS)查看本地ARP缓存。
ARP的典型应用场景
- 局域网通信:设备间通过IP地址通信前需获取对方MAC地址。
- 获取网关MAC地址:设备需通过ARP获取路由器的MAC地址以访问外部网络。
- 网络诊断:通过检查ARP表排查IP冲突或网络连接问题。
ARP欺骗(ARP Spoofing)
- 原理:攻击者伪造虚假的ARP响应包,欺骗其他设备将流量发送到攻击者的MAC地址,从而实现中间人攻击(MitM)。
- 防御措施:
- 静态ARP绑定(手动设置IP-MAC映射)。
- 使用网络安全工具(如ARP防火墙、IDS/IPS)。
- 启用交换机端口安全功能(如动态ARP检测)。
ARP与其他协议的关系
- RARP(反向ARP):根据MAC地址查询IP地址(现已被DHCP取代)。
- DHCP:动态分配IP地址,通常与ARP结合使用以避免地址冲突。
总结
ARP是局域网通信的关键协议,通过动态解析IP与MAC地址的对应关系,确保数据包能正确送达目标设备。但其广播机制也存在安全隐患,需结合安全措施防范ARP欺骗攻击。
ARP请求与响应流程
以下是完整的 ARP请求与响应流程,以及对应的 报文细节。整个过程分为请求阶段和响应阶段,通过广播与单播完成地址解析。
一、ARP请求与响应完整流程
场景假设:
- 主机A:IP地址
192.168.1.10
,MAC地址AA:AA:AA:AA:AA:AA
- 主机B:IP地址
192.168.1.20
,MAC地址BB:BB:BB:BB:BB:BB
- 目标:主机A需要与主机B通信,但主机A的ARP表中没有主机B的MAC地址。
流程步骤:
-
ARP请求(广播)
- 触发条件:主机A尝试发送数据到
192.168.1.20
,但ARP表中无对应MAC地址。 - 发送方:主机A构造并广播一个ARP请求报文,询问:“谁是
192.168.1.20
?请告诉192.168.1.10
(我的MAC是AA:AA:AA:AA:AA:AA
)”。 - 广播方式:以太网帧的目标MAC地址为
FF:FF:FF:FF:FF:FF
(全网广播)。
- 触发条件:主机A尝试发送数据到
-
ARP响应(单播)
- 接收与处理:
- 所有本地网络的主机收到广播的ARP请求。
- 主机B发现请求中的目标IP地址(
192.168.1.20
)与自身IP匹配,准备响应。 - 其他主机(如主机C、D)丢弃该请求。
- 响应构造:主机B单播返回ARP响应报文:“我是
192.168.1.20
,我的MAC地址是BB:BB:BB:BB:BB:BB
”。
- 接收与处理:
-
更新ARP表
- 主机A收到响应后,将主机B的IP-MAC映射存入本地ARP表。
- 后续通信直接使用缓存的MAC地址。
二、报文结构对比(请求 vs 响应)
ARP请求与响应共享相同的报文格式,仅关键字段(如操作码、目标地址)不同:
1. ARP请求报文
字段 | 值 | 说明 |
---|---|---|
硬件类型 | 0x0001 |
以太网 |
协议类型 | 0x0800 |
IPv4 |
硬件地址长度 | 6 |
MAC地址长度(6字节) |
协议地址长度 | 4 |
IPv4地址长度(4字节) |
操作码 | 0x0001 |
ARP请求 |
发送方MAC地址 | AA:AA:AA:AA:AA:AA |
主机A的MAC地址 |
发送方IP地址 | 192.168.1.10 |
主机A的IP地址 |
目标MAC地址 | 00:00:00:00:00:00 |
全0(未知,等待填充) |
目标IP地址 | 192.168.1.20 |
主机B的IP地址 |
封装在以太网帧中:
- 目标MAC:
FF:FF:FF:FF:FF:FF
(广播地址) - 源MAC:
AA:AA:AA:AA:AA:AA
- 帧类型:
0x0806
(表示ARP协议)
2. ARP响应报文
字段 | 值 | 说明 |
---|---|---|
硬件类型 | 0x0001 |
以太网 |
协议类型 | 0x0800 |
IPv4 |
硬件地址长度 | 6 |
MAC地址长度(6字节) |
协议地址长度 | 4 |
IPv4地址长度(4字节) |
操作码 | 0x0002 |
ARP响应 |
发送方MAC地址 | BB:BB:BB:BB:BB:BB |
主机B的MAC地址 |
发送方IP地址 | 192.168.1.20 |
主机B的IP地址 |
目标MAC地址 | AA:AA:AA:AA:AA:AA |
主机A的MAC地址(已知) |
目标IP地址 | 192.168.1.10 |
主机A的IP地址 |
封装在以太网帧中:
- 目标MAC:
AA:AA:AA:AA:AA:AA
(主机A的单播地址) - 源MAC:
BB:BB:BB:BB:BB:BB
- 帧类型:
0x0806
(ARP协议)
三、关键流程与报文对比
对比项 | ARP请求 | ARP响应 |
---|---|---|
操作码 | 0x0001 (请求) |
0x0002 (响应) |
目标MAC地址 | 全0(00:00:00:00:00:00 ) |
明确指定请求方的MAC地址(如主机A的MAC) |
发送方式 | 广播(目标MAC为 FF:FF:FF:FF:FF:FF ) |
单播(直接发送给请求方) |
目的 | 询问目标IP对应的MAC地址 | 告知请求方自身MAC地址 |
四、实际抓包示例(Wireshark格式)
ARP请求报文:
Frame 1: 42 bytes on wire (336 bits)
Ethernet II, Src: aa:aa:aa:aa:aa:aa, Dst: ff:ff:ff:ff:ff:ff
Destination: Broadcast (ff:ff:ff:ff:ff:ff)
Source: aa:aa:aa:aa:aa:aa
Type: ARP (0x0806)
Address Resolution Protocol (request)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (1)
Sender MAC address: aa:aa:aa:aa:aa:aa
Sender IP address: 192.168.1.10
Target MAC address: 00:00:00:00:00:00
Target IP address: 192.168.1.20
ARP响应报文:
Frame 2: 42 bytes on wire (336 bits)
Ethernet II, Src: bb:bb:bb:bb:bb:bb, Dst: aa:aa:aa:aa:aa:aa
Destination: aa:aa:aa:aa:aa:aa
Source: bb:bb:bb:bb:bb:bb
Type: ARP (0x0806)
Address Resolution Protocol (reply)
Hardware type: Ethernet (1)
Protocol type: IPv4 (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: reply (2)
Sender MAC address: bb:bb:bb:bb:bb:bb
Sender IP address: 192.168.1.20
Target MAC address: aa:aa:aa:aa:aa:aa
Target IP address: 192.168.1.10
什么是TCP协议?
一、TCP 是什么?
- 定义:TCP(Transmission Control Protocol)是一种传输层协议,负责在网络中可靠地传输数据。
- 类比:就像快递公司,确保包裹(数据)完整、按顺序送到目的地,如果包裹丢失会重新发货。
- 关键特点:可靠、面向连接、基于字节流。
二、核心机制详解
1. 面向连接:三次握手
为什么需要三次握手?
确保双方(客户端和服务器)都有能力发送和接收数据,防止建立无效连接。
专有名词解释:
- SYN(Synchronize):同步信号,表示请求建立连接。
- ACK(Acknowledge):确认信号,表示已收到数据。
- Seq(序列号):数据字节的编号,用于标识数据顺序。
- Ack(确认号):期望收到的下一个字节编号。
实例:访问网站
- 客户端 → 服务器:发送
SYN=1, Seq=100
(“我要和你连接,我的数据从100开始编号”)。 - 服务器 → 客户端:回复
SYN=1, ACK=1, Seq=300, Ack=101
(“我同意连接,我的数据从300开始,你的101号数据我等着”)。 - 客户端 → 服务器:发送
ACK=1, Seq=101, Ack=301
(“确认收到,我的下一个数据是101,你的301号数据我等着”)。
此时连接建立,双方可以开始传输数据。
为什么是三次握手而不是两次?
核心原因
三次握手的本质是确保双方都能确认彼此的通信能力,尤其是防止历史重复连接请求(旧 SYN 包)导致服务器资源浪费。若使用两次握手,可能出现以下问题:
- 客户端无法确认服务器的响应
- 服务器单方面认为连接已建立,但客户端可能未收到确认,导致数据丢失。
- 历史 SYN 包干扰
- 网络延迟可能导致旧的 SYN 包到达服务器,若只有两次握手,服务器会误认为这是新请求,建立无效连接。
实例对比:两次握手 vs 三次握手
场景设定
- 客户端:尝试访问网站服务器。
- 服务器:等待客户端连接。
- 问题:网络中存在一个延迟的旧 SYN 包(例如客户端之前发送的请求因网络拥堵未及时到达)。
1. 假设使用两次握手(错误示例)
步骤:
- 客户端 → 服务器:发送
SYN=1, Seq=100
(正常请求)。 - 服务器 → 客户端:回复
SYN=1, ACK=1, Seq=300, Ack=101
(确认请求)。- 服务器认为连接已建立,开始等待数据。
问题:
- 如果客户端的ACK 包丢失(例如网络故障),客户端认为连接未建立,不会发送数据。
- 服务器却一直等待,导致资源浪费。
更严重的问题:
- 假设客户端之前发送的旧 SYN 包(Seq=90)因网络延迟,现在到达服务器:
- 旧 SYN 包到达服务器:
SYN=1, Seq=90
。 - 服务器 → 客户端:回复
SYN=1, ACK=1, Seq=400, Ack=91
。 - 客户端收到后:发现 Ack=91 与当前序列号不匹配(客户端已使用 Seq=100),直接忽略。
- 服务器误认为连接已建立,持续等待数据,但客户端早已放弃,导致服务器资源被占用。
- 旧 SYN 包到达服务器:
2. 实际使用三次握手(正确示例)
步骤:
- 客户端 → 服务器:发送
SYN=1, Seq=100
。 - 服务器 → 客户端:回复
SYN=1, ACK=1, Seq=300, Ack=101
。 - 客户端 → 服务器:发送
ACK=1, Seq=101, Ack=301
。
关键点:
- 客户端必须发送第三次 ACK,服务器收到后才认为连接建立。
- 服务器会丢弃无效的旧 SYN 包:
- 若旧 SYN 包(Seq=90)到达服务器,服务器回复
SYN=1, ACK=1, Seq=400, Ack=91
。 - 客户端收到后,发现 Ack=91 与当前序列号(Seq=100)不符,不会发送第三次 ACK。
- 服务器未收到第三次 ACK,自动关闭连接,避免资源浪费。
- 若旧 SYN 包(Seq=90)到达服务器,服务器回复
理解技巧:
想象打电话时的对话:
- A 打给 B:“你能听到我吗?”(SYN)。
- B 回答:“我能听到,你能听到我吗?”(SYN-ACK)。
- A 再确认:“我能听到!”(ACK)。
如果只有两次握手,B 无法确定 A 是否真的听到了自己的回应。
2. 可靠传输:确认与重传
为什么需要可靠传输?
一、为什么需要可靠传输?
网络传输中可能发生丢包、乱序、重复等问题。TCP 通过以下机制确保数据可靠到达:
- 序列号(Seq):标记每个字节的顺序,防止乱序。
- 确认号(Ack):接收方告知发送方“已正确收到哪些数据”。
- 超时重传:未收到确认时,重新发送数据。
- 累计确认:通过 Ack 号隐含确认之前所有数据已接收。
二、TCP 报文结构(关键字段)
每个 TCP 数据包的头部包含以下关键字段,直接影响可靠传输:
字段 | 长度(比特) | 作用 |
---|---|---|
源端口 | 16 | 发送方的应用程序端口(如浏览器端口) |
目的端口 | 16 | 接收方的应用程序端口(如 Web 服务器的 80 端口) |
序列号(Seq) | 32 | 当前数据段的第一个字节的编号(如 Seq=101 表示数据从第 101 字节开始) |
确认号(Ack) | 32 | 接收方期望收到的下一个字节的编号(如 Ack=106 表示已收到 1-105 字节) |
数据偏移 | 4 | 头部长度(通常 20 字节) |
标志位 | 6 | ACK=1 (确认有效)、SYN 、FIN 等 |
窗口大小 | 16 | 接收方剩余缓冲区大小(流量控制) |
校验和 | 16 | 校验数据完整性 |
三、实例分析:发送消息 "Hello"
假设发送方需要传输字符串 "Hello"
(共 5 个字节),初始序列号 Seq=101
,接收方初始 Ack 号为 101
。
步骤 1:发送数据包
-
发送方构造报文:
Seq=101, Data="H"(对应字节 101) Seq=102, Data="e"(字节 102) Seq=103, Data="l"(字节 103) Seq=104, Data="l"(字节 104) Seq=105, Data="o"(字节 105)
注:实际中 TCP 会将多个字节封装在一个数据包中发送,此处拆分为单字节仅为简化说明。
-
发送方行为:
依次发送这 5 个数据包(假设每个包包含 1 字节数据)。
步骤 2:接收方确认数据
-
接收方收到所有数据包后:
检查序列号是否连续(101-105),确认无丢失和乱序。 -
接收方回复确认报文:
Ack=106, Win=5000(窗口大小)
关键解释:
Ack=106
表示“已正确接收 101-105 字节,期待下一个字节是 106”。
通过累计确认,隐含确认了 101-105 的所有数据。
步骤 3:发送方处理确认
-
正常情况:
发送方收到Ack=106
,知道数据已成功接收,继续发送后续数据(如Seq=106
的新数据)。 -
丢包情况:
假设Seq=103
(第三个 "l")的包丢失,接收方仅收到 101、102、104、105。
四、解决丢包问题:超时重传
场景:Seq=103
的包丢失,其他包正常到达。
-
接收方行为:
- 收到
Seq=101
、102
、104
、105
,发现103
缺失。 - 触发重复确认:每收到一个乱序包(如 104),立即回复
Ack=103
(表示仍期待 103)。 - 例如:收到
Seq=104
时,回复Ack=103
;收到Seq=105
时,仍回复Ack=103
。
- 收到
-
发送方行为:
- 若收到 3 次重复
Ack=103
,触发快速重传(不等待超时,直接重传Seq=103
)。 - 若未触发快速重传,则在超时时间(如 2 秒)后重传
Seq=103
。
- 若收到 3 次重复
-
重传后:
- 接收方收到
Seq=103
,检查连续性后回复Ack=106
,传输恢复。
- 接收方收到
五、解决乱序问题:序列号与缓存
场景:数据包到达顺序为 101 → 103 → 102 → 104 → 105
。
-
接收方行为:
- 收到
Seq=101
:缓存数据,回复Ack=102
(期待下一个字节)。 - 收到
Seq=103
:发现不是期待的 102,缓存此包,仍回复Ack=102
。 - 收到
Seq=102
:此时已缓存 102-103,回复Ack=104
。 - 后续收到 104-105 后,回复
Ack=106
。
- 收到
-
关键机制:
- 序列号排序:接收方根据 Seq 号将数据排序后交给应用层。
- 缓存乱序包:临时存储乱序到达的包,直到缺失的包补齐。
六、报文交互流程图
发送方 接收方
| --- Seq=101, Data="H" ----> |
| --- Seq=102, Data="e" ----> |
| --- Seq=103, Data="l" --X(丢失) |
| --- Seq=104, Data="l" ----> | → 回复 Ack=103(重复确认)
| --- Seq=105, Data="o" ----> | → 回复 Ack=103(重复确认)
| ←--- Ack=103(重复3次) ------- |
| --- Seq=103, Data="l"(重传)--> | → 回复 Ack=106
七、总结
- 可靠传输核心:
- 序列号与确认号:标识数据顺序,解决乱序问题。
- 超时重传与快速重传:解决丢包问题。
- 累计确认:减少确认报文数量,提升效率。
- 实际应用:
- 文件传输中,若某个分片丢失,TCP 自动重传,用户无需手动干预。
- 视频流中,若网络波动导致丢包,短暂卡顿后数据恢复。
3. 流量控制:滑动窗口
为什么需要流量控制?
防止发送方发送过快,导致接收方缓冲区溢出。
专有名词解释:
- 接收窗口(Window Size):接收方告诉发送方“我还能收多少字节”。
- 滑动窗口:发送方根据窗口大小动态调整发送速率。
实例:下载文件
- 接收方初始窗口为
Win=5000
(可接收5000字节)。 - 发送方发送5000字节后,接收方处理了2000字节,回复
Win=3000
(剩余空间3000字节)。 - 发送方下次只发送3000字节,避免超过接收方处理能力。
4. 连接终止:四次挥手
为什么需要四次挥手?
确保双方都完成数据发送,才能安全关闭连接。
专有名词解释:
- FIN(Finish):终止连接请求。
- TIME_WAIT:等待2倍最大报文生存时间(MSL),防止旧数据干扰新连接。
实例:关闭网页
- 客户端 → 服务器:
FIN=1, Seq=500
(“我要关闭连接了”)。 - 服务器 → 客户端:
ACK=1, Ack=501
(“收到关闭请求”)。 - 服务器处理剩余数据后 → 客户端:
FIN=1, Seq=800
(“我也要关闭了”)。 - 客户端 → 服务器:
ACK=1, Ack=801
,等待2MSL后关闭。
三、TCP 头部格式(简化版)
每个 TCP 数据包都有一个头部,包含控制信息:
字段 | 作用 | 示例值 |
---|---|---|
源端口 | 发送方的应用程序端口(如浏览器) | 54321 |
目的端口 | 接收方的应用程序端口(如Web服务器) | 80(HTTP默认端口) |
序列号(Seq) | 当前数据段的第一个字节编号 | 100 |
确认号(Ack) | 期望收到的下一个字节编号 | 150 |
标志位 | SYN(连接)、ACK(确认)、FIN(关闭) | SYN=1, ACK=1 |
窗口大小 | 接收方还能接收多少字节 | 5000 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具