系列文章目录
什么是计算机网络?
什么是网络协议?
计算机网络的结构
数据交换之电路交换
数据交换之报文交换和分组交换
分组交换 vs 电路交换
计算机网络性能(1)——速率、带宽、延迟
计算机网络性能(2)——时延带宽积、丢包率、吞吐量/率
计算机网络体系结构概念
OSI参考模型基本概念
OSI参考模型中非端-端层(物理层、数据链路层、网络层)功能介绍
OSI参考模型中端-端层(传输层、会话层、表示层、应用层)功能介绍
TCP/IP参考模型基本概念,包括五层参考模型
网络应用的体系结构
网络应用进程通信
网络应用对传输服务的需求
Web应用之HTTP协议(涉及HTTP连接类型和HTTP消息格式)
Cookie技术
Web缓存/代理服务器技术
传输层服务概述、传输层 vs. 网络层
传输层——多路复用和多路分用
传输层——UDP简介
传输层——可靠数据传输原理之Rdt协议
传输层——可靠数据传输之流水线机制与滑动窗口协议
- 系列文章目录
- TCP特点概述
- TCP段结构
TCP特点概述
更具体的内容可以查看RFCs-793, 1122, 1323, 2018, 2581。
TCP的特点是:
-
TCP提供的是一种点对点的通信机制。所以只能有一个发送方,一个接收方。
-
提供可靠的、按序的字节流传输机制。
-
使用流水线机制。这里面窗口尺寸的设置比较复杂,并不是简单设置一个常数就可以了。而是基于流水线机制进行动态的调整。
-
在发送方和接受方都有缓存(从缓存的角度来看,TCP像SR)。
-
TCP是面向连接的协议。所以:
- 通信双方在发送数据之前必须建立连接;
- 这种连接是端-端的,所以连接状态只在连接的两端中维护(比如我们的计算机和百度的服务器) ,在沿途节点中并不维护状态;
- TCP连接包括:两台主机上的缓存、连接状态变量、socket 等。
-
TCP是全双工(full-duplex)。即同一连接中能够传输双向数据流。
-
提供流量控制机制和拥塞控制机制
TCP段结构
- 序列号和ACK序列号不是段的编号,而是利用数据的字节数来计数。
- U选项代表紧急数据,一般不使用
- A是标志位,来指示ACK number那个字段是否有效
- P是PUSH,要求立刻把数据推送给上层,一般来说也不用
- RST、SYN和FIN是用来进行连接的建立、拆除等等的标志位
TCP段中的序列号指的是段(segment)中第一个字节的编号,而不是segment的编号。比如把1K的字节的数据,拆成了两个段,那么第二个段的序列号不是2也不是1,一般是500或501,即这个段中第一个字节的编号。此外,建立TCP连接时,双方随机选择序列号。
ACK number里面是希望接收到的下一个字节的序列号。并且TCP当中的ACK使用累积确认的机制(从确认的角度来看,TCP像GBN)。累计确认是该序列号之前的所有字节均已被正确接收到。
TCP中并没有规定如何处理乱序到达的段,需要由TCP的实现者做决策。
比如下面这张图,使用telnet远程登录到主机B,主机A这边输入一个字符,主机B那边收到会回传:建立连接后,当用户输入C这个字符后,会产生一个TCP段,段的序列号为42,ACK number是79,这两个数字是建立连接时随机选择的,意味着期望收到的下一个字节的序列号是79,主机B回传这个字符,返回的段的序列号是79,ACK number是43,43是因为前一个段的编号是42,而且装了一个字符,即一个字节,所以下一个希望收到的段的编号是43,并且意味着43号之前的段都收到了。这时主机A再发送一个确认,但没有装数据。