计算机网络协议系列 - 传输层协议篇:TCP 协议(上)

- 1 min

计算机网络协议系列(十九)

TCP简介

前面已经介绍过传输层有两个具有代表性的协议,分别是 UDP 协议和 TCP 协议,上一篇我们已经介绍过 UDP 协议,它是面向无连接的不可靠传输协议,但是没有复杂的设计也就意味着比较简单高效。今天我们开始介绍 TCP 协议,与 UDP 协议不同,TCP 协议提供的是面向连接的可靠性传输,比 UDP 协议要复杂很多。

TCP 的是英文 Transmission Control Protocol 的首字母缩写,中文含义是传输控制协议。互联网协议标准 TCP/IP 协议族就是取了前面介绍的网络层 IP 协议和这里的传输层 TCP 协议作为其中最为重要的两个协议为基础进行取名,足见 TCP 协议的重要性。

UDP 协议是一种没有复杂控制,提供面向无连接通信服务的一种协议,换句话说,它将部分控制转移给应用程序去处理,自己却只提供作为传输层协议的最基本功能。

TCP 协议与 UDP 协议区别很大,它充分实现了数据传输时的各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。

为了实现可靠性传输,TCP 协议需要考虑很多事情,比如数据的破坏、丢包、重复以及分片顺序混乱等问题。TCP 通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。

综上,TCP 协议与 UDP 协议的主要区别如下:

由此,也决定了 TCP 协议主要用于可靠传输,而 UDP 主要用于对高速传输或者对实时性要求较高的通信或广播通信。我们日常比较熟悉的 HTTP 协议就是基于 TCP 协议的,此外,用于远程连接的 SSH 协议、发送邮件的 SMTP 协议、传输文件的 FTP 协议都是需要建立连接的可靠传输,也都是基于 TCP 协议。

关于 TCP 协议中连接的建立(三次握手)、重发机制、包顺序的保证、流量控制和拥塞控制的实现原理,放到下一节去详细展开,在此之前,我们先熟悉下 TCP 报文首部格式(包头),以便对相应的数据结构做到心中有数。

TCP报文首部格式

TCP 首部格式比 UDP 要复杂的多:

img

TCP 中没有表示包长度和数据长度的字段,可由 IP 层获取 TCP 的包长度,由 TCP 的包长可获知数据的长度。

rss facebook twitter github gitlab youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora