TCP/IP协议
计算机网络体系结构分层
Tcp协议的特点
- Tcp是面向连接的协议
- Tcp的一个连接有两端(点对点通信)
- Tcp提供可靠的传输服务
- Tcp提供全双工的通信
- Tcp是面向字节流的协议
Tcp协议的详解
序号: tcp协议是面向字节流的协议,一个字节一个序号
确认号:期望收到数据的首字节序号,确认号为N则表示N-1序号的数据已经收到
数据偏移:数据偏离首部的距离
tcp标记:
| 标记 | 含义 |
|---|---|
| URG | Urgent:紧急位,URG=1,表示紧急数据 |
| ACK | Acknowledgement:确认位,ACK=1,确认号才生效 |
| PSH | Push:推送位,PSH=1,尽快地把数据交付给应用层 |
| RST | Reset:重置位,RST=1,重新建立连接 |
| SYN | Synchronization:同步位,SYN=1表示连接请求报文 |
| FIN | Finish:终止位,FIN=1 表示释放连接 |
窗口:允许对方发送的数据量
可靠传输的基本原理
停止等待协议:
发生的情况:
- 发送的消息在路上丢失了
- 确认的消息在路上丢失了
- 确认的消息很久才到
解决的方法:
每发送一个消息,设置一个定时器(超时定时器)
连续ARQ协议(自动重传请求)
Tcp的三次握手
代表含义解释:
SYN:连接请求报文
ACK: 确认位
seq:序号
ack:确认号
流程:
- 发送方发送标志位SYN=1的包请求连接,并且设置序号为X
- 接受方收到tcp包,发送标志位SYN=1的包建立连接,ACK置为1代表确认收到,序号为y(代表发送的字节标识),确认号为x+1(期望下次收到数据的位置为x+1)
- 接受方发送tcp包ACK=1(标识收到接受方的数据)序号为x+1(代表此次数据的起始为x+1)确认号为y+1(代表希望下次的数据是y+1开头的数据)
为什么是三次握手而不是两次
已经失效的连接请求报文到达对方,引起错误
不支持在 Docs 外粘贴 block
流程解释:
- 发送方发送第一个请求包延时
- 发送方发送第二个请求包,接受方收到请求包,并且进行回复
- 发送方进行第三次握手,连接建立
- 重点:接受方收到第一个请求包并且进行回复,这时发送方发现连接已经建立了,对于第一个请求包的回复进行忽略,避免了错误