网络基础笔记

DHCP是什么?

DHCP(动态主机配置协议) 是网络中用于自动分配和管理IP地址的核心协议。以下是其关键要点:


1. 核心功能

  • 自动分配IP地址:设备接入网络时,DHCP自动为其分配IP地址,无需手动设置。
  • 配置其他参数:同时分配子网掩码、默认网关、DNS服务器等关键网络信息。

2. 工作流程(4步)

  1. 发现(Discover):设备广播“DHCP发现”消息,寻找可用DHCP服务器。
  2. 提供(Offer):服务器响应,提供一个未使用的IP地址。
  3. 请求(Request):设备确认接受该IP地址。
  4. 确认(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.1192.168.1.1(网关),其他设备依次分配为 192.168.1.2192.168.1.3 等。
  • 相比之下,10.x.x.x172.16.x.x 的子网更大,需要更复杂的规划,适合企业而非普通用户。

3. 路由器的默认设置

  • 大多数家用路由器(如TP-Link、华为、小米等)出厂时默认使用 192.168.1.1192.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

      1. 转换为二进制
        IP地址:11000000.10101000.00000001.01100100
        子网掩码:11111111.11111111.11111111.00000000
        
      2. 按位与运算
        IP地址:  11000000.10101000.00000001.01100100  
        子网掩码: 11111111.11111111.11111111.00000000  
        结果:    11000000.10101000.00000001.00000000
        
        1. 转回十进制
        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)。

2. 默认网关:网络的“邮局”

  • 通俗比喻
    默认网关就像小区的邮局。如果你要寄信给外市的朋友,信件会先送到邮局,再由邮局转发到外部网络。邮局的地址(比如“阳光小区1号信箱”)就是默认网关。

  • 专业解释

    • 默认网关(Default Gateway)是本地网络的出口IP地址,通常是路由器的接口IP。
    • 当设备需要访问外部网络(如互联网或其他子网)时,数据包会发送到默认网关,由网关负责路由转发。
    • 作用:实现跨子网或跨网络通信,依赖路由表(Routing Table)决定下一跳地址。
  • 示例

    • 家庭网络中,路由器的LAN口IP是 192.168.1.1,所有设备的默认网关设置为该地址。
    • 当你的手机(192.168.1.5)访问百度时,数据包先发送到 192.168.1.1,再由路由器转发到互联网。

专业知识点补充

  1. CIDR表示法

    • 子网掩码可以用简写的“斜杠记法”,如 255.255.255.0 = /24,表示前24位是网络地址。
  2. 广播域与子网划分

    • 子网掩码通过缩小广播域(Broadcast Domain)提升网络效率。例如,/24 子网最多容纳254台主机(主机位全0和全1保留)。
  3. 三层网络模型

    • 默认网关工作在网络层(OSI第三层),根据IP地址路由数据包,而交换机基于MAC地址(数据链路层)转发。
  4. 路由表

    • 路由器通过路由表决定数据包路径。例如:
      目标网络: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的工作原理

  1. ARP请求(广播)

    • 当设备A需要与设备B通信(已知设备B的IP地址但未知其MAC地址)时,设备A会向局域网内广播一个ARP请求包,内容为:“谁的IP地址是X.X.X.X?请告诉我你的MAC地址。”
  2. ARP响应(单播)

    • 局域网内所有设备都会收到此广播,但只有IP地址匹配的设备B会向设备A发送一个ARP响应包,包含自己的MAC地址。
  3. 缓存表更新

    • 设备A收到响应后,会将IP地址与MAC地址的映射关系存储在本地的ARP缓存表中,后续通信直接使用缓存信息,无需重复查询。

ARP缓存表

  • 功能:临时存储IP地址与MAC地址的映射关系,减少重复查询的开销。
  • 缓存时间:每条记录通常有生存时间(TTL),超时后自动删除并重新查询。
  • 查看方式
    在命令行中可通过 arp -a(Windows)或 arp -n(Linux/macOS)查看本地ARP缓存。

ARP的典型应用场景

  1. 局域网通信:设备间通过IP地址通信前需获取对方MAC地址。
  2. 获取网关MAC地址:设备需通过ARP获取路由器的MAC地址以访问外部网络。
  3. 网络诊断:通过检查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地址。

流程步骤

  1. 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(全网广播)。
  2. ARP响应(单播)

    • 接收与处理
      • 所有本地网络的主机收到广播的ARP请求。
      • 主机B发现请求中的目标IP地址(192.168.1.20)与自身IP匹配,准备响应。
      • 其他主机(如主机C、D)丢弃该请求。
    • 响应构造:主机B单播返回ARP响应报文:“我是 192.168.1.20,我的MAC地址是 BB:BB:BB:BB:BB:BB”。
  3. 更新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地址

封装在以太网帧中

  • 目标MACFF:FF:FF:FF:FF:FF(广播地址)
  • 源MACAA: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地址

封装在以太网帧中

  • 目标MACAA:AA:AA:AA:AA:AA(主机A的单播地址)
  • 源MACBB: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(确认号):期望收到的下一个字节编号。

实例:访问网站

  1. 客户端 → 服务器:发送 SYN=1, Seq=100(“我要和你连接,我的数据从100开始编号”)。
  2. 服务器 → 客户端:回复 SYN=1, ACK=1, Seq=300, Ack=101(“我同意连接,我的数据从300开始,你的101号数据我等着”)。
  3. 客户端 → 服务器:发送 ACK=1, Seq=101, Ack=301(“确认收到,我的下一个数据是101,你的301号数据我等着”)。
    此时连接建立,双方可以开始传输数据。

为什么是三次握手而不是两次?

核心原因

三次握手的本质是确保双方都能确认彼此的通信能力,尤其是防止历史重复连接请求(旧 SYN 包)导致服务器资源浪费。若使用两次握手,可能出现以下问题:

  1. 客户端无法确认服务器的响应
    • 服务器单方面认为连接已建立,但客户端可能未收到确认,导致数据丢失。
  2. 历史 SYN 包干扰
    • 网络延迟可能导致旧的 SYN 包到达服务器,若只有两次握手,服务器会误认为这是新请求,建立无效连接。

实例对比:两次握手 vs 三次握手

场景设定
  • 客户端:尝试访问网站服务器。
  • 服务器:等待客户端连接。
  • 问题:网络中存在一个延迟的旧 SYN 包(例如客户端之前发送的请求因网络拥堵未及时到达)。
1. 假设使用两次握手(错误示例)

步骤

  1. 客户端 → 服务器:发送 SYN=1, Seq=100(正常请求)。
  2. 服务器 → 客户端:回复 SYN=1, ACK=1, Seq=300, Ack=101(确认请求)。
    • 服务器认为连接已建立,开始等待数据。

问题

  • 如果客户端的ACK 包丢失(例如网络故障),客户端认为连接未建立,不会发送数据。
  • 服务器却一直等待,导致资源浪费

更严重的问题

  • 假设客户端之前发送的旧 SYN 包(Seq=90)因网络延迟,现在到达服务器:
    1. 旧 SYN 包到达服务器SYN=1, Seq=90
    2. 服务器 → 客户端:回复 SYN=1, ACK=1, Seq=400, Ack=91
    3. 客户端收到后:发现 Ack=91 与当前序列号不匹配(客户端已使用 Seq=100),直接忽略。
    4. 服务器误认为连接已建立,持续等待数据,但客户端早已放弃,导致服务器资源被占用
2. 实际使用三次握手(正确示例)

步骤

  1. 客户端 → 服务器:发送 SYN=1, Seq=100
  2. 服务器 → 客户端:回复 SYN=1, ACK=1, Seq=300, Ack=101
  3. 客户端 → 服务器:发送 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,自动关闭连接,避免资源浪费。

理解技巧
想象打电话时的对话:

  1. A 打给 B:“你能听到我吗?”(SYN)。
  2. B 回答:“我能听到,你能听到我吗?”(SYN-ACK)。
  3. A 再确认:“我能听到!”(ACK)。
    如果只有两次握手,B 无法确定 A 是否真的听到了自己的回应。

2. 可靠传输:确认与重传

为什么需要可靠传输?

一、为什么需要可靠传输?

网络传输中可能发生丢包、乱序、重复等问题。TCP 通过以下机制确保数据可靠到达:

  1. 序列号(Seq):标记每个字节的顺序,防止乱序。
  2. 确认号(Ack):接收方告知发送方“已正确收到哪些数据”。
  3. 超时重传:未收到确认时,重新发送数据。
  4. 累计确认:通过 Ack 号隐含确认之前所有数据已接收。

二、TCP 报文结构(关键字段)

img
每个 TCP 数据包的头部包含以下关键字段,直接影响可靠传输:

字段 长度(比特) 作用
源端口 16 发送方的应用程序端口(如浏览器端口)
目的端口 16 接收方的应用程序端口(如 Web 服务器的 80 端口)
序列号(Seq) 32 当前数据段的第一个字节的编号(如 Seq=101 表示数据从第 101 字节开始)
确认号(Ack) 32 接收方期望收到的下一个字节的编号(如 Ack=106 表示已收到 1-105 字节)
数据偏移 4 头部长度(通常 20 字节)
标志位 6 ACK=1(确认有效)、SYNFIN
窗口大小 16 接收方剩余缓冲区大小(流量控制)
校验和 16 校验数据完整性

三、实例分析:发送消息 "Hello"

假设发送方需要传输字符串 "Hello"(共 5 个字节),初始序列号 Seq=101,接收方初始 Ack 号为 101

步骤 1:发送数据包

  • 发送方构造报文

    Seq=101, Data="H"(对应字节 101Seq=102, Data="e"(字节 102Seq=103, Data="l"(字节 103Seq=104, Data="l"(字节 104Seq=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 的包丢失,其他包正常到达。

  1. 接收方行为

    • 收到 Seq=101102104105,发现 103 缺失。
    • 触发重复确认:每收到一个乱序包(如 104),立即回复 Ack=103(表示仍期待 103)。
    • 例如:收到 Seq=104 时,回复 Ack=103;收到 Seq=105 时,仍回复 Ack=103
  2. 发送方行为

    • 若收到 3 次重复 Ack=103,触发快速重传(不等待超时,直接重传 Seq=103)。
    • 若未触发快速重传,则在超时时间(如 2 秒)后重传 Seq=103
  3. 重传后

    • 接收方收到 Seq=103,检查连续性后回复 Ack=106,传输恢复。

五、解决乱序问题:序列号与缓存

场景:数据包到达顺序为 101 → 103 → 102 → 104 → 105

  1. 接收方行为

    • 收到 Seq=101:缓存数据,回复 Ack=102(期待下一个字节)。
    • 收到 Seq=103:发现不是期待的 102,缓存此包,仍回复 Ack=102
    • 收到 Seq=102:此时已缓存 102-103,回复 Ack=104
    • 后续收到 104-105 后,回复 Ack=106
  2. 关键机制

    • 序列号排序:接收方根据 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  

七、总结
  • 可靠传输核心
    1. 序列号与确认号:标识数据顺序,解决乱序问题。
    2. 超时重传与快速重传:解决丢包问题。
    3. 累计确认:减少确认报文数量,提升效率。
  • 实际应用
    • 文件传输中,若某个分片丢失,TCP 自动重传,用户无需手动干预。
    • 视频流中,若网络波动导致丢包,短暂卡顿后数据恢复。

3. 流量控制:滑动窗口

为什么需要流量控制?
防止发送方发送过快,导致接收方缓冲区溢出。

专有名词解释

  • 接收窗口(Window Size):接收方告诉发送方“我还能收多少字节”。
  • 滑动窗口:发送方根据窗口大小动态调整发送速率。

实例:下载文件

  • 接收方初始窗口为 Win=5000(可接收5000字节)。
  • 发送方发送5000字节后,接收方处理了2000字节,回复 Win=3000(剩余空间3000字节)。
  • 发送方下次只发送3000字节,避免超过接收方处理能力。

4. 连接终止:四次挥手

为什么需要四次挥手?
确保双方都完成数据发送,才能安全关闭连接。

专有名词解释

  • FIN(Finish):终止连接请求。
  • TIME_WAIT:等待2倍最大报文生存时间(MSL),防止旧数据干扰新连接。

实例:关闭网页

  1. 客户端 → 服务器FIN=1, Seq=500(“我要关闭连接了”)。
  2. 服务器 → 客户端ACK=1, Ack=501(“收到关闭请求”)。
  3. 服务器处理剩余数据后 → 客户端FIN=1, Seq=800(“我也要关闭了”)。
  4. 客户端 → 服务器ACK=1, Ack=801,等待2MSL后关闭。

三、TCP 头部格式(简化版)

每个 TCP 数据包都有一个头部,包含控制信息:

字段 作用 示例值
源端口 发送方的应用程序端口(如浏览器) 54321
目的端口 接收方的应用程序端口(如Web服务器) 80(HTTP默认端口)
序列号(Seq) 当前数据段的第一个字节编号 100
确认号(Ack) 期望收到的下一个字节编号 150
标志位 SYN(连接)、ACK(确认)、FIN(关闭) SYN=1, ACK=1
窗口大小 接收方还能接收多少字节 5000
posted @   MARSHBAN  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示