TCP提供一种面向连接的、可靠的字节流服务。
面向连接指,发送和接收方在交换数据前必须建立一个TCP连接。顺便说下,一个TCP连接只有两方,因此广播和多播是不能应用于TCP的。
字节流指,两个应用程序通过TCP连接交换8bit字节构成的字节流。
可靠性:
1. 应用数据被分割成TCP认为最适合发送的数据块。TCP传给IP的叫报文段,也叫段segment
2. 当TCP发出一个段后,启动一个定时器,等待目的端确认收到。如果不能及时收到,发送端将重发这个报文段。
3. 接收端收到TCP数据,将发送一个确认。并非立即发送,要推迟几分之一秒。
4. TCP将保持它首部和数据的校验和。端到端的校验和。
5. 由于IP数据报可能会有重复,因此TCP要丢弃重复的。
6. TCP还有流量控制。TCP接收端有个缓冲区,发送端不会发出超过缓冲区,直到缓冲区有空间了,避免溢出。
TCP首部: TCP报文段也是依赖在IP数据报中。TCP首部和IP首部长度类似,不如都不算选项长度,那么都是20个字节。
TCP首部如图:
1. 开头是两个16bit的源端口和目的端口。用来区分用户进程。这两个和IP首部的两个IP地址,共同确定TCP的一个连接。
2. 32bit序号: 序号用来标识TCP发端到收端的数据字节流,表示在这个报文段的第一个数据字节。类似于TCP用序号对每个字节进行了计数。
建立新连接时,有个ISN初始序号,主机要发送的第一个字节序号就是ISN+1。
3. 32bit的确认序号: 确认序号包括接收端所期望的下一个序号。
4. 4bit长度,表示最大60字节(1个bit表示32bit长度)和IP首部一样
5.
URG: 紧急指针有效
ACK: 确认序号有效
PSH: 接收方尽快交给应用程序push
RST: 重新建立连接
SYN: 同步序号用来发起一个连接
FIN: 发端完成任务
6. 16bit的窗口大小: TCP的流量控制就是利用的这个窗口大小。窗口大小为字节数。
7. 16bit检验和: 首部和数据的检验和。和UPD类似,都需要个伪首部支撑计算。
8. 16bit紧急指针: 只有当URG为1的时候,紧急指针才有效。
9. 选项: 最常见的是最长报文大小,又称为MSS,通常都在通信的第一个报文段指定这个选项。
10. 数据部分: 这个就不是首部内容了。一个TCP报文段不一定需要数据。比如建立连接的时候就没有数据,只有头部在传输。