Linux入门DAY34(TCP)

#网络通信 #传输层 #TCP协议

前言 本篇总结起点为文档中「网络抓包工具」章节,记为第 1 点,后续知识点按文档出现顺序依次编号,梳理传输层 UDP、TCP 全部核心内容,涵盖工具实操、协议原理、编程接口、报文格式、核心机制,可用于课程复习、实验预习。

1、网络抓包工具 wireshark

  1. Linux 安装命令:sudo apt‑get install wireshark
  2. 启动命令:sudo wireshark
  3. 抓包操作步骤:选择网卡;设置过滤条件(示例:udp.port == 50000);运行网络通信程序抓取数据包,用于分析网络问题。

2、UDP 协议(传输层)

2.1 UDP 协议特点

  1. 无连接;
  2. 面向数据报;
  3. 尽最大努力交付,不可靠,存在丢包、乱序现象;
  4. 内部机制简单,实时性好、传输效率高;典型应用场景:直播、游戏画面传输。

2.2 两种软件架构模型

  • B/S(浏览器 / 服务器):使用通用浏览器作为客户端;只需要开发服务端;资源主要保存在服务端。
  • C/S(客户端 / 服务端):专用客户端程序;客户端、服务端都需要开发;两端均可保存业务资源。

2.3 UDP 通信 API 流程

  • 服务端流程:socket()bind()recvfrom()sendto()close()
  • 客户端流程:socket()sendto()recvfrom()close()
核心函数说明
  1. socket():创建套接字;参数AF_INET代表 IPv4 协议族;SOCK_DGRAM指定 UDP;返回套接字文件描述符。
  2. sendto():发送 UDP 数据报,需要传入对端 IP 端口地址结构体。
  3. recvfrom():接收 UDP 报文,可以获取发送方的地址信息。
  4. bind():服务端绑定本机 IP 地址与端口号。
  5. 地址结构体struct sockaddr_insin_family协议族,sin_port端口(必须网络字节序),sin_addr存储 IP。

2.4 主机字节序与网络字节序转换函数

  • htons:short 类型,主机字节序转网络字节序
  • htonl:long 类型,主机字节序转网络字节序
  • ntohs:short 类型,网络字节序转主机字节序
  • ntohl:long 类型,网络字节序转主机字节序
  • inet_addr():点分十进制字符串 IP 转换为 32 位二进制 IP
  • inet_ntoa():IP 结构体二进制转换成点分十进制字符串 IP

2.5 UDP 报文头部结构

源端口 (2 字节)|目的端口 (2 字节)|数据包长度 (2 字节)|校验和 (2 字节)

3、TCP 协议(传输层)

3.1 TCP 协议特点

  1. 面向连接
  2. 面向字节流;
  3. 可靠传输;依靠三次握手、四次挥手、应答确认、超时重传等机制保障数据可靠;
  4. 内部机制复杂,实时性、传输效率弱于 UDP;典型场景:HTTPS、FTP、MQTT。

3.2 三次握手(建立连接,客户端发起)

  1. 客户端发送SYN报文,请求建立连接;
  2. 服务端回复SYN+ACK报文,同意建立连接;
  3. 客户端回复ACK报文,三次握手完成,连接建立。

3.3 数据传输

报文标志位PSH:表示报文携带上层应用数据;接收方收到数据后回复ACK完成确认。

3.4 四次挥手(断开连接)

  1. 通信一方发送FIN报文,表示本方不再发送数据;
  2. 对方回复ACK确认收到关闭请求;
  3. 对方发送FIN报文,表示对方也不再发送数据;
  4. 本方回复ACK,四次挥手完成,连接释放。

3.5 TCP 编程流程

服务端:socket()bind()listen()accept()recv() / send()close() 客户端:socket()connect()send() / recv()close()

API 说明
  1. connect():客户端调用,向服务端发起 TCP 连接请求。
  2. listen():开启监听;参数 backlog 表示未完成三次握手队列最大数量。
  3. accept():取出完成三次握手的客户端连接,返回通信套接字;原有 socket 继续充当监听套接字。
  4. recv():接收 TCP 数据;返回值 > 0 读到数据;返回 0 代表对方关闭连接;返回‑1 代表出错。

3.6 TCP 报文头部

固定头部 20 字节:源端口、目的端口、序列号、确认号;数据偏移;标志位;窗口;校验和;紧急指针;可选字段。

头部标志位

  • SYN:请求建立连接
  • ACK:应答确认
  • PSH:携带应用层数据
  • FIN:请求断开连接
  • URG:紧急数据
  • RST:重置连接

3.7 TCP 可靠传输核心机制

  1. 应答确认机制:每个发送报文分配序列号;接收方返回确认号 = 收到最后一个字节编号 +1。
  2. 超时重传机制:发送报文后等待 ACK 应答;超时未收到应答,自动重传该报文。
  3. 滑动窗口机制:设置缓冲区,区分已发送已确认、已发送未确认、待发送数据,提升吞吐量。
  4. 流量控制机制:依靠 ACK 报文中窗口值动态调整发送速率,防止接收方缓冲区溢出。
  5. 捎带应答机制:ACK 应答可以跟随业务数据报文一起发送。
  6. 延迟应答机制:可以合并多条应答,减少报文数量。

小结

  1. Wireshark 抓包工具用于网络数据包观测调试,通过过滤条件可以只抓取指定端口报文。
  2. UDP 无连接面向数据报,实时高效但不可靠;TCP 面向连接面向字节流,依靠握手挥手、确认重传等机制实现可靠传输。
  3. UDP 使用sendto/recvfrom收发;TCP 区分监听套接字和通信套接字,使用send/recv收发;网络编程必须注意主机字节序与网络字节序转换。
  4. TCP 的三次握手负责建立连接,四次挥手负责断开连接;多种内部机制共同保障 TCP 可靠传输。
相关推荐
j7~1 天前
【Linux 网络】四十.《网络基础(传输层协议:UDP、TCP)》--中篇
linux·tcp·tcp协议·确认应答机制·连接管理机制·tcp流量控制
小则又沐风a3 天前
深入理解TCP协议----滑动窗口,流量控制
linux·网络协议·tcp
H_oRIZoN_6 天前
Linux入门DAY43 ARM 架构基础、寄存器、大小端、异常向量、交叉编译
linux·arm·linux应用编程
j7~6 天前
【Linux网络加餐课】(篇八)网络版计算器(终篇):守护进程、标准 IO 重定向与部署打包
linux·运维·网络编程·tcp·守护进程·io重定向·部署打包
j7~6 天前
【Linux网络加餐】(篇七)网络版计算器(中):协议落地、报文分隔与完整链路
linux·c++·网络编程·tcp·报文分割·网络计算器·协议落地
H_oRIZoN_6 天前
Linux入门DAY44 ARM 入门 Day02|ARM 汇编指令、模式切换、栈操作、汇编 C 混合编程
linux·单片机·嵌入式硬件·arm·linux应用编程
H_oRIZoN_7 天前
Linux入门DAY42【51 单片机】DS18B20 数字温度传感器完整解析(单总线原理 + 时序 + 读取流程)
linux·单片机·linux应用编程
爱学习的程序媛7 天前
TCP / UDP 协议详解
网络·网络协议·udp·tcp·通信协议
Brookty7 天前
TCP传输效率衡量、ACK延迟机制与窗口效率介绍
网络·tcp
mitugaoyang19938 天前
Marvell88Q5152交换机开发(5)-烧录和调试
网络·嵌入式硬件·网络通信