Linux——网络(tcp)


前言

Linux——网络基础(1)-优快云博客

Linux——网络(udp)-优快云博客

  1. TCP协议概述:简要介绍TCP协议的基本特性,包括连接建立、数据传输、流量控制、拥塞控制等。

  2. Linux网络编程基础:介绍Linux下的Socket编程接口,以及如何使用这些接口进行TCP通信。

  3. TCP服务器与客户端的实现:通过实际的代码示例,展示如何编写一个简单的TCP服务器和客户端程序。

  4. TCP协议的性能优化:探讨如何通过调整TCP参数、使用非阻塞I/O、多线程/多进程等技术来提升TCP应用的性能。

  5. 常见问题与调试技巧:分享一些在实际开发中可能遇到的TCP相关问题,以及如何使用工具进行网络调试和故障排查。


一、TCP逻辑

1. 面向连接

TCP是一种面向连接的协议,这意味着在数据传输之前,通信双方需要先建立一个连接。连接的建立和关闭是通过三次握手和四次挥手来完成的。

三次握手(建立连接)
  1. SYN:客户端向服务器发送一个SYN(同步)报文,表示请求建立连接。

  2. SYN-ACK:服务器收到SYN后,回复一个SYN-ACK(同步-确认)报文,表示同意建立连接。

  3. ACK:客户端收到SYN-ACK后,发送一个ACK(确认)报文,连接正式建立。

四次挥手(关闭连接)
  1. FIN:主动关闭方(客户端或服务器)发送一个FIN(结束)报文,表示希望关闭连接。

  2. ACK:被动关闭方收到FIN后,回复一个ACK报文,表示确认收到关闭请求。

  3. FIN:被动关闭方完成数据发送后,发送一个FIN报文,表示自己也准备关闭连接。

  4. ACK:主动关闭方收到FIN后,回复一个ACK报文,连接正式关闭。


2. 可靠性

TCP通过以下机制确保数据的可靠传输:

  • 序列号与确认机制:每个TCP报文都包含一个序列号(Sequence Number),接收方通过发送确认号(Acknowledgment Number)来确认已收到的数据。如果发送方未收到确认,则会重传数据。

  • 超时重传:如果发送方在一定时间内未收到确认,则会重新发送数据。

  • 数据校验:TCP使用校验和(Checksum)来检测数据在传输过程中是否损坏。


3. 流量控制

TCP通过滑动窗口机制实现流量控制,防止发送方发送数据过快导致接收方缓冲区溢出。

  • 接收窗口:接收方通过TCP头部中的窗口字段告知发送方自己当前可接收的数据量。

  • 动态调整:接收方可以根据自身缓冲区的可用空间动态调整窗口大小。


4. 拥塞控制

TCP通过拥塞控制算法避免网络拥塞,常见的算法包括:

  • 慢启动(Slow Start):初始时发送方以较小的窗口发送数据,随后指数增长。

  • 拥塞避免(Congestion Avoidance):当窗口达到阈值后,发送方以线性方式增加窗口大小。

  • 快速重传(Fast Retransmit):当发送方收到三个重复的ACK时,立即重传丢失的报文。

  • 快速恢复(Fast Recovery):在快速重传后,发送方进入快速恢复阶段,避免窗口大幅减小。


5. 基于字节流

TCP是一种基于字节流的协议,这意味着:

  • 无消息边界:TCP将数据视为连续的字节流,不保留发送方写入的数据边界。例如,发送方发送两次数据(“Hello”和“World”),接收方可能一次性收到“HelloWorld”。

  • 粘包与拆包:由于TCP的字节流特性,接收方需要自己处理数据的边界问题(如通过长度字段或特殊分隔符)。


6. 全双工通信

TCP支持全双工通信,即通信双方可以同时发送和接收数据。每个TCP连接由两个独立的流组成:

  • 一个流用于从客户端到服务器的数据传输。

  • 另一个流用于从服务器到客户端的数据传输。


7. 状态机

TCP连接的生命周期由一个状态机管理,常见的状态包括:

  • LISTEN:服务器等待客户端连接。

  • SYN_SENT:客户端已发送SYN,等待服务器响应。

  • SYN_RECEIVED:服务器已收到SYN并发送SYN-ACK,等待客户端确认。

  • ESTA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱吃喵的鲤鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值