欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!
文章目录
- 前言
- [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)}
其中,socket1
和 socket2
分别表示两端的 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 地址和端口号组合可以建立完全独立的连接。