平面设计师必备网站/网店推广实训报告

平面设计师必备网站,网店推广实训报告,seo外链发布工具,建设购物网站多少钱《UNIX网络编程卷1:套接字联网API》第2章 传输层:TCP、UDP和SCTP 2.1 传输层的核心作用与协议选型 传输层是网络协议栈中承上启下的核心层,直接决定应用的通信质量。其主要职责包括: 端到端通信:屏蔽底层网络细节&am…

《UNIX网络编程卷1:套接字联网API》第2章 传输层:TCP、UDP和SCTP


2.1 传输层的核心作用与协议选型

传输层是网络协议栈中承上启下的核心层,直接决定应用的通信质量。其主要职责包括:

  • 端到端通信:屏蔽底层网络细节,为应用提供逻辑通信通道;
  • 可靠性保障(TCP/SCTP):通过确认、重传、拥塞控制等机制确保数据完整;
  • 多路复用与分用:通过端口号区分不同应用进程;
  • 流量控制:防止发送方压垮接收方缓冲区。

协议选型黄金法则

  • TCP:需要可靠传输、数据顺序性的场景(如文件传输、HTTP);
  • UDP:低延迟、容忍丢包、强调实时性的场景(如视频会议、DNS查询);
  • SCTP:多宿主容灾、多流并发、消息边界保留的场景(如5G核心网信令)。

2.2 TCP协议深度解析
2.2.1 TCP头部结构与字段详解

TCP头部由20字节固定部分和可变选项组成,其结构如下(图2-1):

 0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Source Port          |       Destination Port        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Acknowledgment Number                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Data |           |U|A|P|R|S|F|                               |
| Offset| Reserved  |R|C|S|S|Y|I|            Window             |
|       |           |G|K|H|T|N|N|                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Checksum            |         Urgent Pointer        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Options (可变长度)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

关键字段解析

  • 序列号(Sequence Number):32位,标识数据段的第一个字节的编号;
  • 确认号(Acknowledgment Number):32位,期望收到的下一个字节的编号;
  • 窗口大小(Window):16位,接收方的可用缓冲区大小(流量控制核心);
  • 标志位
    • SYN:发起连接;
    • ACK:确认数据;
    • FIN:关闭连接;
    • RST:强制重置连接;
    • URG:紧急指针有效。
2.2.2 TCP连接管理:三次握手与四次挥手
  1. 三次握手建立连接(图2-2):

    客户端                            服务器|-------- SYN(seq=100) ------->||<-- SYN+ACK(seq=300, ack=101)--||-------- ACK(ack=301) -------->|
    
    • 序列号随机化:防止历史报文干扰(RFC 6528);
    • 半连接队列:服务器在SYN_RCVD状态维护未完成握手队列。
  2. 四次挥手终止连接(图2-3):

    主动关闭方                        被动关闭方|-------- FIN(seq=200) ------->||<-------- ACK(ack=201)--------||<-------- FIN(seq=500)--------||-------- ACK(ack=501) ------->|
    
    • TIME_WAIT状态:主动关闭方等待2MSL(最大报文段生存时间),防止旧报文干扰新连接;
    • 孤儿连接:被动关闭方在CLOSE_WAIT状态需及时关闭。

代码示例:TCP服务器监听连接

int listenfd = Socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in servaddr;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9999);Bind(listenfd, (SA*)&servaddr, sizeof(servaddr));
Listen(listenfd, LISTENQ); // LISTENQ通常设置为SOMAXCONN
2.2.3 流量控制与拥塞控制
  1. 流量控制

    • 滑动窗口协议:接收方通过窗口字段通告可用缓冲区大小;
    • 零窗口探测:发送方定时发送1字节数据,避免死锁。
  2. 拥塞控制

    • 慢启动(Slow Start):窗口指数增长至阈值;
    • 拥塞避免(Congestion Avoidance):窗口线性增长;
    • 快速重传(Fast Retransmit):收到3个重复ACK立即重传;
    • 快速恢复(Fast Recovery):避免窗口重置为1。

内核参数调优(Linux示例):

# 调整接收缓冲区大小
sysctl -w net.ipv4.tcp_rmem='4096 87380 6291456'
# 启用BBR拥塞控制算法
sysctl -w net.ipv4.tcp_congestion_control=bbr

2.3 UDP协议特性与编程实践
2.3.1 UDP头部结构

UDP头部仅8字节(图2-4):

 0      7 8     15 16    23 24    31  
+--------+--------+--------+--------+
|    源端口      |    目的端口       |
+--------+--------+--------+--------+
|      长度      |     校验和       |
+--------+--------+--------+--------+
|           数据(若有)            |
+-----------------------------------+

核心特点

  • 无连接:无需握手,直接发送数据报;
  • 无可靠性保证:不重传、不排序、不拥塞控制;
  • 数据报边界保留:每个sendto对应一个完整报文。
2.3.2 UDP编程核心挑战
  1. 报文丢失处理:需应用层实现超时重传与确认机制;
  2. 乱序处理:为每个报文添加序列号;
  3. MTU限制:避免IP分片(通常限制为1472字节,1500-20-8)。

代码示例:UDP时间服务器

int sockfd = Socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in servaddr;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9999);Bind(sockfd, (SA*)&servaddr, sizeof(servaddr));char buff[MAXLINE];
struct sockaddr_in cliaddr;
socklen_t len = sizeof(cliaddr);for (;;) {int n = Recvfrom(sockfd, buff, MAXLINE, 0, (SA*)&cliaddr, &len);time_t ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));Sendto(sockfd, buff, strlen(buff), 0, (SA*)&cliaddr, len);
}
2.3.3 UDP的适用场景
  • 实时音视频传输(如WebRTC):容忍丢包,但要求低延迟;
  • DNS查询:单次请求响应,无连接开销;
  • 广播/多播通信:向多个接收者高效发送数据。

2.4 SCTP协议:下一代传输协议
2.4.1 SCTP核心特性
  • 多宿主(Multi-homing):一个端点可绑定多个IP地址,提升容灾能力;
  • 多流(Multi-streaming):独立的数据流避免队头阻塞;
  • 消息边界保留:基于消息而非字节流;
  • 四次握手关联建立:抵御SYN洪泛攻击。
2.4.2 SCTP关联建立与关闭
  1. 四次握手建立关联(图2-5):

    客户端                            服务器|-------- INIT(随机数A) ------->||<------- INIT-ACK(随机数B)-----||------- COOKIE-ECHO(加密Cookie)>||<------- COOKIE-ACK ------------|
    
    • 状态Cookie:服务器不保存状态,防止DDoS攻击。
  2. 优雅关闭关联

    主动关闭方                        被动关闭方|-------- SHUTDOWN -------------->|<------- SHUTDOWN-ACK -----------||<------- SHUTDOWN-COMPLETE ------|
    

代码示例:SCTP单流服务器

int listenfd = Socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);struct sockaddr_in servaddr;
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(9999);Bind(listenfd, (SA*)&servaddr, sizeof(servaddr));struct sctp_event_subscribe events;
bzero(&events, sizeof(events));
events.sctp_data_io_event = 1; // 启用数据IO事件
Setsockopt(listenfd, IPPROTO_SCTP, SCTP_EVENTS, &events, sizeof(events));Listen(listenfd, LISTENQ);

2.5 协议对比与选型指南
特性TCPUDPSCTP
连接方式面向连接无连接面向关联
可靠性可靠不可靠可靠
数据边界
传输模式字节流数据报消息流
多路径支持是(多宿主)
典型应用HTTP、FTP、SSHDNS、QUIC、实时音视频5G信令、VoLTE

选型建议

  • 嵌入式设备:优先UDP(资源占用低),复杂场景用TCP;
  • 高可用服务:SCTP多宿主特性提升容灾能力;
  • 实时系统:UDP+应用层协议(如RTSP)。

2.6 实战:多协议时间服务器
2.6.1 TCP时间服务器

(代码参考第1章示例)

2.6.2 UDP时间服务器
#include "unp.h"
#include <time.h>int main() {int sockfd = Socket(AF_INET, SOCK_DGRAM, 0);struct sockaddr_in servaddr;bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(9999);Bind(sockfd, (SA*)&servaddr, sizeof(servaddr));char buff[MAXLINE];struct sockaddr_in cliaddr;socklen_t len;for (;;) {len = sizeof(cliaddr);Recvfrom(sockfd, buff, MAXLINE, 0, (SA*)&cliaddr, &len);time_t ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));Sendto(sockfd, buff, strlen(buff), 0, (SA*)&cliaddr, len);}
}
2.6.3 SCTP时间服务器
#include "unp.h"
#include <netinet/sctp.h>
#include <time.h>int main() {int sockfd = Socket(AF_INET, SOCK_SEQPACKET, IPPROTO_SCTP);struct sockaddr_in servaddr;bzero(&servaddr, sizeof(servaddr));servaddr.sin_family = AF_INET;servaddr.sin_addr.s_addr = htonl(INADDR_ANY);servaddr.sin_port = htons(9999);Bind(sockfd, (SA*)&servaddr, sizeof(servaddr));struct sctp_event_subscribe events;bzero(&events, sizeof(events));events.sctp_data_io_event = 1;Setsockopt(sockfd, IPPROTO_SCTP, SCTP_EVENTS, &events, sizeof(events));Listen(sockfd, LISTENQ);struct sockaddr_in cliaddr;char buff[MAXLINE];for (;;) {socklen_t len = sizeof(cliaddr);int connfd = Accept(sockfd, (SA*)&cliaddr, &len);time_t ticks = time(NULL);snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));Write(connfd, buff, strlen(buff));Close(connfd);}
}

2.7 调试工具与性能分析
2.7.1 Wireshark抓包分析
  • TCP流追踪:右键报文 → Follow → TCP Stream;
  • UDP过滤udp.port == 9999
  • SCTP关联分析sctp.association_id
2.7.2 网络性能测试
  • TCP吞吐量测试
    # 服务器端
    iperf3 -s
    # 客户端
    iperf3 -c 192.168.1.100 -t 30
    
  • UDP丢包率测试
    iperf3 -u -c 192.168.1.100 -b 100M -t 20
    

2.8 本章小结与进阶习题

小结:本章深入解析了TCP、UDP、SCTP的协议机制与编程实践,通过对比分析指导协议选型,为复杂网络应用开发奠定基础。

习题

  1. 实现SCTP多流客户端,验证不同流的独立性;
  2. 使用UDP实现可靠文件传输协议(含ACK与超时重传);
  3. 分析TCP BBR与CUBIC拥塞控制算法的差异,编写测试报告。

付费用户专属资源

  • 完整多协议时间服务器代码工程;
  • Wireshark抓包文件(标注关键字段);
  • 扩展阅读:《SCTP在5G核心网中的实践》。

通过本章学习,读者将掌握传输层协议的核心原理,并能够根据场景需求选择最佳协议,设计高效可靠的网络应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/73864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习chp14 — 2】生成式模型—变分自编码器VAE(超详细分析,易于理解,推导严谨,一文就够了)

目录 二、变分自编码器 VAE 1、自编码器 AE &#xff08;1&#xff09;自编码器的基本结构与目标 1.1 编码器-解码器结构 1.2 目标函数&#xff1a;重构误差最小化 &#xff08;2&#xff09;自编码器与 PCA 的对比 2.1 PCA 与线性降维 2.2 非线性映射的优势 &#xf…

Linux 一步部署DHCP服务

#!/bin/bash #脚本作者和日期 #author: PEI #date: 20250319 #检查root权限 if [ "$USER" ! "root" ]; then echo "错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;" exit 0 fi #防火墙与高级权限 systemctl stop firewa…

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 与 Teleport 原理深度剖析 一、Teleport&#xff1a;突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…

Python功能完美的宝库——内置的强大“武器库”builtins

builtins模块包含了Python大量的内置对象&#xff08;函数、异常和类型等&#xff09;&#xff0c;她是Python的内置武器库&#xff0c;堪称功能完美的宝库。 笔记模板由python脚本于2025-03-19 08:16:27创建&#xff0c;本篇笔记适合喜欢探究python的coder翻阅。 【学习的细节…

PyTorch 深度学习实战(17):Asynchronous Advantage Actor-Critic (A3C) 算法与并行训练

在上一篇文章中&#xff0c;我们深入探讨了 Soft Actor-Critic (SAC) 算法及其在平衡探索与利用方面的优势。本文将介绍强化学习领域的重要里程碑——Asynchronous Advantage Actor-Critic (A3C) 算法&#xff0c;并展示如何利用 PyTorch 实现并行化训练来加速学习过程。 一、A…

【深度学习】多目标融合算法(五):定制门控网络CGC(Customized Gate Control)

目录 一、引言 二、CGC&#xff08;Customized Gate Control&#xff0c;定制门控网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、引言 上一…

在线pdf处理网站合集

1、PDF24 Tools&#xff1a;https://tools.pdf24.org/zh/ 2、PDF派&#xff1a;https://www.pdfpai.com/ 3、ALL TO ALL&#xff1a;https://www.alltoall.net/ 4、CleverPDF&#xff1a;https://www.cleverpdf.com/cn 5、Doc Small&#xff1a;https://docsmall.com/ 6、Aconv…

网络编程-实现客户端通信

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/select.h>#define MAX_CLIENTS 2 // 最大客户端连接数 #define BUFFER_SI…

力扣100二刷——图论、回溯

第二次刷题不在idea写代码&#xff0c;而是直接在leetcode网站上写&#xff0c;“逼”自己掌握常用的函数。 标志掌握程度解释办法⭐Fully 完全掌握看到题目就有思路&#xff0c;编程也很流利⭐⭐Basically 基本掌握需要稍作思考&#xff0c;或者看到提示方法后能解答⭐⭐⭐Sl…

【大模型实战篇】多模态推理模型Skywork-R1V

1. 背景介绍 近期昆仑万维开源的Skywork R1V模型&#xff0c;是基于InternViT-6B-448px-V2_5以及deepseek-ai/DeepSeek-R1-Distill-Qwen-32B 通过强化学习得到。当然语言模型也可以切换成QwQ-32B。因此该模型最终的参数量大小为38B。 该模型具备多模态推理能力&#xf…

识别并脱敏上传到deepseek/chatgpt的文本文件中的护照信息

本文将介绍一种简单高效的方法解决用户在上传文件到DeepSeek、ChatGPT&#xff0c;文心一言&#xff0c;AI等大语言模型平台过程中的护照号识别和脱敏问题。 DeepSeek、ChatGPT&#xff0c;Qwen&#xff0c;Claude等AI平台工具快速的被接受和使用&#xff0c;用户每天上传的文…

数据驱动进化:AI Agent如何重构手机交互范式?

如果说AIGC拉开了内容生成的序幕&#xff0c;那么AI Agent则标志着AI从“工具”向“助手”的跨越式进化。它不再是简单的问答机器&#xff0c;而是一个能够感知环境、规划任务并自主执行的智能体&#xff0c;更像是虚拟世界中的“全能员工”。 正如行业所热议的&#xff1a;“大…

【AI News | 20250319】每日AI进展

AI Repos 1、XianyuAutoAgent 实现了 24 小时自动化值守的 AI 智能客服系统&#xff0c;支持多专家协同决策、智能议价和上下文感知对话&#xff0c;让我们店铺管理更轻松。主要功能&#xff1a; 智能对话引擎&#xff0c;支持上下文感知和专家路由阶梯降价策略&#xff0c;自…

C语言自定义类型【结构体】详解,【结构体内存怎么计算】 详解 【热门考点】:结构体内存对齐

引言 详细讲解什么是结构体&#xff0c;结构体的运用&#xff0c; 详细介绍了结构体在内存中占几个字节的计算。 【热门考点】&#xff1a;结构体内存对齐 介绍了&#xff1a;结构体传参 一、什么是结构体&#xff1f; 结构是⼀些值的集合&#xff0c;这些值称为成员变量。结构…

Apache DolphinScheduler:一个可视化大数据工作流调度平台

Apache DolphinScheduler&#xff08;海豚调度&#xff09;是一个分布式易扩展的可视化工作流任务调度开源系统&#xff0c;适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据…

[蓝桥杯 2023 省 B] 飞机降落

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间&#xff0c;即它最早可以于 T i T_{i} Ti​ 时刻…

使用Trae 生成的React版的贪吃蛇

使用Trae 生成的React版的贪吃蛇 首先你想用这个贪吃蛇&#xff0c;你需要先安装Trae Trae 官方地址 他有两种模式 chat builder 我使用的是builder模式,虽然是Alpha.还是可以用。 接下来就是按着需求傻瓜式的操作生成代码 他生成的代码不完全正确&#xff0c;比如没有引入…

rust学习笔记17-异常处理

今天聊聊rust中异常错误处理 1. 基础类型&#xff1a;Result 和 Option&#xff0c;之前判断空指针就用到过 Option<T> 用途&#xff1a;表示值可能存在&#xff08;Some(T)&#xff09;或不存在&#xff08;None&#xff09;&#xff0c;适用于无需错误信息的场景。 f…

Python:单继承方法的重写

继承&#xff1a;让类和类之间转变为父子关系&#xff0c;子类默认继承父类的属性和方法 单继承&#xff1a; class Person:def eat(self):print("eat")def sing(self):print("sing") class Girl(Person):pass#占位符&#xff0c;代码里面类下面不写任何东…

[免费]直接整篇翻译pdf工具-支持多种语言

<闲来没事写篇博客填补中文知识库漏洞> 如题&#xff0c;[免费][本地]工具基于开源仓库&#xff1a; 工具 是python&#xff01;太好了&#xff0c;所以各个平台都可以&#xff0c;我这里基于windows. 1. 先把github代码下载下来&#xff1a; git clone https://githu…