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 地址和端口号组合可以建立完全独立的连接。

相关推荐
元气满满的热码式1 小时前
K8S中Service详解(二)
linux·网络·kubernetes
AI创世纪2 小时前
WIN11 UEFI漏洞被发现, 可以绕过安全启动机制
网络·安全
小马爱打代码5 小时前
TCP 详解
网络·网络协议·tcp/ip
努力的小T5 小时前
基于 Bash 脚本的系统信息定时收集方案
linux·运维·服务器·网络·云计算·bash
TS_forever0076 小时前
【华为路由的arp配置】
网络·华为
Andya_net6 小时前
网络安全 | 0day漏洞介绍
网络·安全·web安全
某风吾起7 小时前
linux系统中的 scp的使用方法
linux·服务器·网络
NoneCoder7 小时前
JavaScript系列(42)--路由系统实现详解
开发语言·javascript·网络
阿猿收手吧!7 小时前
【Linux网络总结】字节序转换 收发信息 TCP握手挥手 多路转接
linux·服务器·网络·c++·tcp/ip
IT 青年7 小时前
计算机网络 (57)改进“尽最大努力交付”的服务
计算机网络