4.3 传输控制协议TCP

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • 前言
  • [1 概述](#1 概述)
  • [2 特点](#2 特点)
  • [3 套接字(Socket)](#3 套接字(Socket))
  • [4 TCP 连接的管理](#4 TCP 连接的管理)

前言

TCP 协议通过可靠的连接、流量控制、拥塞控制等机制,确保在不可靠的 IP 网络上实现可靠的数据传输。本章详细讲解了 TC P协议的基本概念、主要特点以及套接字和 TCP 连接的管理。

1 概述

TCP(传输控制协议,Transmission Control Protocol) 是一种面向连接 的传输层协议,它为网络中的应用程序提供可靠的 字节流服务。

TCP 协议建立在不可靠的 IP 网络之上,通过增加多种机制,确保数据能够可靠、顺序地传输。

2 特点

①面向连接

  • TCP 是面向连接的协议,在传输数据之前,必须在通信的两端建立一条逻辑连接。连接的建立通过三次握手(three-way handshake)完成,确保双方准备好接收和发送数据。
  • 连接的两端通过套接字(socket)来标识,每个套接字由 IP 地址和端口号组成。

②可靠性保障

  • TCP 提供可靠的交付服务,通过确认应答重传机制序列号校验和等手段,确保数据包在传输过程中不会丢失,并且按照正确的顺序到达接收端。
  • 若数据包在传输过程中丢失或错误,TCP 会自动请求重新传输,直到接收方确认收到数据。

③全双工通信

TCP 支持全双工通信,即通信双方可以同时发送和接收数据,数据流在双方之间可以并行传输

④面向字节流

  • TCP 中的"流"(stream) 指的是流入或流出进程的字节序列
  • TCP 将应用层数据视为字节流,不保证数据块大小,即发送方和接收方之间的数据块不必一一对应。接收方收到的数据可能被分割成多个小块,也可能是发送方的一个大数据块。
  • 虽然 TCP 是面向字节流的,但它会确保发送方发出的字节流与接收方收到的字节流完全一致

⑤流量控制与拥塞控制

  • TCP 提供流量控制机制,通过窗口大小来调节数据的发送速率,防止接收方缓存溢出。
  • 通过拥塞控制算法(如慢启动、拥塞避免、快速重传等),TCP 动态调整发送速率,避免网络出现拥塞。

3 套接字(Socket)

①定义

在 TCP 协议中,连接 是通信的基础,每个 TCP 连接都是由两个端点(套接字)构成的。
套接字(Socket) 是连接双方的抽象,它用于标识网络中的通信端点。在 TCP 协议中,每个套接字由一对唯一的IP 地址端口号组成,形成一个连接的标识符。

②格式
IP地址 : 端口号

【示例】
192.168.1.20:2028,表示位于 IP 地址 192.168.1.20 上的端口 2028

③TCP 连接的端点

每一条 TCP 连接唯一地由两个端点标识:

复制代码
TCP 连接 = {socket1, socket2} = {(IP1: port1), (IP2: port2)}

其中,socket1socket2 分别表示两端的 IP 地址和端口号。

④套接字的多重含义

在网络编程和操作系统中,socket 一词有多种含义:

  • API 接口:应用程序通过调用操作系统提供的套接字 API(称为 socket API)来进行网络编程。
  • 套接字函数 :在 socket API 中,socket() 是用于创建套接字的函数。
  • 套接字描述符 :当调用 socket() 函数时,操作系统会返回一个套接字描述符,它是一个用于标识套接字的唯一标识符。
  • 套接字实现:在操作系统内核中,套接字是通过 Berkeley 套接字接口来实现的,主要用于网络通信的管理和操作。

4 TCP 连接的管理

在 TCP 协议中,连接是通信的基础。TCP 连接的生命周期包括建立、数据传输和拆除三个阶段:

①建立连接(三次握手)

  • 客户端发送一个SYN(同步)报文段,表示请求连接。
  • 服务器响应一个SYN-ACK(同步-确认)报文段,表示同意连接。
  • 客户端再次发送一个ACK(确认)报文段,表示连接建立成功。

②数据传输

一旦连接建立,双方可以开始数据的双向传输 。数据以字节流 的方式传输,TCP 会对数据进行分段处理,每个数据段都有序列号和确认号来确保可靠交付。

③拆除连接(四次挥手)

当数据传输完成后,连接需要被拆除,拆除过程包括四次挥手:

  • 一方发送FIN(结束)报文段,表示希望关闭连接。
  • 另一方响应FIN-ACK,表示确认关闭连接。
  • 发送方再次发送ACK,表示确认对方的关闭请求。
  • 最终连接被完全关闭。

在 TCP 协议中,连接是一种由操作系统和协议栈提供的抽象 。每一条连接由一对套接字(IP 地址和端口号)唯一标识。

因此,即使是同一台机器上的多个应用进程,也可以通过不同的端口号在同一 IP 地址上建立多个独立的 TCP 连接。

同一个 IP 地址和端口号组合只能对应一条 TCP 连接,但同一 IP 地址可以通过不同的端口号建立多个连接。不同的 IP 地址和端口号组合可以建立完全独立的连接。

相关推荐
Bruce_Liuxiaowei3 小时前
常见高危端口风险分析与防护指南
网络·网络安全·端口·信息搜集
tmacfrank3 小时前
Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议
android·网络·https
liulilittle3 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
cui_win3 小时前
【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
linux·网络·tcp/ip
2501_916013744 小时前
iOS 多线程导致接口乱序?抓包还原 + 请求调度优化实战
websocket·网络协议·tcp/ip·http·网络安全·https·udp
M1A14 小时前
TCP/IP协议精解:IP协议——互联网世界的邮政编码系统
后端·网络协议·tcp/ip
夏天想4 小时前
优化 WebSocket 实现单例连接用于打印【待测试 】
网络·websocket·网络协议
路长且阻4 小时前
网络协议(TCP/IP、HTTP、HTTPS)
网络协议·tcp/ip·http
我是小bā吖5 小时前
阿里云服务网格ASM实践
网络·阿里云·云计算·服务发现
吴free6 小时前
mac电脑wireshark快速实现http接口抓包
网络·测试工具·http·wireshark