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 可靠传输。
相关推荐
csdn_aspnet3 天前
Modbus RTU 与 Modbus TCP:它们有什么区别?
网络·tcp/ip·tcp·modbus·rtu
小贺儿开发7 天前
Unity 局域网遥控幻灯片展示工具 1.0
unity·网络通信·工具·ppt·控制·网页·互动
xxy222417 天前
Linux 网络编程入门(一):从 OSI 模型到 TCP Socket 编程
网络·tcp/ip·tcp
liulilittle9 天前
XTCP简述
网络·c++·tcp/ip·ip·tcp·通信
消失的旧时光-194321 天前
第 4 篇:TCP 字节流中的粘包、半包与机器人协议解析
机器人·tcp·通信协议·半包·粘包
gwf21623 天前
Mellanox ConnectX网卡RDMA性能优化全指南:深度解析(固件调优、中断亲和与GPUDirect必知必会)
网络协议·tcp/ip·网络安全·性能优化·tcp·tcpdump
夏天测1 个月前
Python 网络编程从 TCP 三次握手到 Socket 搭建极简 AI 推理服务端(零基础可跑通完整代码)
python·socket·网络通信·tcp 网络编程·零基础网络编程
深念Y1 个月前
tcpfwd-doc
linux·嵌入式·arm·编译·tcp·服务
AI人工智能+电脑小能手1 个月前
【大白话说Java面试题 第215题】【10_网络协议篇】第6题:Socket 是什么?
java·udp·网络编程·socket·tcp