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

相关推荐
0zxm39 分钟前
06 - Django 视图view
网络·后端·python·django
୧⍢⃝୨ LonelyCoder1 小时前
FreePBX修改IP地址和端口以及添加SSL证书开启HTTPS访问
tcp/ip·https·ssl
轩辰~1 小时前
网络协议入门
linux·服务器·开发语言·网络·arm开发·c++·网络协议
燕雀安知鸿鹄之志哉.2 小时前
攻防世界 web ics-06
网络·经验分享·安全·web安全·网络安全
ProcessOn官方账号2 小时前
如何绘制网络拓扑图?附详细分类解说和用户案例!
网络·职场和发展·流程图·拓扑学
Ven%3 小时前
如何在防火墙上指定ip访问服务器上任何端口呢
linux·服务器·网络·深度学习·tcp/ip
神的孩子都在歌唱3 小时前
TCP/IP 模型中,网络层对 IP 地址的分配与路由选择
网络·tcp/ip·智能路由器
阿雄不会写代码3 小时前
ubuntu安装nginx
linux·服务器·网络
starstarzz4 小时前
计算机网络实验四:Cisco交换机配置VLAN
网络·计算机网络·智能路由器·vlan·虚拟局域网
网安墨雨5 小时前
常用网络协议
网络·网络协议