一、TCP概述
TCP连接
- 点对点(一个发送方,一个接收方)
- 可靠的,按序的字节流
- 流水线机制(拥塞控制机制和流量控制机制 窗口尺寸)
- 发送方,接收方的缓存
- 全双工特性:同一连接中可以传送双向字节流。应用层数据从进程B流向进程A的同时也从进程A流向进程B。
- 面向连接:
- 发送数据前必须建立连接(握手)。且是三次握手。
- 前两次不包含应用层数据 (客户首先发送一个TCP特殊报文段,服务器用另一个特殊的TCP报文段作为相应,客户再用第三个特殊报文段作为相应)
- 连接状态只在连接的两端维护,在沿途结点中并不更改状态
- 在这两台主机之间的网络元素(路由器,交换机和中继器)没有为该连接分配任何缓存和变量
- 包括两个主机间的缓存,连接状态变量和socket等信息
TCP报文段结构
-
当TCP发送一个大文件时,该文件被划分为若干长度为MSS的若干块。但交互式应用通常传送长度小于MSS的数据块 -
包括源端口号和目的端口号 -
检验和字段(checksum) -
32bits的序号字段(seq number),32bit的确认号字段(ackowledge number)。用于发送方和接收方实现可靠数据传输。 -
16bits的接收窗口(recieve window):用于流量控制 -
4bits的首部长度字段。(header length field)单位是32比特的字。TCP首部典型长度为20字节 -
选项字段(option field):发送方和接收方协商最大报文段长度 -
6bits标志字段(UAPRSF)
- ACK比特:包括一个对已经被成功接收报文段的确认
- RST,SYN,FIN用于连接的建立和拆除。
- CWR,ECE
- PRH比特:指示接收方立刻将数据交付给上层
- URG比特:知识报文段里存在被发送端的上层实体置为紧急的数据。紧急数据的最后一个字节由16bits的紧急数据指针字段(urg data pnter)指出。
-
报文段序号(seqnum for a segment)是该报文段首字节的字节流编号。而不是报文段的编号。如图所示: -
确认号:期望收到的下一个字节的序列号。累计确认机制,该号之前所有都已成功接收(注意不包括该号)
案例学习
-
假设客户和服务器的起始序号分别为42和79 -
客户端用户输入字符’C’,发送的第一个报文段序号为42,服务器发送的第一个报文段序号为79;ACK确认号就是等待的下一个字节的序号。 -
第二个报文段,服务器将序号为79的报文段发给客户。在ACK中填入43告诉客户已经成功收到42字节及其之前的所有字节,现在期望43字节的出现。
|