介绍内容:
- TCP为应用层 提供服务
- TCP首部中的各个字段
<1> 通过差错校正码来纠正通信问题是处理差错的一种非常重要的方法
<2>简单地“尝试重新发送”, 直到信息最终被接收 —— 自动重复请求(Automatic Repeat Request 【ARQ】)》 构成了许多通信协议的基础,包括TCP在内。
<1>ARQ 和重传 <2>分组窗口和滑动窗口 <3>变量窗口:流量控制和拥塞控制 <4> 设置重传超时 《5》TCP的引入 <6> TCP服务类型 <7>TCP 中的可靠性 《7》TCP头部和封装
接下来的内容:
1》 描述如何建立和终止一个TCP连接
2》 正常的数据传输过程,包括交互使用(远程登录) 和批量数据传输(文件传输)
3》 TCP超时和重传技术细节
4》介绍两种其他的定时器
5》 TCP新特性以及TCP性能
TCP 特性:
- 提供一种面向连接的、可靠的字节流服务
- 面向连接意味着两个使用TCP的应用在彼此交换数据之前必须先建立一个TCP连接。
- TCP中只有两方进行批次通信
TCP 提供可靠传输的方式:
- 应用数据被分割成为TCP认为最合适发送的数据块
- 当TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。 如果不能及时手打搜一个确认,将重发这个报文段 ——
重发机制
[发送端]- TCP收到发自TCP连接的另一端的数据,它将发送一个确认。 这个确认不是立即发送,通常将推迟几分之一秒。
- TCP 将保持它首部和数据的检验和 (差错验证码)
- TCP报文作为IP数据报来传输, 而IP数据报的到达时可能会失序,因此TCP报文段的到达也可能会失序。 如果必要TCP将对收到的数据进行重新排序, 将收到的数据以正确的顺序交给应用层。 ——
数据重排
- IP 数据报会重复,TCP丢弃重复数据
- TCP 提供
流量控制
。 TCP 连接的每一方都有固定大小的缓冲控件。 TCP的接收端只允许另一端发送接收端缓冲区锁能够接纳的数据。 这将防止较快主机导致较慢主机的缓冲区溢出。
TCP的字节流: (记录标识符)
1)两个应用程序通过TCP连接交换8bit字节构成的字节流。
TCP不在自己流中插入记录标识符【也就是不会表示这个字节流是开始还是没开始】。 —— 字节流服务(byte stream service)。
- TCP 对字节流的内容不作任何解释。 TCP不知道传输的数据字节流是二进制数据、海慧寺ASCII字符、EBCDIC字符或者其他类型数据。 字节流的解释由TCP连接双方的应用层解释。
- 每个TCP段都包含源端和目的端的
端口号
,用于寻找发端和接收端的应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP链接。 [五元组确定一个session: 源IP,目的IP,, 协议(tcp)、源IP ,目的IP]- 一个IP地址和一个端口号 —— 插口(对)(socket(pair))
- 序号:用来表示从TCP发端向TCP收端发送的数据字节流, 表示在这个报文段中的
第一个数据字节
。 总共是2^32 个【无符号】,从0开始【循环】。【SYN 、FIN都是要占用一个序号的】- 确认序号应当是上一次已成功手打搜数据字节序号+1. 只有ACK标志位1时确认序号字段才有效。
- 发送ACK无需占用任何序号,因为32bit的确认序号字段和ACK标志一样, 总是TCP首部的一部分。 因此, 我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总有被设置为1。???为什么?
- TCP 为应用层提供全双工服务。 这意味数据能够在两个方向上独立地进行传输。 因此,连接的每一端保持每个方向上的传输数据序号。
- TCP可以表述为一个没有选择确认【先在也是有些是可选择的】和否认的滑动窗口协议。《1》TCP缺少选择确认是因为TCP首部中的确认序号表示发方已成功收到字节,但还不包含确认序号所指的字节。 当前还无法对数据流中选定的部分进行确认。 《2》eg:如果1~1024字节已经成功收到, 下一报文中包含从2049~3072的字节, 收端并不能够确认这个新的报文段。 它所能做的就是发回一个确认序号1025的ACK。它也无法对一个报文段进行否认。 如果收到包含1025~2048的报文段,但它的校验和错, TCP接收端所能够做的就是发挥一个确认序号为1025的ack。
- 首部长度给出首部中的32bit字的数目,4位表示首部长度,TCP最多有60个字节的首部。 没有任选字段,正常的长度是20字节。
- 6个标志比特。它们中多个可同时设置为1.
URG:紧急指针(urgent pointer)有效
ACK: 确认序号有效
PSH:接收方应该尽快将这个报文段交给应用层
RST: 重新连接
SYN: 同步序号用来发起一个连接。
FIN:发端完成发送任务。TCP 流量控制
由连接的每一端通过声明的窗口大小提供。 窗口大小为字节数, 这个值是接收方控制发送方可以连续发送未经确认的报文的数量。 窗口大小是一个16bit字段, 因而窗口大小最大为65535字节。 后面将会看到新的窗口刻度选项,它允许这个值按比例变化以提供更大的窗口。 —— 接收方流控- 校验和覆盖了整个TCP报文段:TCP首部和TCP数据。 这是一个强制性的字段, 一定是由发送端计算和存储,并由收端进行验证。 TCP校验和的计算和UDP校验和的计算相似。
- 只有当URG标志设置为1时,紧急指针才有效。 紧急指针是一个正的偏移量, 和序号字段中的值相加表示紧急数据最后的一个字节序号。 TCP的紧急方式是发送端向另一端的发送紧急数据的一种方式。
- 最常见的可选字段是:最长报文大小【Maximum Segment Size(MSS)】。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明的这个选项。 它指明本端所能接收的最大长度的报文段。
网友评论