看目录,RFC 793 分成了三个部分:
Introduction·
Philosophy
Functional Specification
第一部分是介绍
第二部分是设计哲学
第三部分是功能性的规范
许多人重视其表现形式而忽视比较本质的 Philosophy 我的阅读将会重点在第二部分
在这之前,我已经大概知道 TCP的一些特性
tcp连接的三路握手的建立,关闭时的四次挥手
以及tcp的拥塞控制,错误检验,超时重传
我们来看看tcp协议的基本内容
2.1 网络系统之要素
TCP 面对的网络环境是一个基于分组交换的网络
packet-switch网络是什么东西,看这里[传送门]
消费数据和生产数据的是操作系统的进程
网络,网关 主机上的各种层次的协议都支持进程间通讯,这种进程间通讯在进程间端口上建立逻辑连接并提供了一种双向数据流的能力。
Various levels of protocols in the networks, the gateways, and the hosts support an interprocess
communication system that provides two-way data flow on logical connections between process ports.
这句话的意思应该是,进程间通信的能力是实现TCP协议的基础。
packet 定义,是一组数据交换的单元,传输层不关心数据块的细节
主机在网络中的节点,从数据通信的角度来看,
主机是包的起终点,进程是主机中的活跃要素(这里的进程含义与执行程序在操作系统中被定义的进程含义保持一致),即使是终端,文件以及其它IO设备也是被看成通过其他进程进行通信,所有的通信可以看成是进程之间的通信。
由于一个进程可能需要区分它自己和另一个进程(或进程)之间的多个通信流,我们假设每个进程可能有许多端口,通过这些端口与其他进程的端口进行通信。
这个模块阐述通信系统的软件要素,指出通信本质是进程之间的通信
2.2 Model of Operation
操作模型
进程运输数据通过调用 TCP 的 API, 将数据buffer当作参数传递出去,TCP将数据打成一个个分段包,并调用 IP 模块去寻址,找到数据的下家用户。
下家用户接收到数据后从分段数据包的控制信息里识别出包的序号,并将数据还原整合,从而实现“可靠性” 原则
这一段主要阐述的是分组交换的模式,以及包如何路由的设计思想。
首先,数据包是被分割成一个一个小包相互独立发出去的,IP模块负责为数据包找到目的地
每抵达一个网关,数据会被拆包查看它的目的地,并计算它下一站是哪里?,然后又封包发到下一站
网关可以根据网络状况将数据进一步拆小
画一个图
2.3 The host environment
主机环境
TCP 被视为是操作系统的一部分,用户造访TCP 和访问文件很相似

2.6 reliable communication
可靠通信是怎么实现的
序列号和确认机制
每八位据被分配了一个序列号,数据段的头 8 位字段用于表示一个序列号 , 称为段序列号
数据分段还携带了一个确认号
TCP 传输一段数据时会将数据放到一个重传序列中,并开启一个时钟(这个时钟当然是在操作系统上运行的),当在预期的时间没有收到这个数据包的确认,TCP 就会启动该数据包的重传
TCP 的确认并不能保证数据已经交付给最终用户,而只能保证接收方 TCP 承担了这样做的责任。 —— 这句话什么意思???
窗口(window): 流量控制的技术,TCP 接收方会给发送方报告一个自己的 window,发送方以此作为基础来控制一次发包的大小
端口识别:TCP 通过端口号来区别不同的数据报组成的组成流,
唯一标识一个 TCP连接是通过 IP地址和端口来实现的
一个 TCP 连接完全由两端的套接字指定
全双工—— 一个连接可以从两个方向进行运输数据
Transmission Control Block (TCB)
网友评论