传输控制协议
1 TCP 最主要的特点
- 面向连接的
- 使用前先建立连接,传送后释放连接。
- 在进行数据交换前,初始化发送方与接收方状态,进行握手(交换控制信息)
- 点到点
- 一个发送方, 一个接收方。
- 连接状态与端系统有关,不为路由器所知
- 可靠交付
- 数据无差错、不丢失、不重复,并且按序到达。
- 流量控制
- 发送方不能淹没接收方
- 拥塞控制
- 抑止发送方速率来防止过分占用网络资源
- 全双工通信
- 允许通信双方在任何时候都能发送数据。
- 连接的两端都设有发送缓存和接收缓存。
- 面向字节流
- TCP 把应用程序交下来的数据看成是一连串的无结构的字节流
- 没有 “报文边界”
- TCP 拥塞和流量控制设置滑动窗口协议
2 TCP 的连接
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定。
套接字 = 端口号 : IP 地址。
3 TCP 首部格式
一个 TCP 报文段分为首部和数据两部分。首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项。
- 源端口和目的端口:各占2个字节。端口是传输层与应用层的服务接口。
- 序号:4 字节。本报文段所发送的数据的第一个字节的序号。
- 确认号:4 字节。期望收到的下一个报文段的序号。
- 数据偏移:4 位。首部的长度。
- 保留:6 位,保留为今后使用,但目前应置为 0。
- 紧急 URG:优先传送
- 确认 ACK:在连接建立后所有传送的报文段都必须把 ACK 置 1。
- 推送 PSH:不再等到整个缓存填满,尽快地交付。
- 复位 RST:释放连接,然后再重新建立运输连接
- 同步 SYN:在连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。
- 终止 FIN:发送完毕,并要求释放连接。
- 窗口:2 字节。作为接收方让发送方设置其发送窗口的依据。
- 校验和:2 字节。校验和字段检验的范围包括首部和数据这两部分。
- 紧急指针字段 :2 字节。指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。
- 选项字段 :长度可变。
- MSS:所能接收的最大报文段长度
- 窗口扩大选项:占 3 字节,其中有一个字节表示移位值 S。
- 时间戳选项:占 10 字节,其中最主要的字段是时间戳值字段(4 字节)和时间戳回送回答字段(4 字节)。
- 选择确认选项