传输层协议
传输层协议
什么是端到端
端到端是网络连接。网络要通信,必须建立连接,不管多远,中间有多少设备,都必须在源和目的之间建立连接.
端到端是逻辑连接,这条路可能经过了很复杂的物理线路,但两端的设备不管,只认为两端有连接.
TCP 端口号
端口号:用于区分不同的网络服务.
端口号范围: 0-65535
.
知名端口号: 0-1023
, 即众所周知的端口号.
注册端口号: 1024-49151
, 公司和其他用户向 ICANN
机构登记的端口号.
动态端口号 (私有端口号): 49152-65535
, 普通用户或随机生成时使用的端口号.
基于 TCP 工作的应用层协议和端口:
FTP
(文件传输协议): 20,21
SSH
(安全加密远程登陆协议) : 22
Telnet
(远程登陆协议): 23
SMTP
(简单邮件传输协议): 25
DNS
(域名解析系统): 53
基于 TCP/UDP
HTTP
(超文本传输协议): 80
HTTPS
(加密超文本传输协议): 443
RDP
(远程桌面): 3389
每一种端口对应一种网络服务或网络应用.
TCP 报文头
0 1 2 3 |
S.port
: 源端口,16bit
, 表示发送者的端口号,发送者是普通用户时,随机生成端口号。提供服务端应用时,端口号根据服务来决定.
D.port
: 目的端口,16bit
, 表示接收方的端口号.
Sequence number
: 序列号,32bit
, 用于标识 TCP 数据段的顺序. TCP 连接建立或数据传输时会将第一个 TCP 报文随机编上一个序号,保证报文传输的有序性。序列号随机生成但有序增长,单位为 1
字节.
ACK number
: 确认序列号,32bit
, 用于 TCP 的确认机制。用于标识接收端确认收到的数据段,确认序列号为 成功收到的数据的序列号+1
, 只在 ACK
位置位时有效.
Header length
: 头长度,4bit
, 用于标识 TCP 头部长度。每个单位 4
字节.
Reserved
: 保留字段,6bit
, 全部为 0
.
URG
: 紧急指针有效标识,1bit
, 此标志位可以通知此报文段中有紧急数据需要处理.
ACK
: 确认位,1bit
, 用于 TCP 的确认功能开启.
PSH
: 催促标记位,1bit
, 表示接收方应该尽快处理这个报文段,交给应用层.
RST
: 重新建立标识,1bit
, 当 RST=1
时,表示 TCP 连接出现严重错误,必须释放连接,然后重新建立连接.
SYN
: 同步序列标识,1bit
, 表示希望与对端建立连接并数据同步,用于发起一个 TCP 连接.
FIN
: 结束位,1bit
, 用于 TCP 连接的关闭功能,用于释放 TCP 连接.
Window
: 窗口大小,16bit
, 用于标识 TCP 单次传递数据的大小控制。一般用于 TCP 流量控制。窗口大小的数值代表接收端期望接收的字节数,最大位 65535
字节.
Checksum
: 校验和,16bit
, 用于校验整个 TCP 报文的完整性.
Urgent Pointer
: 紧急指针,16bit
, 可以实现 TCP 的紧急指针功能,只有 URG
为 1
时有效,标识在本数据段中紧急数据的字节数.
TCP 建立连接 三次握手
PC Server |
PC 主动发送 TCP 报文,本地随机生成一个序列号 a, SYN 置位,表示想要建立连接.
Server 收到请求消息后,本地随机生成序列号 b, 将 ACK 位置位,确认号为对方发送请求的序列号 + 1, SYN 置位.
PC 将序列号有序加 1, ACK 置位,确认号为对方发来的序列号 + 1.
TCP 传输过程 重传机制
TCP 可以根据接收方的处理能力来调整自己的窗口大小,来接收分批次的传输数据,此时对端设备不需要每次都给与确认,只需要确认收到报文后的最后一个序列号.
如果在传输过程中,数据因为某些原因丢失,那么接收方将对上一个收到的报文进行确认,来告知对端设备,后续报文没有收到,此时对端设备会重传数据.
下一条序列号 = 上一条序列号 + 数据载荷长度.
TCP 滑动窗口机制 流量控制
当发送者根据自己的窗口大小来发送数据,接受者会根据自己的窗口大小来接收,窗口大小为最优的传输速率.
如果此时发送端的窗口大小大于接收端的窗口大小就会导致数据丢失.
接收端在确认时,会将收到的最后一个数据段进行确认,并将自己的窗口大小告诉发送端,发送端收到此报文后会调整自己的窗口大小,并重传.
TCP 关闭连接 四次挥手
PC Server |
PC Server
Seq=a ack number=b FIN=1 ACK=1==> (发起关闭连接)
<== seq=b ack number=a+1 ACK=1 (确认并将确认位置位,ack number 为对方的序列号 + 1)
<== seq=b ack number=a+1 FIN=1 ACK=1 (因为 TCP 双向关闭连接,所以双向关闭)
Seq=a+1 ACK ack number=b+1 (PC 序列号自加,确认位置位,ack number 为对方的序列号 + 1)
TCP 特点
- 1. 运行于传输层
- 2. 为网络提供可靠的接入
- 3. 是一种面向连接的协议
- 4. 是一种全双工的,会建立双向通道的协议
- 5. 具备错误检查能力
- 6. 数据段序列化
- 7. 具备接收确认机制
- 8. 具备数据重传机制
UDP
UDP: 用户数据包协议.
提供不可靠的传输服务,具有 TCP 没有的优势.
UDP 无连接,时间上不需要建立连接所需要的时延;空间上,TCP 需要在端系统中维护连接状态,UDP 不需要.
特点:
- 运行于传输层
- 是一种无面向连接的协议
- 提供有限的错误检查能力
- 采用尽力而为的传输方式
- 不具备数据重传功能
一些时延敏感的流量,如语音视频等,通常使用 UDP 作为传输层协议.
UDP 端口号
范围: 0-65535
知名端口号: 0-1023
注册端口号: 1024-49151
动态端口号: 49152-65535
基于 UDP 的应用层协议
DNS
: 域名解析协议 53
DHCP
: 动态主机配置协议 67 68
TFTP
: 轻量级文件传输协议 69
SNMP
: 简单网络管理协议 161
RIP
: 路由信息协议 520
一个距离矢量路由协议
BFD
: 双向转发检测 3784
UDP 报文头
0 7 8 15 16 23 24 31 |
S.port: 源端口.
D.port: 目的端口.
Length: UDP 报文总长度.
Checksum: 校验和,校验 UDP 报文完整性.