🐳
南软佛脚玩乐指南
Github
  • 欢迎
  • 南软
    • 课程&培养方案介绍
  • 佛脚
    • 微积分 I/II
    • CPL
    • 计算系统基础
    • 软件工程与计算 I
    • 离散数学
    • 需求与商业模式创新
      • 商业模式部分笔记
      • 需求部分笔记
      • 往年卷
    • 线性代数
    • 互联网计算
      • 01-计算机网络及其参考模型
      • 02-物理层
      • 03-数据链路层
      • 04-网络层
      • 05-传输层
      • 06-应用层
      • 07-路由
      • 08-路由协议
      • 09-VLAN
      • 10-广域网 & PPP
      • 11-网络安全 & ACL
      • 12-DHCP
      • 20-复习
      • 21-常见报文汇总
      • 22-往年卷要点汇总
      • 名词解释
      • 大作业要求
      • 实验考试要求
      • 小测及答案
    • 计算机组织结构
      • 01-概述
      • 02-计算机的顶层视图
      • 03-数据表示
      • 04-校验码
      • 05-整数运算
      • 06-浮点运算
      • 07-BCD运算
      • 08-内部存储器
      • 09-Cache
      • 10-外部存储器
      • 11-RAID
      • 12-虚拟存储器
      • 13-指令系统
      • 14-指令流水线
      • 15-控制器
      • 16-总线
      • 17-输入输出
      • 20-复习
      • 机考
        • 2024-12
        • 2020-12
    • 数据结构与算法
    • 密码学原理
    • 计算机系统基础实验选修
  • 玩乐
    • 吃喝
      • 鼓楼周边
      • 仙林周边
      • 南京市内
    • 旅游
      • 春日赏花
      • 宁杭线
  • 交通
  • 指南
    • 获取下载密码
    • 添砖加瓦
由 GitBook 提供支持
在本页
  • 概览
  • 端口
  • Socket
  • TCP Transmission Control Protocol
  • TCP 报文
  • 建立连接 三次握手
  • 可能发生的问题
  • Stop & Wait protocol 停止等待协议
  • Contiguous ARQ 连续 ARQ 协议
  • 释放连接 四次挥手
  • TCP 计时器
  • UDP User Datagram Protocol
  • 报文格式
  • TCP vs UDP
  • NAT & PAT
  • 特点
  • 种类
  • NAT 地址种类
在GitHub上编辑
  1. 佛脚
  2. 互联网计算

05-传输层

概览

  • 分割上层数据为 segment

  • 建立端到端连接传输 segment

  • 可靠传输:确保数据完整性

  • 流量控制:防止服务端发送速度过快

端口

  • TCP/UDP 使用端口来区分不同的应用程序

  • 16位无符号整数

  • 低于255的端口号保留

Socket

  • 形式:(IP, Port)

  • 每个连接由两个 socket 组成 (IP_src, Port_src) <=> (IP_dest, Port_dest)

  • Socket 点对点,全双工

TCP Transmission Control Protocol

  • 需要解决的问题

    • 可靠传输

    • 流量控制

      • 滑动窗口:客户端告知窗口大小,服务端发送数据不超过窗口大小

      • 拥塞控制:逐步增加发送速度,直到出现丢包,然后减速

    • 连接管理:建立/释放连接

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  (Variable Length)             |    Padding    |
 +-----------------------------------------------+---------------+
 |                    Data     (Variable Length)                 |
 +---------------------------------------------------------------+
  • 源端口、目的端口:16位

  • 序号 seq :32位

    • 单位:字节

    • 报文中的序号为该报文的第一个字节的序号

    • 若序号超过2^32,则从0开始

  • 确认号 ack:32位

    • 值为下一个期望接收的序号

    • 目的:减少数据的通讯量

  • 偏移:4位

    • 指示报头长度

    • 单位:4 Bytes

    • 计算方法:4 Bytes * 值

    • 因此最大报头长度为60 Bytes

  • 保留字段:6位

  • 标志位:6位

    • URG:紧急指针(优先传送)

    • ACK:确认号有效

    • PSH:客户端应该尽快将数据交给应用层

    • RST:重置连接

    • SYN:同步序号,表明是连接请求/连接接受报文

    • FIN:释放连接

  • 窗口大小 win:16位

    • 单位:字节

    • 表示服务端被允许发送的数据量

    • 流量控制

  • 校验和:16位

  • 紧急指针:16位

    • 仅在 URG 标志位为 1 时有效

    • 单位:字节

    • 紧急数据范围:[序号, 序号+紧急指针)

  • 选项:可选

    • 最大报文段长度 MSS

    • ……

  • 填充字段:使报头长度为 4 Bytes 的倍数

  • 报头最小:20 Bytes

  • 报头最大:60 Bytes

  • 数据最大取决于底层网络

建立连接 三次握手

次数
客户端状态
方向
服务端状态
报文
备注

1

CLOSED -> SYN_SENT

->

LISTEN->SYNC_RCVD

SYN=1, seq=x

SYN 为 1 ACK 为 0的包表示建立连接请求

2

SYN_SENT

<-

SYNC_RCVD

SYN=1, ACK=1, seq=y, ack=x+1

第二次握手若没有对应的端口监听,则返回 RST

3

ESTABLISHED

->

SYNC_RCVD -> ESTABLISHED

ACK=1, seq=x+1, ack=y+1

完成三次握手后,通知上层应用程序握手完成

可能发生的问题

  • Lost ACK:ACK没能到达客户端

  • Late ACK:ACK延迟到达

  • 无论哪种情况,客户端只有收到服务端重传的数据后才知道传输出错

  • 此时服务端会直接丢弃重复的数据,重新发送数据

  • 客户端收到 Late ACK 后,也会直接丢弃

Stop & Wait protocol 停止等待协议

  • 若第一次握手后,客户端没有收到回复,则会等待一段时间后重发 SYN 包

  • 在发送数据时保留备份

  • 重传时间:2 * RTT (往返时间)

  • 缺点:效率低下

Contiguous ARQ 连续 ARQ 协议

  • 客户端无需请求重传,服务端自动重传

  • 基本流程

    1. 服务端维持发送窗口

    2. 收到确认后发送窗口向前滑动,指针前移

  • 可发送的数据量:发送窗口大小 - 已发送未确认的数据量

释放连接 四次挥手

次数
客户端状态
方向
服务端状态
报文
备注

1

ESTABLISHED -> FIN_WAIT_1

->

ESTABLISHED

FIN=1, seq=u

表明客户端不再传输数据 同时告知上层

2

FIN_WAIT_1

<-

CLOSE_WAIT

ACK=1, seq=v, ack=u+1

确认收到释放连接请求

3

FIN_WAIT_2

<-

LAST_ACK

FIN=1, ACK=1, seq=w, ack=v+1

通知对方释放连接

4

TIME_WAIT

->

LAST_ACK -> CLOSED

ACK=1, seq=v+1, ack=w+1

等待 2MSL 后 客户端状态变为 CLOSED

  • 前2次:关闭客户端到服务端的传输

  • 在第2次握手后,服务端继续向客户端发送剩余数据

  • 后2次:关闭服务端到客户端的传输

  • 等待 2MSL

    • 保证服务端发送的最后一个 ACK 能够到达客户端

    • 确保能及时收到丢包重发的 FIN 包

    • 等待2MSL后若无重发的包则代表对方已经收到最后的ACK,连接可释放

TCP 计时器

  • 重传计时器:若收不到 ACK,重传数据

  • 坚持计时器:若win为 0,发送方启动坚持计时器,定期发送窗口探测报文,检查接收方是否重新打开窗口

  • 保持计时器:定期发送探测报文确认对方是否在线

  • 时间等待计时器:在挥手时等待 2MSL

seq ack

  • 握手时,seq 为随机数

  • 传输时,seq 为数据的第一个字节的序号

  • 挥手时,seq 为最后一个数据的下一个字节的序号

  • ack 始终是上次传输的数据的下一个字节的序号,握手挥手时直接加 1

UDP User Datagram Protocol

  • 无连接

    • 没有握手挥手

    • 每个报文独立

  • 报文小

  • 无可靠传输

  • 无流量控制:很快发送数据

  • 使用场景:对速率敏感,对准确率不敏感(例如SNMP即使在拥堵情况下也要能传数据)

报文格式

 0              15 16             31
 +-----------------+-----------------+
 |   Source Port   |Destination Port |
 +-----------------+-----------------+
 |     Length      |    Checksum     |
 +-----------------+-----------------+
 |          data octets ...          |
 +-----------------------------------+

TCP vs UDP

特性
TCP
UDP

连接

面向连接

无连接

可靠性

可靠

不可靠

流量控制

有

无

检查 segment

有

无

重发错误内容

有

无

使用ACK确认

有

无

多播/广播

不支持

支持

  • 底层为 TCP 的协议:HTTP、FTP、SMTP

  • 底层为 UDP 的协议:RIP、DHCP、TFTP、SNMP

DNS同时使用 TCP 和 UDP

NAT & PAT

特点

  • 在内网和公网间的路由器把在IP报文头中的网络地址按照NAT表转换为另一个网络地址

  • 允许使用私有地址的多个主机共享一个公网IP地址访问互联网

  • 优点:复用IP地址

  • 缺点:一对一映射,不支持端口复用

种类

  • 静态 NAT:一对一映射

  • 动态 NAT:动态一对一映射,先来先服务

  • PAT:端口地址转换,多对一映射,解决NAT的端口复用问题

NAT 地址种类

PAT端口复用的是 Inside Global Address 的端口

  • Inside Local Address:内网私有 IP 地址

  • Inside Global Address:内网设备对外展示的公共 IP 地址

  • Outside Global Address:外网目标设备的公网 IP 地址

上一页04-网络层下一页06-应用层

最后更新于4个月前