知识结构:
- 传输层服务
- 传输层功能
- 寻址与端口
- 无连接与面向连接
- UDP
- UDP数据报
- UDP校验
- TCP
- TCP段
- 连接管理
- 可靠传输
- 流量控制与拥塞控制
传输层:提供进程间的通信,端到端;复用和分用;差错检测;两种协议
端口的作用:传输层的端口,网络层的IP,数据链路层的MAC,都是为了唯一标识某些对象
套接字 = IP + 端口号
TCP
l 源端口:标识发送该TCP报文段的应用进程
l 目的端口:标识接收该TCP报文段的应用进程
n 端口号占16 bit,范围0-65535
n 套接字 Socket:(IP地址: 端口号)
n TCP连接::={socket1, socket2} = {(IP1: PORT1), (IP2, PORT2)}
l 序号
n 表示本报文段TCP数据的第一个字节的序号
n 4字节,序号范围[0, -1],可表示4GB数据
n 一条TCP连接的初始序号(SYN),初始序号随机产生
l 确认号
n 确认号是接收方对收到数据的确认
n 确认号=N,表示到序号N-1为止的所有数据都已正确收到,期望接收序号为N的数据
n 确认标志位ACK=1,确认号才有效
l 数据偏移
n 即指TCP首部长度
n 占4 bit,并以4字节为单位
l 保留和控制位
n SYN,连接建立
n FIN,连接释放
n ACK,确认包,确认号有效
n RST,复位连接
n PSH,无需等待缓存填满尽快交付给应用层,交互式通信,希望对方立即回复,telnet/rlogin
n URG,紧急报文,紧急指针有效(Control+C)
l 窗口
n 指接收端的接收窗口大小,用来控制对方发送的数据量。也就是后面需要讲的滑动窗口的窗口大小。
n 由于TCP的头部窗口字段只有16bit,最多表示65535字节,为了表示更大的窗口,使用了可选的放大倍数。
n Syn包option带上放大的windows scale
l 检验和
n 占16 bit,检查范围包括TCP报文段首部和数据载荷部分
n 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部
l 紧急指针
n 紧急标志位URG=1时,紧急指针才有效
n 占16 bit,以字节为单位,用来指明紧急数据的长度
l 选项
n 长度可变,最大40字节。TCP章节的最后会介绍几种常见选项字段
n 填充
n 由于选项的长度可变,因此使用填充来确保报文段首部总长度能被4整除
小结:
l 一个TCP连接需要四个元组来表示是同一个连接(src_ip, src_port, dst_ip, dst_port)准确说是五元组,还有一个是协议。但因为这里只是说TCP协议,所以,这里只说四元组。
l TCP首部的四个重要部分:
n Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。
n Acknowledgement Number就是ACK,用于确认收到,用来解决不丢包的问题。
n Window又叫Advertised-Window,也就是著名的滑动窗口(Sliding Window),用于解决流控的。
n TCP Flag ,也就是包的类型,主要是用于操控TCP的状态机的。
l TCP连接建立的目的
n 通信双方确认对方的存在
n 双方确定自己的初始序列号,并通知对方
n 允许双方协商一些参数(最大报文段长度、窗口大小等)
n 对传输实体资源进行分配
l TCP连接建立的方式
n 采用客户端服务器方式(C/S),主动发起连接建立的应用进程叫做客户端,被动等待连接建立的叫服务器端。
l 粗实线----Client
l 粗虚线----Server
l 细线----异常
可靠传输:
- 停止等待协议ARQ
- 连续ARQ协议
发送窗口根据接收方的接收窗口和网络的拥塞情况设置
接收窗口取决于接收方的应用、系统、硬件的限制,和自身处理能力有关
拥塞控制
拥塞控制作用于点到点的网络层
l 慢开始:指数增长
l 拥塞避免:线性增长
l 快重传:收到3个同样的确认就立刻重传,不等到超时
l 快恢复:cwnd不是从1重新开始
接收端窗口rwnd,又称通知窗口(awnd),是接收端根据目前的接收缓存大小所许诺的最新窗口值,是来自接收端的流量控制。
拥塞窗口cwnd是发送端根据自己估计的网络阻塞程度而设置的窗口值,是来自发送端的流量控制。
UDP:
UDP |
TCP |
无连接 |
面向连接 |
支持一对一/一对多/多对多的交互通信 |
支持一对一 |
面向报文(无分段,大小要合适) |
面向字节流 |
尽最大努力交付,不可靠 |
可靠交付 |
无拥塞控制(恒定速率,允许丢失数据,不允许太大时延,IP电话/实时视频会议) |
有拥塞控制/流量控制 |
首部开销小,仅8个字节 |
首部最小20字节,最大60字节 |
l 细线----异常Ø 源端口:标识发送该TCP报文段的应用进程
Ø 目的端口:标识接收该TCP报文段的应用进程
Ø 端口号占16 bit,范围0-65535
Ø 套接字 Socket:(IP地址: 端口号)
Ø TCP连接::={socket1, socket2} = {(IP1: PORT1), (IP2, PORT2)}
序号
Ø 表示本报文段TCP数据的第一个字节的序号
Ø 4字节,序号范围[0, -1],可表示4GB数据
Ø 一条TCP连接的初始序号(SYN),初始序号随机产生
确认号
Ø 确认号是接收方对收到数据的确认
Ø 确认号=N,表示到序号N-1为止的所有数据都已正确收到,期望接收序号为N的数据
确认标志位ACK=1,确认号才有效
Ø 数据偏移
ü 即指TCP首部长度
ü 占4 bit,并以4字节为单位
Ø 保留和控制位
ü SYN,连接建立
ü FIN,连接释放
ü ACK,确认包,确认号有效
ü RST,复位连接
ü PSH,无需等待缓存填满尽快交付给应用层,交互式通信,希望对方立即回复,telnet/rlogin
ü URG,紧急报文,紧急指针有效(Control+C)
Ø 窗口
ü 指接收端的接收窗口大小,用来控制对方发送的数据量。也就是后面需要讲的滑动窗口的窗口大小。
ü 由于TCP的头部窗口字段只有16bit,最多表示65535字节,为了表示更大的窗口,使用了可选的放大倍数。
ü Syn包option带上放大的windows scale
Ø 检验和
ü 占16 bit,检查范围包括TCP报文段首部和数据载荷部分
ü 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部
Ø 紧急指针
ü 紧急标志位URG=1时,紧急指针才有效
ü 占16 bit,以字节为单位,用来指明紧急数据的长度
Ø 选项
ü 长度可变,最大40字节。TCP章节的最后会介绍几种常见选项字段
ü 填充
ü 由于选项的长度可变,因此使用填充来确保报文段首部总长度能被4整除