MHuiG

「看庭前花开花落,望天上云卷云舒」

传输层协议

# 传输层协议

## 什么是端到端

端到端是网络连接。网络要通信，必须建立连接，不管多远，中间有多少设备，都必须在源和目的之间建立连接.

端到端是逻辑连接，这条路可能经过了很复杂的物理线路，但两端的设备不管，只认为两端有连接.

## TCP 端口号

端口号：用于区分不同的网络服务.

端口号范围: `0-65535`.

知名端口号: `0-1023`, 即众所周知的端口号

注册端口号: `1024-49151`, 公司和其他用户向 `ICANN` 机构登记的端口号.

动态端口号 (私有端口号): `49152-65535`, 普通用户或随机生成时使用的端口号.

`FTP`(文件传输协议): `20,21`

`SSH` (安全加密远程登陆协议) : `22`

`Telnet` (远程登陆协议): `23`

`SMTP` (简单邮件传输协议): `25`

`DNS` (域名解析系统): `53`

`HTTP` (超文本传输协议): `80`

`HTTPS` (加密超文本传输协议): `443`

`RDP` (远程桌面): `3389`

每一种端口对应一种网络服务或网络应用.

## TCP

RFC 793

TCP 是一种面向连接的传输层协议，可提供可靠的传输服务.

TCP 提供重传机制.

## TCP 报文头

    0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |          Source Port          |       Destination Port        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                        Sequence Number                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Acknowledgment Number                      |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Data |           |U|A|P|R|S|F|                               |
    | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
    |       |           |G|K|H|T|N|N|                               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |           Checksum            |         Urgent Pointer        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                    Options                    |    Padding    |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                             data                              |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

                            TCP Header Format

          Note that one tick mark represents one bit position.

`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 建立连接 三次握手

    PCA                                       PCB
    ==> seq=a    SYN=1  ========================>
    <== seq=b    SYN=1  ACK=1  ack number=a+1 <==
    ==> seq=a+1         ACK=1  ack number=b+1 ==>

## TCP 关闭 四次挥手

    PCA                                     PCB
    ==> seq=a   FIN=1 ACK=1 ack number=b    ==>
    <== seq=b         ACK=1 ack number=a+1  <==
    <== seq=b   FIN=1       ack number=a+1  <==
    ==> seq=a+1       ACK=1 ack number=b+1  ==>

ARP协议

ARP 协议 ARP 协议 ARPARP: 地址解析协议，用于已知一台设备 IP 地址时，获取对方的硬件地址信息，从而进行数据链路层的封装. RFC 826 ARP 报文格式 Hard...

推荐阅读
网络参考模型 IP编址 以太网帧结构 传输介质 网络通信 ICMP协议

留言区

Notes
数据通信网络
<pjax>
</pjax>
<pjax></pjax>
<pjax> Are You A Robot?</pjax>