【网络编程】TCP原理

TCP套接字中的I/O缓冲

write函数调用后并非立即传输数据,read函数调用后也非马上接收数据。write函数调用瞬间,数据将移至输出缓冲;read函数调用瞬间,从缓冲读取数据。

这些IO缓冲特性可整理如下。

  • 口IO缓冲在每个TCP套接字中单独存在。
  • 口I/O缓冲在创建套接字时自动生成。
  • 口即使关闭套接字也会继续传递输出缓冲中遗留的数据。
  • 口关闭套接字将丢失输人缓冲中的数据。

TCP会控制数据流,不会因为缓冲溢出而丢失数据。

TCP 内部工作原理1:与对方套接字的连接

  1. 与对方套接字建立连接。
  2. 与对方套接字进行数据交换。
  3. 断开与对方套接字的连接。

对方套接字建立连接的过程。连接过程中套接字之间的对话如下

  1. Shake 1\]套接字A:"你好,套接字B。我这儿有数据要传给你,建立连接吧。

  2. Shake 3\]套接字A:"谢谢你受理我的请求。"

套接字是全双工方式工作的,可以双向传递数据。

SEQ:1000,ACK为空意思是现传递的数据包序号为1000,若无误通知我传输1001数据包。

SYN是Synchronization简写,表示收发数据前传输的同步信息。

SYN+ACK\]SEQ:2000,ACK:1001,此时SEQ为2000,ACK为1001 "现传递的数据包序号为2000,如果接收无误,请通知我向您传递2001号数据包。"而ACK 1001的含义如下:"刚才传输的SEQ为1000的数据包接收无误,现在请传递SEQ为1001的数据包。" ### **TCP 内部工作原理2:与对方主机的数据交换** 通过第一步三次握手过程就完成了数据交换准备,开始收发数据。 ![](https://img-blog.csdnimg.cn/direct/d7e4b90997a54b10861056c73cfa3cc5.png) 主机A分两次向主机B传递200字节。首先,主机A通过1个数据包发送100个字节数据,SEQ为1200。B向A发送ACK1301确认。ACK不为1201是因为ACK号的增量为传输的数据字节数。+1是为了告知对方下次要传递的SEQ号。 ### **TCP 内部工作原理3:断开与套接字的连接** 1. 套接字A:"我希望断开连接。 2. 套接字B:"哦,是吗?请稍候。" 3. 套接字B:"我也准备就绪,可以断开连接。 4. 套接字A:"好的,谢谢合作。" ![](https://img-blog.csdnimg.cn/direct/f4f5d22a33e8427c8cef2039799adb39.png) 双方各发送1次FIN消息后断开连接。此过程经历4个阶段,因此又称四次握手(Four-way handshaking)。

相关推荐
Xの哲學3 小时前
Linux流量控制: 内核队列的深度剖析
linux·服务器·算法·架构·边缘计算
tuokuac3 小时前
docker中nginx配置报错解决
linux·运维·服务器
掘根4 小时前
【消息队列项目】虚拟机管理实现
网络
老王熬夜敲代码5 小时前
网络中数据传输的具体过程
linux·网络·笔记
汤愈韬6 小时前
TK_网络基础和常见攻击(笔记)
网络·笔记
程序员佳佳6 小时前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
学烹饪的小胡桃7 小时前
【运维学习】实时性能监控工具 WGCLOUD v3.6.2 更新介绍
linux·运维·服务器·学习·工单系统
北邮刘老师7 小时前
【智能体互联协议解析】需要“智能体名字系统”(ANS)吗?
网络·人工智能·大模型·智能体·智能体互联网
照海19Gin8 小时前
【企业网架构实验解析】三层组网与 AC+AP 无线部署的协议逻辑(eNSP 仿真实践)
网络
Lilixxs8 小时前
wireshark LLDP 协议抓包获取 M580 PLC 网口地址
网络·测试工具·wireshark·plc·施耐德·lldp·m580