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_in:sin_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 可靠传输。
相关推荐
承渊政道1 天前
Linux网络学习【TCP Socket编程实战:connect的断线重连与客户端访问Linux验证】
linux·网络·学习·ubuntu·tcp·socket编程
骑着蜗牛撵大象3273 天前
服务下线不再炸:分层关闭、TCP 存活探测与负载均衡排水的落地套路
android·tcp/ip·负载均衡·tcp·高可用·健康检查·优雅关闭
洋不写bug6 天前
网络编程(二)TCP回显服务器与客户端通信详解
服务器·网络·tcp/ip·tcp·网络通信·javaee·回显服务器
洋不写bug6 天前
网络原理(一)应用层协议、传输层UDP/TCP报文格式解析
网络·tcp/ip·udp·tcp·应用层·javaee·传输层
流浪0018 天前
计算机网络篇3:端口号与 socket:数据到达主机后,如何找到目标进程?
计算机网络·udp·tcp·端口·网络字节序
Brookty11 天前
双向分流FIN标记、TCB服务逻辑与TCP断开连接流程介绍
网络·tcp
阿钱真强道12 天前
17 嵌入式操作系统 | uloop 事件循环:TCP 客户端
c语言·tcp/ip·tcp·事件循环·uloop
0+11112 天前
Linux --应用层自定义协议与序列化
linux·运维·服务器·网络·tcp
xiaoye-duck15 天前
《Linux 网络编程·加餐》详解 listen 的 backlog 与 TCP 全连接队列
linux·tcp
j7~22 天前
【Linux 网络】四十.《网络基础(传输层协议:UDP、TCP)》--中篇
linux·tcp·tcp协议·确认应答机制·连接管理机制·tcp流量控制