网工 网络攻击

1、端口扫描

Nmap (Network Mapper)

  • 简介:Nmap 是一款非常流行的开源端口扫描工具,可以进行各种类型的端口扫描,包括TCP SYN扫描、TCP Connect扫描、UDP扫描等。Nmap 还可以进行操作系统检测、服务版本检测等功能。
  • 命令示例:bash深色版本1nmap -sS -p 1-1024 192.168.1.1这条命令使用TCP SYN扫描方式扫描目标IP地址192.168.1.1的1到1024号端口。

Masscan

  • 简介:Masscan 是一款超高速的大规模端口扫描工具,可以以每秒数百万个端口的速度进行扫描,适用于大规模网络环境。
  • 命令示例masscan 192.168.1.0/24 -p 1-1024 --rate=10000

2、arp欺骗攻击、dns欺骗攻击、dhcp欺骗攻击

ARP欺骗(ARP Spoofing)是一种网络攻击方式,攻击者通过发送伪造的ARP应答报文,使得网络上的一个或多个主机误以为某个MAC地址对应的是另一个主机的IP地址。这种攻击可以用来拦截数据包,或者让目标主机与网络上的其他主机失去联系。下面是ARP欺骗攻击的基本原理:

ARP的工作原理

在理解ARP欺骗之前,首先需要了解ARP是如何工作的。ARP(Address Resolution Protocol)用于将网络层使用的IP地址解析为链路层使用的硬件地址(即MAC地址)。当一台主机想要向另一台主机发送数据包时,如果不知道目标主机的MAC地址,则会发送一个ARP请求广播,询问哪个设备拥有特定的MAC地址。网络上拥有该MAC地址的设备会回应一个ARP应答,其中包含其MAC地址。

ARP欺骗的过程

  1. 监听网络流量: 攻击者首先会监听网络上的ARP请求和应答,以便找到潜在的目标主机和网关。
  2. 伪造ARP应答: 攻击者随后会向目标主机发送伪造的ARP应答报文,声称自己拥有某个特定的IP地址(通常是网关的IP地址)。例如,攻击者会发送一个ARP应答,告诉主机A:“我是192.168.1.1(网关的IP地址),我的MAC地址是XX:XX:XX:XX:XX:XX(攻击者的MAC地址)”。
  3. 中间人攻击(Man-in-the-Middle Attack): 一旦主机A接受了这个虚假的ARP应答,它就会开始将数据包发送到攻击者的MAC地址,而不是真正的网关。同时,攻击者也会向网关发送类似的虚假ARP应答,声称自己是主机A。这样,所有从主机A到网关以及从网关到主机A的数据包都会经过攻击者的机器。
  4. 数据包拦截: 攻击者可以读取、修改或丢弃这些数据包,从而实现对网络通信的监视和操控。

ARP欺骗的影响

  • 数据泄露: 攻击者可以窃听网络流量,获取敏感信息。
  • 拒绝服务: 如果攻击者选择不转发数据包或延迟转发,会导致目标主机无法正常通信。
  • 中间人攻击: 攻击者可以在通信双方之间插入自己,修改或注入恶意数据。

防范ARP欺骗的方法

  • 使用静态ARP表: 将已知的IP地址和MAC地址绑定在一起,避免动态ARP解析。
  • ARP防护技术: 如ARP Inspection(DAI)和Dynamic ARP Inspection(DAI),可以帮助验证ARP应答的有效性。
  • 网络分段: 通过VLAN等手段将网络分割成更小的部分,限制ARP欺骗的影响范围。

3、DHCP snooping 技术

通过 DHCP Snooping 来控制 DHCP 请求跟应答报文的交互,防止仿冒的 DHCP 服务器为 DHCPClient 分配 IP 地址以及其他配置信息。

1、全局使能 DHCP Snooping 业务
<HUAWEI> system-view
[HUAWEI] dhep enable
[HUAWEI] dhep snooping enable

2、用户侧端口配置 DHCP Snoopn 能,DHCP Snooping 也可以在 VLAN 内配置,可以根据需要进行选择。
[HUAWEI] interface GigabitEthemet 8/0/1
[HUAWEI-GigabiEthemet8/0/1] dhep snooping enable

3、连接 DHCP 服务器的端口配置成信任端口
[HUAWEI] interface GigabitEthermnet 8/0/10
[HUAWEI-GigabitEthem et8/0/10] dhcp snooping trusted

4、Dos/DDos 攻击

拒绝服务攻击名称 说明
SYN Flood 攻击 利用 TCP 三次握手的一个漏洞向目标计算机发动攻击。攻击者向目标计算机发送 TCP 连接请求(SYN 报文),然后对于目标返回的 SYN-ACK 报文不作回应。目标计算机如果没有收到攻击者的 ACK 回应,就会一直等待,形成半连接,直到连接超时才释放。攻击者利用这种方式发送大量 TCP SYN 报文,让目标计算机上生成大量的半连接,迫使其大量资源浪费在这些半连接上。目标计算机一旦资源耗尽,就会出现速度极慢、正常的用户不能接入等情况。攻击者还可以伪造 SYN 报文,其源地址是伪造的或者不存在的地址,向目标计算机发起攻击。

Ping os Death
网络设备对数据包的大小是有限制的,IP 报文的长度字段为 16 位,即 IP 报文的最大长度为 65535 字节。如果遇到大小超过 65535 字节的报文,会出现内存分配错误,从而使接收方死机。攻击者只需不断的通过 Ping 命令向攻击目标发送超过 65535 字节的报文,就可以使目标对象的 TCP/IP 堆栈崩溃,致使接收方死机。

Teardrop
攻击者获取 IP 数据包后,把偏移字段设置成不正确的值,接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合出被拆分的数据包,这样,接收端会不停的尝试,以至操作系统因资源耗尽而崩溃。

smurf 攻击
攻击者向目标网络发送 ICMP 应答请求报文,该报文的目标地址设置为目标网络的广播地址,这样,目标网络的所有主机都对此 ICMP 应答请求作出答复,导致网络阻塞。Smurf 攻击

Smurf 攻击是一种分布式拒绝服务 (DDoS) 攻击的一种形式,它利用了 Internet 控制消息协议 (ICMP) 中的一个漏洞,该漏洞存在于早期的网络设备和操作系统中。这种攻击可以放大攻击者的网络流量,从而对目标主机造成严重的带宽消耗和服务中断。

攻击原理

放大效果:因为每个主机都会向受害者发送响应,这实际上产生了放大效果。例如,如果攻击者发送了一个 60 字节的 ICMP 请求,而每个响应的平均大小是 200 字节,那么如果有 100 台主机响应,则会产生大约 20,000 字节的流量,远远超过原始请求的大小。

伪造 ICMP 回显请求(Ping 请求):攻击者向一个或多个中间网络(通常是大型网络,如 ISP 网络)中的广播地址发送伪造的 ICMP 回显请求(即 ping 请求)。这些请求的源 IP 地址被篡改,使之看起来像是来自目标受害者的 IP 地址。

广播回显响应:中间网络中的每台主机都会响应这个广播请求,向被篡改的源 IP 地址(实际上是受害者)发送 ICMP 回显响应。

Winunuke
利用了 Windows 操作系统的一个漏洞,向这个 139 端口发送一些携带 TCP 带外(OOB)数据报文,但这些攻击报文与正常携带 OOB 数据报文不同的是,其字段与数据的实际位置不符,即存在重叠,Windows 操作系统在处理这些数据的时候,就会崩溃。

5、防DDOS 攻击 (无法彻底根治)

1.拒绝服务攻击(DoS攻击)和分布式拒绝服务攻击(DDoS攻击)的区别在于攻击者的数量和方式。 2.DoS攻击由单个攻击者发起,通过大量虚假请求耗尽目标系统的资源。 3.DDoS攻击由多个攻击者协同发起,利用大量肉鸡联合发起攻击,成倍提高攻击规模。 4.防范拒绝服务攻击的措施包括部署防火墙、IPS入侵防御系统、CDN内容分发网络等。 5.CDN技术通过分散攻击流量和降低主服务器的压力,提高网络的防御能力和恢复速度。


抗 DDoS 设备 防火墙、IPS
. 部署内容分发网络 CDN

购买流量清洗服务或流量清洗设备
・网站防护系统 WAF,WAF 防护应用层流量的拒绝服务攻击,适合防御 HTTP Get 攻击等。注意:WAF 服务并不提供针对四层及以下流量的防护,例如:ACK Flood、UDP Flood 等攻击,这类攻击建议使用 DDoS 及 IP 高防服务进行防护。
・网络架构上做好优化,采用负载均衡分流。

6、SQL注入

7、跨站脚本攻击

跨站脚本攻击(Cross Site Scripting) 其原理是攻击者向有 XSS 漏洞的网站中输入(传入)恶意的 HTML 代码,当其他用户浏览该网站时,这段 HTML 代码会自动执行,从而达到攻击的目的。如,盗取用户 Cookie、破坏页面结构、重定向到其他网站等。

XSS 防御
・验证所有输入数据,有效检测攻击。

对所有输出数据进行适当的编码,以防止任何已成功注入的脚本在浏览器端运行。 部署WAF、IPS 等专业设备。

网工 安全-病毒

计算机病毒是一种恶意软件,它能够自我复制并感染其他计算机程序或文件。计算机病毒具有多种特性,这些特性使得它们能够传播、隐藏和造成损害。以下是计算机病毒的一些主要特性:

  1. 自我复制能力 (Self-replication)
    • 计算机病毒能够自我复制并将副本植入其他程序或文件中。
    • 它们通常利用宿主程序的执行机会来传播自身。
  2. 隐蔽性 (Stealth)
    • 计算机病毒往往尽力避免被用户或安全软件发现。
    • 它们可能使用多种技术来隐藏自己的存在,例如修改文件的时间戳、隐藏文件属性等。
  3. 激活条件 (Activation Conditions)
    • 许多计算机病毒包含触发机制,只在满足特定条件时才会激活并执行其恶意行为。
    • 这些条件可以是日期、时间、特定的系统事件等。
  4. 破坏性 (Destructiveness)
    • 一旦激活,计算机病毒可能会执行各种恶意行为,如删除文件、破坏硬盘分区表、显示警告消息等。
    • 有些病毒可能只是引起轻微的干扰,而有些则可能导致系统崩溃。
  5. 传染性 (Infectivity)
    • 计算机病毒能够从一台计算机传播到另一台计算机。
    • 传播途径包括网络共享、电子邮件附件、移动存储设备等。
  6. 变种 (Variants)
    • 很多计算机病毒会有多个变种,这些变种通常是对原始病毒进行了一些小的修改。
    • 变种的存在使得病毒更加难以检测和清除。
  7. 多态性 (Polymorphism)
    • 一些高级病毒能够改变自身的代码结构,每次复制时都会产生不同的版本。
    • 这种特性使得传统的基于特征码的检测方法难以奏效。
  8. 驻留内存 (Resident in Memory)
    • 有些病毒在启动时加载到内存中,并在那里驻留,随时准备感染新程序或文件。
    • 这种特性使得病毒即使在没有磁盘访问权限的情况下也能传播。
  9. 加密 (Encryption)
    • 一些病毒会使用加密技术来隐藏自己的代码。
    • 加密后的病毒代码更难以被检测工具识别。
  10. 社会工程学 (Social Engineering)
    • 计算机病毒有时也会利用社会工程学技巧来诱骗用户下载或打开含有病毒的文件。
    • 例如,通过伪装成合法软件或诱骗用户点击链接。

病毒的类型

计算机病毒根据其特性和行为可以分为多种类型。下面是一些常见的计算机病毒类型及其特点:

  1. 引导区病毒 (Boot Sector Viruses)
    • 这类病毒感染计算机的引导扇区或MBR(主引导记录)。
    • 当计算机启动时,病毒会随之加载并感染系统。
  2. 文件病毒 (File Viruses)
    • 这类病毒感染可执行文件(如.EXE或.COM文件)。
    • 当用户运行这些被感染的文件时,病毒会执行并可能进一步感染其他文件。
  3. 宏病毒 (Macro Viruses)
    • 宏病毒利用文档文件(如Word或Excel文件)中的宏功能来传播。
    • 用户打开被感染的文档时,宏病毒会自动执行并感染其他文档或传播到其他计算机。
  4. 特洛伊木马 (Trojan Horses)
    • 特洛伊木马伪装成合法软件,但隐藏有恶意代码。
    • 它们通常不会自我复制,而是依赖于用户的交互来传播。
  5. 蠕虫 (Worms)
    • 蠕虫是一种独立的恶意程序,不需要寄生在其他程序上。
    • 它们能够通过网络自动传播,通常利用漏洞进行扩散。
  6. 多态病毒 (Polymorphic Viruses)
    • 这类病毒每次感染时都会改变其代码,以逃避检测。
    • 它们使用加密或其他技术来改变自身的外观,使得传统的特征码检测失效。
  7. 变形病毒 (Metamorphic Viruses)
    • 这是一种更高级的多态病毒,它不仅改变自身的代码,而且还改变其解码算法。
    • 这使得变形病毒比多态病毒更难检测。
  8. 寄生病毒 (Parasitic Viruses)
    • 寄生病毒依附在其他程序上,当宿主程序被执行时,病毒也跟着执行。
    • 这类病毒通常感染可执行文件或系统文件。
  9. 目录病毒 (Directory Viruses)
    • 这类病毒会修改文件目录信息,使文件看起来像是未被感染的。
    • 它们通过隐藏真实的文件并替换为病毒副本来传播。
  10. 复合病毒 (Composite Viruses)
    • 复合病毒结合了多种类型的病毒特性,如引导区病毒和文件病毒的组合。
    • 这种病毒可能同时感染引导扇区和文件。
  11. 逻辑炸弹 (Logic Bombs)
    • 逻辑炸弹是一种程序,它在特定条件下执行恶意行为。
    • 例如,当系统日期达到某个特定值时,逻辑炸弹会触发并执行其恶意行为。
  12. 时间炸弹 (Time Bombs)
    • 时间炸弹与逻辑炸弹类似,但它们通常与时间相关联。
    • 它们会在特定的时间点触发并执行恶意行为。
  13. 后门病毒 (Backdoor Viruses)
    • 后门病毒创建系统或应用程序中的秘密入口,允许远程访问或控制。
    • 这类病毒通常用于窃取数据或作为其他恶意活动的跳板。
  14. Rootkit
    • Rootkit是一种恶意软件,它可以隐藏其他恶意软件的存在,使其难以被检测和清除。
    • 它们通常用于维持持久的访问权。
  15. 勒索软件 (Ransomware)
    • 勒索软件是一种恶意软件,它通过加密用户的数据并要求支付赎金来解锁。
    • 这类病毒通常通过电子邮件、恶意广告或漏洞利用来传播。

木马

木马是如何攻击的?

木马通常采取下图方式实施对用户计算机的攻击:

木马的攻击流程

文件可以被复制、屏幕可以被观察、键盘击键可以被记录,木马不能被复制、不具有传染性。反弹性木马指木马上线后主动发起连接到控制端。

病毒防御技术

计算机病毒的预防方法:
1、安装杀毒软件及网络防火墙 (或者断开网络),及时更新病毒库;
2、及时更新操作系统的补丁;
3、不去安全性得不到保障的网站;
4、从网络下载文件后及时杀毒;
5、关闭多余端口,做到使电脑在合理的使用范围之内;
6、不要使用修改版的软件,如果一定要用,请在使用前查杀病毒 & 木马,以确保安全。

网工 安全基本概念

安全攻击的类型

重放攻击和伪造攻击的区别

重放攻击(Replay Attack)和伪造攻击(Forgery Attack)是两种不同的安全攻击类型,它们的目标和机制有所不同。下面是这两种攻击的详细区别:

重放攻击(Replay Attack)

重放攻击是指攻击者截获了合法的数据包,并在以后的时间点重新发送这些数据包,以达到非法的目的。这种攻击利用了网络通信中的延迟或缺乏有效的验证机制。攻击者通常会在数据包被发送后立即截获它,并在适当的时候重新发送,这样接收方可能会误认为这是新的、合法的请求。

特点:

  • 延迟发送:攻击者不是立即使用截获的数据包,而是等待一段时间后重新发送。
  • 目标:通常是为了重复某个操作或命令,例如重新发送支付指令。
  • 防范措施:使用时间戳、序列号、一次性口令(OTPs)等机制来确保数据的新鲜性。

伪造攻击(Forgery Attack)

伪造攻击是指攻击者创建并发送虚假的数据包,试图冒充合法用户或系统。这种攻击中,攻击者不是简单地重发已有的数据包,而是自己构造数据包以达到特定目的,如获取敏感信息或执行未经授权的操作。

特点:

  • 创造虚假数据:攻击者自行构造数据包,而非仅仅重发截获的数据包。
  • 目标:通常是冒充合法用户或实体,以获取未授权的访问权限或执行某些操作。
  • 防范措施:使用数字签名、证书验证等手段来确认数据的真实性和完整性。

比较

  • 动机:重放攻击的动机通常是重复一个操作,而伪造攻击则是试图冒充他人或系统。
  • 方法:重放攻击基于截获的数据包,而伪造攻击则基于攻击者自行构造的数据包。
  • 防范:重放攻击可以通过时间戳、序列号等机制来防止,而伪造攻击则需要更强大的身份验证和数据完整性检查。

实例

  • 重放攻击实例:假设Alice向Bob发送了一条转账指令,攻击者Charlie截获了这条指令并稍后重新发送给Bob,企图让Bob再次执行转账。
  • 伪造攻击实例:假设Charlie想要冒充Alice向Bob发送一条消息,他创建了一个带有Alice签名的消息,但实际上这个签名是伪造的。

总之,重放攻击和伪造攻击虽然都是为了欺骗接收方,但它们的方法和目标不同。防范这两种攻击需要采用不同的技术和策略。

网络安全中的被动攻击和主动攻击是按照攻击者的行动性质来区分的。被动攻击通常是指攻击者试图秘密地收集信息而不对数据进行任何修改的行为;而主动攻击则是指攻击者不仅收集信息,还会试图改变数据或者影响系统的正常运行。以下是四种主要的攻击类型及其简要描述:

被动攻击

被动攻击通常不改变数据,而是秘密地监听或监视数据传输。主要包括:

  1. 截获 (Interception)
    • 攻击者监听网络中的数据传输,例如通过嗅探器(packet sniffer)工具捕获网络上的数据包。这种方式可以用来获取未加密的数据,如用户名、密码、敏感文档或其他有价值的信息。
    • 防范措施:使用加密技术,如SSL/TLS协议保护HTTP连接(HTTPS),使用IPSec加密IP数据包等。
  2. 流量分析 (Traffic Analysis)
    • 即使数据被加密,攻击者仍然可以通过分析数据包的数量、大小、频率和流向等特征来推断出一些有用的信息。这种攻击特别适用于长期监控,可以帮助攻击者了解网络活动模式。
    • 防范措施:使用加密通信,以及实施网络混淆技术,如流量填充,来降低敏感信息被推断的风险。

主动攻击

主动攻击涉及到攻击者对数据的直接干预,主要包括:

  1. 中断 (Interruption)
    • 攻击者试图中断或阻止合法用户访问资源或服务,例如通过拒绝服务(DoS)或分布式拒绝服务(DDoS)攻击。
    • 防范措施:部署防火墙、负载均衡器、流量清洗中心等设备和技术来缓解此类攻击。
  2. 篡改 (Modification)
    • 攻击者在数据传输过程中更改数据,例如通过中间人(MITM)攻击来修改数据包的内容。
    • 防范措施:使用数字签名、消息认证码(MACs)等技术来确保数据完整性和真实性。
  3. 伪造 (Forgery)
    • 攻击者创建并发送虚假的数据包,试图冒充合法用户或系统。这种攻击中,攻击者不是简单地重发已有的数据包,而是自己构造数据包以达到特定目的,如获取敏感信息或执行未经授权的操作。
    • 防范措施:使用数字签名、证书验证等手段来确认数据的真实性和完整性。

总结

  • 被动攻击:主要关注于秘密地收集信息,不改变数据本身,包括截获和流量分析。
  • 主动攻击:涉及到数据的直接干预,包括中断服务、篡改数据和伪造数据。

为了抵御这些攻击,需要实施多层防御策略,包括但不限于使用加密技术、部署防火墙、定期进行安全审计和教育员工提高安全意识等措施。

网络提供的安全服务旨在保护网络通信和数据的安全性、完整性和可用性。以下是网络中常见的几种安全服务:

  1. 认证 (Authentication)
    • 定义:验证用户或系统的身份,确保只有授权的实体才能访问资源。
    • 实现方式:密码、生物识别、智能卡、双因素认证(例如短信验证码)等。
  2. 授权 (Authorization)
    • 定义:确定经过认证的用户或系统能够访问哪些资源或执行哪些操作。
    • 实现方式:访问控制列表 (ACLs)、角色基础的访问控制 (RBAC)、权限管理系统等。
  3. 加密 (Encryption)
    • 定义:将明文数据转换为密文,以防止未经授权的访问。
    • 实现方式:对称加密(如AES)、非对称加密(如RSA)、哈希函数等。
  4. 数据完整性 (Data Integrity)
    • 定义:确保数据在传输过程中不被篡改。
    • 实现方式:使用散列函数(如SHA-256)、消息认证码 (MACs)、数字签名等。
  5. 机密性 (Confidentiality)
    • 定义:保护数据不被未经授权的实体查看。
    • 实现方式:加密技术、安全套接层/传输层安全 (SSL/TLS) 协议等。
  6. 不可否认性 (Non-repudiation)
    • 定义:提供证据证明某项操作确实由某个实体执行,防止该实体否认自己的行为。
    • 实现方式:数字签名、时间戳服务等。
  7. 可用性 (Availability)
    • 定义:保证服务和资源始终对合法用户可用。
    • 实现方式:冗余设计、灾难恢复计划、负载均衡、反DDoS措施等。
  8. 审计 (Audit)
    • 定义:记录和追踪网络活动,以便事后分析和验证。
    • 实现方式:日志记录、事件监控、入侵检测系统 (IDS) 等。
  9. 隐私 (Privacy)
    • 定义:保护个人信息不被未经授权的披露。
    • 实现方式:数据最小化原则、匿名化技术、数据脱敏等

这些安全服务通常通过各种技术和协议来实现,例如:

  • 传输层安全 (TLS):用于加密Web通信,确保数据在客户端与服务器之间的传输安全。
  • 安全套接字层 (SSL):早期版本的TLS,用于加密Web通信。
  • 虚拟专用网络 (VPN):通过加密通道在公共网络上提供私有连接。
  • 防火墙 (Firewall):用于监控和过滤进出网络的流量。
  • 入侵检测系统 (IDS):监控网络流量以检测潜在的攻击。
  • 入侵预防系统 (IPS):除了检测外,还能够采取行动阻止攻击的发生。
  • 数字证书 (Digital Certificates):用于验证网络实体的身份,并支持加密通信。

PDR 安全保护模型

PDR模型(Protection-Detection-Response,保护-检测-响应)是一种网络安全模型,由美国国际互联网安全系统公司(ISS)提出。该模型体现了主动防御的思想,并强调了网络安全是一个时间问题。PDR模型的核心组成部分包括三个阶段:保护(Protection)、检测(Detection)和响应(Response)。

PDR模型的组成部分

  1. 保护 (Protection)
    • 目标:通过各种安全措施来防止或减轻攻击的影响。
    • 实现方式:包括但不限于防火墙配置、加密技术、访问控制列表(ACLs)、防病毒软件、补丁管理和安全配置等。
  2. 检测 (Detection)
    • 目标:及时发现网络中的异常行为或安全事件。
    • 实现方式:使用入侵检测系统(IDS)、日志分析、网络监控工具、端点检测与响应(EDR)工具等。
  3. 响应 (Response)
    • 目标:对检测到的安全事件进行快速有效的响应,以减轻损失。
    • 实现方式:制定应急响应计划、隔离受影响的系统、修复漏洞、恢复受损的服务等。

PDR模型的特点

  • 时间模型:PDR模型是一个基于时间的安全模型,它强调了攻击者和防御者之间的时间竞赛。模型中的公式 Et = Dt + Rt - Pt 表示有效时间(Effective Time, Et)等于检测时间(Detection Time, Dt)加上响应时间(Response Time, Rt)减去保护时间(Protection Time, Pt)。如果防御者能够在攻击者造成实质性损害之前完成检测和响应,则系统被认为是安全的。
  • 可量化和可数学证明:PDR模型提供了量化安全水平的方法,并允许通过数学模型来评估和优化安全策略的有效性。

PDR模型的应用

  • 安全策略制定:组织可以基于PDR模型来制定全面的安全策略,确保从保护、检测到响应各个环节都有相应的措施。
  • 安全评估:通过模拟攻击场景来评估现有安全措施的有效性,并根据PDR模型调整策略。
  • 应急响应:当发生安全事件时,组织可以根据PDR模型快速调动资源进行响应,减少损失。

网工 Tcp

面向连接的概念:在自己监听的端口接收到连接的请求,然后经过“三次握手”,维护一定的数据结构和对方的信息,确认了该信息:我发的内容对方会接收,对方发的内容我也会接收,直到连接断开。

断开:经过“四次挥手”确保双方都知道且同意对方断开连接,然后在remove为对方维护的数据结构和信息,对方之后发送的包也不会接收,直到 再次连接。

TCP的连接不是建立了一座桥(或者虚拟的专用通道),TCP更好的比喻是在码头上增加了记录人员,核查人员和督导人员,至于IP层和数据链路层,它没有任何改造。

TCP 三次握手的过程如下(以下同时举例一个生活场景帮助理解):

过程解释

  1. 第一次握手:客户端向服务器发送一个带有SYN(同步)标志位的数据包(就好像客户端向服务器说“你好,我想和你建立连接” ),同时还会选择一个初始序列号(seq),假设为x,此时客户端进入SYN_SENT(已发送同步状态)。
  2. 第二次握手:服务器收到客户端的SYN数据包后,知道客户端要建立连接。服务器向客户端返回一个带有SYN和ACK(确认)标志位的数据包(意思是“你好,我收到你建立连接请求了,我也同意建立连接” )。其中ACK的值为客户端发送的seq + 1(即x + 1)表示确认收到客户端的信息,服务器也选择一个自己的初始序列号(假设为y),此时服务器进入SYN_RCVD(同步收到状态)。
  3. 第三次握手:客户端收到服务器的SYN + ACK数据包后,检查ACK是否正确(确认是x + 1),如果正确则向服务器发送一个带有ACK标志位的数据包(意思是“好的,我知道你收到我的请求并且同意了,那我们连接建立吧” ),ACK的值为服务器的序列号y + 1 ,此时客户端和服务器都进入ESTABLISHED(已建立连接状态),连接建立成功,可以开始传输数据了。

举例(生活场景类比)

把客户端比作小明,服务器比作一个公司的前台。

  1. 第一次握手:小明打电话给公司(类比客户端发送SYN包)说“我想找你们公司谈个业务合作”(这是表达建立联系的意图),同时自己心里默默记了个数字(初始序列号x ,比如是100 ,就好像是自己这次沟通的一个标识)。
  2. 第二次握手:前台接到电话(服务器收到SYN),然后跟小明说(回复SYN + ACK包) “好的先生,我知道您要谈业务合作(确认收到请求),我们可以合作,我是前台(类比服务器的初始序列号y ,假设是200),您的请求编号我记好了是到您了(确认号是x + 1 = 101)”。
  3. 第三次握手:小明听到前台回复(收到SYN + ACK包),确认了前台确实知道自己的请求(检查ACK是101),然后说(发送ACK包)“好的,那我现在过来(表示确认建立连接),我知道你是前台(确认序列号y + 1 = 201)” ,然后双方都知道接下来可以进行业务沟通(数据传输)了。

以下是TCP中常见标志位的作用:

1. URG(紧急标志)

  • 当设置为1时表明发送端向另一端使用紧急方式发送数据,即此报文段中有紧急数据。
  • 紧急数据不按常规的排队顺序来传送(绕过接收方缓存机制),而是系统会尽快传送。发送方的TCP会把紧急数据放到本报文段数据的最前面,紧急指针指向数据段中的某个字节(从第一个字节到指针所指的字节就是紧急数据)。

2. ACK(确认标志)

  • 当ACK = 1时表示确认号字段有效。
  • 大多数情况下该标志位是置位的,除了最初建立连接时的SYN包之外,第一次请求建立连接时ack为0 (在三次握手过程中,第二次握手ACK标志置1 ),在连接建立之后传输数据等情况下,TCP规定该位必须设置为1。
  • 接收端用确认号来给发送端反馈已经成功接收到的数据信息,其值为希望接收的下一个数据包起始序号,即意味着确认号之前的序号数据已经被接收。

3. PSH(推标志)

  • 当设置为1时,指示接收方应该尽快将这个报文交给应用层。
  • 表示需要将收到的数据立刻传给上层应用协议而无需等待缓冲区满等情况。在两个应用进程进行交互式通信时比较常用,例如客户发一个请求给服务器时希望立即能够收到对方的响应,客户应用程序可以通知TCP使用推送(push)操作。

4. RST(复位标志)

  • 当设置为1时表示连接复位。
  • 用于复位那些产生错误的连接(如因为主机崩溃或其他原因导致的错误情况);也被用来拒绝错误和非法的数据包。
  • 比如当一个没有被使用的端口即使发来了连接请求,也可以返回一个RST设置为1的包;程序宕掉或切断电源等原因导致主机重启的情况下,如果对方还在通信,原有的TCP通信也无法继续进行,若对方发过来数据则可以用RST = 1强制断开连接。

5. SYN(同步标志)

  • 在建立连接时使用,用于同步连接双方的序列号和确认应答号等信息。
  • 最初建立连接时,客户端发送SYN = 1,ACK = 0的包请求连接,服务端收到后回复SYN = 1,ACK = 1的包表示响应连接请求,在三次握手过程中SYN标志总共会出现两次(双方各一次)。

6. FIN(结束标志)

  • 当设置为1 时表示发送方完成任务,今后不会有数据发送,希望断开连接。
  • 可以由通信双方的任一方发出,表示此方向的数据传输结束。当通信结束希望断开连接,通信双方的主机之间就可以相互交换FIN位置为1的TCP段,每个主机又对对方的FIN包进行确认应答以后就可以断开连接。

TCP 流量控制和拥塞控制

  1. 序号:解决乱序的问题,确保先来后到
  2. 确认序号:发出去的包应该有确认,要不然我怎么知道对方有没有收到呢?如果没有收到就应该重新发送,直到送达。这个可以解决不丢包的问题。
  3. 窗口大小(滑动窗口):TCP 要做流量控制,通信双方各声明一个窗口,标识自己当前能够的处理能力,别发送的太快,撑死我,也别发的太慢,饿死我。(针对接收方的缓存)
  4. 窗口大小(拥塞窗口):拥塞控制(控制网络中发送的包)TCP 发送包常被比喻为往一个水管里面灌水,而 TCP 的拥塞控制就是在不堵塞,不丢包的情况下,尽量发挥带宽。水管有粗细,网络有带宽,也即每秒钟能够发送多少数据;水管有长度,端到端有时延。在理想状态下,水管里面水的量 = 水管粗细 x 水管长度。对于到网络上,通道的容量 = 带宽 × 往返延迟。

TCP 建立连接采用三次握手而不是两次握手主要有以下几个关键原因:

一、防止已失效的连接请求报文突然又传送到服务器端而产生错误(针对特殊状况)

  1. 假设采用两次握手建立连接:
    • 客户端发送一个连接请求报文(SYN)给服务器。
    • 服务器收到这个请求后,返回一个确认报文(ACK/SYN)表示同意建立连接。此时两次握手完成,连接建立。
    • 但是如果客户端发出的第一个连接请求报文在网络中延迟、阻塞,导致它在某个网络节点中滞留了很长时间。
    • 客户端在一段时间后没有收到服务器的确认,于是重新发送一个新的连接请求报文,这次新的请求正常到达服务器,经过两次握手后连接建立并完成数据传输,最后关闭连接。
    • 而此时,那个延迟的旧连接请求报文突然到达了服务器。如果是两次握手,服务器会认为这是一个新的连接请求,然后向客户端发送确认报文并建立连接,而客户端此时并不会理会这个旧的确认报文,也不会向服务器发送数据,导致服务器一直等待客户端发送数据,浪费服务器的资源。

二、三次握手才能让双方都确认自己和对方的收发能力正常

  1. 第一次握手:客户端发送 SYN 报文给服务器,服务器知道了客户端的发送能力正常,自己的接收能力正常。
  2. 第二次握手:服务器回应 SYN + ACK 报文给客户端,客户端收到后知道了自己的发送和接收能力正常,也知道了服务器的接收和发送能力正常。
  3. 第三次握手:客户端回应 ACK 报文给服务器,服务器收到后知道了自己的发送和接收能力正常,也确认了客户端的接收能力正常。

只有经过这三次信息的交互和确认,双方才能确定彼此的连接参数是可靠的,连接才能正式建立,从而为后续的数据传输提供稳定可靠的基础。因此,TCP 采用三次握手来建立连接是为了保证连接建立的可靠性和准确性,避免出现上述可能的异常情况。

TCP 协议的四次挥手过程如下(以下假设客户端主动发起连接关闭请求):

第一次挥手

  • 客户端打算关闭连接,此时客户端向服务器发送一个带有FIN(Finish,完成)标志位的TCP报文段,表示客户端不再发送数据了 。
  • 发送后客户端进入FIN_WAIT_1(终止等待1)状态 。

第二次挥手

  • 当服务器收到客户端的FIN报文后,服务器会向客户端发送一个ACK(Acknowledge,确认)报文段,表明服务器已经收到客户端的关闭请求。
  • 此时服务器进入CLOSE_WAIT(关闭等待)状态 ,客户端收到这个ACK后进入FIN_WAIT_2(终止等待2)状态。在这个阶段,从客户端到服务器这个方向的连接已经关闭(客户端不能再发数据过来),但从服务器到客户端方向的连接还未关闭(服务器如果还有数据可以继续发向客户端)。

第三次挥手

  • 当服务器完成数据发送(如果还有的话),准备关闭连接时,服务器向客户端发送FIN报文段,告知客户端服务器这边也要关闭连接了。
  • 然后服务器进入LAST_ACK(最后确认)状态,等待客户端的确认应答。

第四次挥手

  • 客户端收到服务器的FIN报文后,必须对这个FIN进行确认,向服务器发送ACK报文段。
  • 发送完成后,客户端进入TIME_WAIT(时间等待)状态。经过2倍的MSL(Maximum Segment Lifetime,报文最大生存时间)时长后,如果期间没有收到服务器重发的FIN报文,客户端就进入CLOSED(关闭)状态 。
  • 当服务器收到客户端的ACK报文后,服务器也进入CLOSED状态,至此双方的连接完全关闭。

一些相关要点和原因解释

为什么需要四次挥手而不是三次(类似三次握手那样)
主要是因为TCP是全双工通信,在关闭连接时,双方都需要单独关闭各自的发送通道和接收通道。第二次和第三次挥手之间存在服务器可能还需要发送数据给客户端的情况,不能合并成一步。

客户端为什么要等待2MSL时长(在TIME_WAIT状态)

  1. 确保最后一个ACK报文能被服务器收到,如果ACK丢失,服务器会重发FIN报文,在2MSL时间内客户端可以重新发送ACK 。
  2. 经过2MSL时长可以让本次连接中在网络中残留的报文段都消失,防止新连接中收到旧连接的残留报文而导致异常。

状态变化总结(客户端和服务器)

  • 客户端:ESTABLISHED -> FIN_WAIT_1 -> FIN_WAIT_2 -> TIME_WAIT -> CLOSED
  • 服务器:ESTABLISHED -> CLOSE_WAIT -> LAST_ACK -> CLOSED

TCP 流量控制

在 TCP 连接中,存在“半打开”和“半关闭”的状态概念:

一、半打开(Half-Open)

  1. 定义:
    • 半打开状态是指在 TCP 连接的一端异常关闭(例如主机崩溃、网络故障等),而另一端却不知道的情况。此时,正常的一端还认为连接是正常的,仍然可以向异常的一端发送数据,但异常的一端无法响应。
  2. 产生场景和示例:
    • 例如,客户端和服务器建立了 TCP 连接,在通信过程中,服务器突然发生故障(如硬件故障导致系统崩溃),但客户端并不知道服务器已经出问题。此时,从客户端的角度来看,连接还是正常的,但实际上服务器已经无法接收或处理数据,连接处于半打开状态。
    • 在这种情况下,如果客户端继续向服务器发送数据,由于服务器无法响应,这些数据可能会丢失,并且客户端可能需要经过一段时间后才能检测到连接出现问题(例如通过超时机制等)。

二、半关闭(Half-Close)

  1. 定义:
    • 半关闭是指在一个 TCP 连接中,一端已经关闭了它的输出信道(发送数据的能力),但仍然可以接收来自另一端的数据。也就是说,连接的一个方向已经关闭,而另一个方向仍然保持打开。
  2. 产生场景和示例:
    • 比如,客户端向服务器发送了一个关闭输出信道的请求(执行 shutdown(socket, SHUT_WR) 这样的操作),这意味着客户端不再向服务器发送数据,但它仍然可以接收服务器发送的数据。此时,连接处于半关闭状态。
    • 一个实际的例子是,客户端已经完成了数据的发送,但还需要接收服务器的一些响应或最后的确认信息,这时就可以使用半关闭状态。客户端关闭输出信道后,服务器可能继续发送剩余的数据,直到完成它的任务后再关闭连接

TCP 拥塞控制 (cnnd 为拥塞窗口)

慢启动算法:一开始设置为1个MSS(最大报文段)拥塞窗口,收到确认后为发送2个MSS,收到确认后发送2的3次方个MSS ,之后一直扩大。

拥塞避免算法:当到达 16个MSS 大小(上图),按照+1个MSS大小一直到发生计时器超时,这里拥塞窗口回到慢启动阶段再来,这里新的拥塞阀值为超时时拥塞窗口的一半(如上图发生拥塞是为24那么新阀值为12)。到达阀值后再进入拥塞避免算法,依次增加1个MSS大小。

TCP 拥塞控制是一种用于管理网络拥塞的机制,目的是避免网络因为过多的数据传输而发生拥塞崩溃,同时保证网络资源的公平共享和高效利用。

一、拥塞窗口(Congestion Window,cwnd)

  • 这是 TCP 用于进行拥塞控制的关键参数。
  • 它限制了发送方在未收到确认之前可以发送的数据量。
  • 初始时,拥塞窗口通常较小,然后随着数据的成功传输和确认,逐渐增大。

二、慢启动(Slow Start)

  1. 阶段特点:
    • 当一个新的 TCP 连接建立或者在长时间的空闲后重新开始传输时,拥塞窗口初始化为一个较小的值(通常是 1 个或几个 MSS,Maximum Segment Size,最大报文段长度)。
    • 每收到一个 ACK 确认,拥塞窗口就会增加一个 MSS 的大小。
    • 例如,开始时 cwnd = 1,发送一个报文段,收到确认后 cwnd = 2,再发送两个报文段,收到相应确认后 cwnd = 4,以此类推,呈指数增长。
  2. 阈值(Threshold)的引入:
    • 当拥塞窗口增长到一个特定的阈值(ssthresh,初始值通常是 65535 字节或其他根据网络状况设定的值)时,慢启动阶段结束,进入拥塞避免阶段。

三、拥塞避免(Congestion Avoidance)

  1. 增长方式变化:
    • 在拥塞避免阶段,拥塞窗口不再呈指数增长,而是每经过一个往返时间(RTT),拥塞窗口只增加 1 个 MSS(即线性增长)。
    • 这样可以更加稳定地增加数据传输量,同时降低网络拥塞的风险。
  2. 网络拥塞的检测与处理:
    • 如果发生超时重传(即发送方在一定时间内没有收到 ACK 确认),TCP 认为网络发生了拥塞。
    • 此时,将阈值 ssthresh 设为当前拥塞窗口 cwnd 的一半,拥塞窗口 cwnd 重新初始化为 1 个 MSS,然后重新进入慢启动阶段。
    • 除了超时重传,还有快速重传和快速恢复机制来处理可能的拥塞情况。

四、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)

  1. 快速重传:
    • 当接收方收到一个失序的报文段时,会立即发送重复的 ACK 给发送方,表明期望收到下一个按序的报文段。
    • 当发送方连续收到三个重复的 ACK 时,就认为有报文段丢失,立即重传丢失的报文段,而不必等待超时定时器到期。
  2. 快速恢复:
    • 在快速重传之后,不执行慢启动,而是将拥塞窗口 cwnd 设为新的 ssthresh 值(即当前拥塞窗口的一半),然后线性增加 cwnd(每收到一个重复的 ACK,cwnd 增加 1 个 MSS)。
    • 当收到新的 ACK 确认新数据时,将 cwnd 恢复到拥塞避免阶段的增长方式。

例如,在一个网络中,TCP 连接开始建立,拥塞窗口初始为 1 个 MSS,经过慢启动指数增长到阈值,然后进入拥塞避免线性增长。如果出现超时重传,就重新调整阈值和拥塞窗口大小,重新开始慢启动;如果是快速重传,则进入快速恢复阶段进行相应处理。

通过超时重传和快速重传机制进行调整

  1. 超时重传
    • 当发送方在一定时间内没有收到确认(ACK)时,认为发生了超时。
    • 此时,TCP 认为网络可能出现了拥塞。
    • 处理方式是将阈值 ssthresh 设为当前拥塞窗口 cwnd 的一半,拥塞窗口 cwnd 重新初始化为 1 个 MSS,然后重新进入慢启动阶段。
    • 这种大幅度的调整可以迅速减少发送的数据量,给网络一定的时间来缓解拥塞状况。
  2. 快速重传
    • 当接收方收到一个失序的报文段时,会立即发送重复的 ACK 给发送方,表明期望收到下一个按序的报文段。
    • 当发送方连续收到三个重复的 ACK 时,就认为有报文段丢失,立即重传丢失的报文段,而不必等待超时定时器到期。
    • 随后进入快速恢复阶段,将拥塞窗口 cwnd 设为新的 ssthresh 值(即当前拥塞窗口的一半),并线性增加 cwnd(每收到一个重复的 ACK,cwnd 增加 1 个 MSS),避免了因等待超时而长时间停止数据传输,同时也能较快地恢复到正常的数据传输状态,减少了网络拥塞的可能性。

超时重传的原理

超时重传机制是 TCP 保证数据可靠传输的一个重要机制,其原理如下:

一、定时器设置

  1. 当发送方发送一个数据报文段时,它会同时启动一个定时器。
  2. 定时器的时长是根据网络的往返时间(RTT)以及一些其他因素动态计算出来的。通常,初始的定时器时长会基于一个经验值或者通过一些测量和估算方法来确定。

二、超时判断

  1. 发送方在定时器计时期间会等待接收方返回的确认(ACK)。
  2. 如果在定时器超时之前收到了确认,说明数据报文段已经成功到达接收方,发送方就会取消定时器,并继续发送下一个数据报文段。
  3. 如果定时器超时了还没有收到确认,发送方就认为该数据报文段在网络中丢失或者出现了其他传输问题。

三、重传操作

  1. 一旦发生超时,发送方会重新发送该数据报文段。
  2. 同时,发送方可能还会调整定时器的时长。例如,根据网络的拥塞状况和之前的往返时间测量结果,增加或减小定时器的时间间隔,以适应网络的变化。
  3. 重传后,再次启动定时器,继续等待确认。如果再次超时,可能会继续重传,并且可能会进一步调整定时器和拥塞窗口等参数,以应对可能的网络拥塞或其他问题。

四、RTT 测量与更新

  1. 在数据传输过程中,发送方会持续测量每个数据报文段的往返时间(RTT)。
    • 即从发送数据报文段的时刻到收到相应确认的时间间隔。
  2. 发送方会根据多个 RTT 的测量值,采用一些算法(如指数加权移动平均等)来更新定时器的时长,以使其更准确地反映当前网络的实际状况。
    • 例如,如果最近几次的 RTT 变长,说明网络状况可能变差,定时器时长可能会相应增加,以减少不必要的重传;反之,如果 RTT 变短,定时器时长可能会适当减小,以提高数据传输的效率。

练习题

TCP使用慢启动拥塞避免机制进行拥塞控制。当拥塞窗口大小为16时,发送节点出现超时未收到确认现象时,将采取的措施是(1),再经过5轮后的拥塞窗口大小为(2),则上述空格内容为() 请解答

在TCP的拥塞控制算法中,当发送节点出现超时未收到确认的现象时,它假定网络中发生了拥塞,因此需要采取措施减少发送到网络中的数据量以避免进一步的拥塞。具体措施如下:

  1. 慢启动阈值(ssthresh)的更新:当检测到超时时,慢启动阈值ssthresh会被设置为当前拥塞窗口cwnd的一半(为了避免除以奇数出现的小数一般会向下取整),但最少要大于2。如果当前拥塞窗口大小为16,则新的慢启动阈值ssthresh应该是8(16的一半)。
  2. 拥塞窗口(cwnd)的重置:超时发生后,拥塞窗口cwnd会被重置为1个MSS(Maximum Segment Size,最大报文段长度)。这是为了重新开始慢启动过程,逐步增加发送速率直到再次达到ssthresh或遇到网络拥塞。
  3. 慢启动与拥塞避免:当cwnd等于ssthresh时,从慢启动阶段转换到拥塞避免阶段。在慢启动阶段,每收到一个ACK,cwnd增加一个MSS;而在拥塞避免阶段,每一轮次(每次接收到与cwnd数量相等的ACK)增加一个MSS。

根据上述规则,当拥塞窗口大小为16时,出现超时后,采取的措施是将cwnd减少为1(即1个MSS),并将ssthresh设置为8。

接下来,经过5轮次(假设每轮成功收到ACK并且没有发生进一步的超时)后的拥塞窗口大小计算如下:

  • 第1轮后:cwnd = 1 (慢启动阶段)
  • 第2轮后:cwnd = 2 (慢启动阶段)
  • 第3轮后:cwnd = 8 (拥塞避免阶段,每次增加1 MSS)达到阈值大小后cwnd增加一个MSS
  • 第4轮后:cwnd = 9
  • 第5轮后:cwnd = 10

因此,再经过5轮后的拥塞窗口大小为10。

网工 udp

  1. udp 协议的特点:
    • 无需事先建立连接(和对方打招呼)也不管网络连通性
    • 包丢了就丢了,不保证网络包的顺序到达
    • 不管网络环境是否拥塞,完全听众上层应用
  2. udp 的使用场景
    • 网络环境好,不易丢包(或者说对丢包不敏感的应用)
    • 不需要一对一沟通,适用广播或者多播的协议。例:dhcp 、vxlan,使用D类地址组播IGMP 协议
  3. 基于 udp 的使用场景
    • QUIC Quick UDP Internet Connections 协议(快速 UDP 互联网连接)是 Google 提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。
    • 大多数流媒体协议
    • 采用自定义的可靠 UDP 协议,自定义重传策略,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成的影响。
    • IOT 物联网:推出了物联网通信协议 Thread,就是基于 UDP 协议的。
    • 移动流量上网的数据面对的协议 GTP-U 是基于 UDP 的。因为移动网络协议比较复杂,而 GTP 协议本身就包含复杂的手机上线下线的通信协议。

TCP面向字节流与UDP面向报文的区别

UDP(用户数据报协议)面向报文,TCP(传输控制协议)面向字节流,它们的区别如下:

一、数据传输单位

  • UDP面向报文
    • UDP把应用层交下来的数据添加首部后,就直接交付给IP层,既不合并,也不拆分,而是保留这些报文的边界。
    • 例如,应用层一次性传递1000字节的数据给UDP,UDP就会把这1000字节当作一个整体(一个报文)发送出去,在接收端也会一次性收到1000字节的完整数据。
    • 如果应用层传的报文大小超过了网络MTU(最大传输单元),则在IP层会进行分片,但对于UDP来说,它本身不关心也不知道IP层的分片操作。
  • TCP面向字节流
    • TCP把应用层交下来的数据看成一连串无结构的字节流,它不保留报文的边界。
    • 例如,应用层先后发送了两个1000字节的数据,TCP可能会根据当前的网络状况和自身的拥塞控制机制,把这2000字节数据划分成多个小的数据段进行发送,也可能会把它们合并成一个较大的数据段发送。
    • 在接收端,接收方的TCP把收到的数据放入接收缓冲区,应用程序可以根据自己的需求,在合适的时候从缓冲区读取任意数量的字节,因此接收方读取数据的次数和每次读取的数据量都是不确定的。

二、传输可靠性

  • UDP面向报文
    • UDP是不可靠的传输协议,它没有像TCP那样的确认、重传、拥塞控制等机制来保证报文的可靠传输。
    • 发送方UDP将报文发送出去后,并不关心报文是否正确到达接收方,也不会因为网络拥塞等原因而调整发送速率。
    • 因此,UDP适用于对实时性要求高、但对数据准确性要求相对较低的场景,如视频会议、直播等。
  • TCP面向字节流
    • TCP是可靠的传输协议,通过序列号、确认应答、超时重传、滑动窗口、拥塞控制等机制来保证数据的可靠传输和有序到达。
    • 对于发送的每一个字节的数据,都有相应的序列号进行标识,接收方会对接收到的数据进行确认应答,发送方如果在一定时间内没有收到确认,就会重传数据。
    • 这些机制确保了TCP能够在各种网络环境下,尽可能准确地将数据按序传输到接收方,适用于对数据准确性要求高的场景,如文件传输、电子邮件等。

三、数据处理方式

  • UDP面向报文
    • UDP的应用程序必须选择合适大小的报文。如果报文过大,在IP层分片后,若其中一个分片丢失,就会导致整个报文的丢失;如果报文过小,则会降低网络传输效率。
    • 由于UDP一次交付一个完整的报文,因此接收方的UDP在向上交付数据时,交付给应用层的也是一个完整的报文。应用程序需要根据报文的边界来识别不同的报文数据。
  • TCP面向字节流
    • 应用程序不必考虑数据的大小和边界问题,它只需关注从接收缓冲区读取数据的逻辑。
    • 例如,应用程序可以先读取一部分数据进行处理,然后再根据需要继续读取剩余数据,而不必关心这些数据在原始字节流中的位置和边界。
    • TCP的接收方会根据序列号将乱序到达的数据重新排序,然后放入接收缓冲区供应用程序读取。