传输层
传输层是主机才有的层次
为应用层提供服务
为使用网络层的接口
功能
- 传输层提供进程与进程之间的逻辑通信
- 复用和分用
- 复用:不同进程可以使用同一个协议通信
- 分用:接收方在传输层解封装后能将数据传给正确的进程
- 传输层对收到的报文进程差错检测
- TCP和UDP协议
- TCP:面向连接的传输控制协议
- UDP:无连接的用户数据报协议
寻址与端口
端口(逻辑端口/软件端口)是传输层的SAP(服务访问点),标识主机中的应用进程
不同的端口有着不同的端口号
端口号只有本地意义,不同计算机的相同端口没有联系
端口号按范围:
- 服务端端口号
- 熟知端口号(0 ~ 1023):给TCP/IP最重要的一些程序使用,让所有用户都知道
- 等级端口号(1024 ~ 49151):没有熟知端口号的应用程序使用的
- 客户端端口号(49152 ~ 65535):仅在客户进程运行时才动态选择的端口号
端口号与协议簇:
两个协议
TCP
特点
- TCP是面向连接(虚连接)的传输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的
- TCP提供可靠交付传输,无差错、不丢失、不重复、按序到达
- TCP提供全双工通信
- 发送缓存:对准备发送和已发送但未确认收到的数据进行缓存
- 接收缓存:对按序到达但未被接收应用读取的数据和不按序到达的数据进行缓存
- TCP面向字节流:TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流
首部格式
窗口:指的是发送本报文段的一方的接收窗口,即收到本报文段的一方被允许发送的数据数量
紧急指针:指出本报文段中紧急数据的字节数(只有当URG=1时才有意义)
选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认……
控制位
位于”保留“字段后的六个字段称为控制位
-
紧急位URG:
URG=1时,标明此报文段中有紧急数据,优先级高,不应在缓存中排队,应尽快传送,配合”紧急指针“字段使用
-
确认位ACK:
ACK=1时”确认号“字段有效,在连接建立后,传输的所有报文都必须把ACK置为1
-
推送位PSH:PSH=1时,接收方应尽快向应用进程交付被接收的数据,不再等到缓存填满再向上交付 -
复位RST:RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后重新建立传输连接 -
同步位SYN:
SYN=1时,表明该报文是一个连接请求/连接接受报文
-
终止位FIN:
FIN=1时,表明此报文发送方已发完全部数据,要求释放连接
连接管理
TCP连接有三个阶段:
-
建立连接
-
采用客户服务器方式,主动发起连接建立的进程叫客户,被动等待连接建立的进程叫服务器
-
三次握手
-
客户端发送连接请求报文段,SYN=1,seq【序号字段】=x(随机),无应用层数据
-
服务器为该TCP连接分配缓存和变量,并回复确认报文段,允许连接,SYN=1,ACK=1,seq=y(随机),ack【确认号字段】=x+1,无应用层数据
-
客户端为该TCP连接分配缓存和变量,并向服务器返回确认的确认,SYN=0,ACK=1,seq=x+1,ack=y+1,可以携带应用层数据
SYN洪泛攻击
发生再OSI第四层,利用了三次握手的特性
攻击者发生TCP SYN数据包,当服务器返回ACK后攻击者不进行确认,使TCP连接处于挂起状态,服务器收不到确认,重复发送ACK给攻击者,浪费服务器资源
-
-
-
数据传送
-
释放连接
- 参与一条TCP连接的两个进程都可以选择终止连接,释放连接后,主机中的缓存和变量都将被释放
- 四次握手
- 客户端发送连接释放报文段,停止发送数据,FIN=1,seq=u
- 服务器回复确认报文段,客户到服务器这个方向的连接就释放了,连接处于半关闭状态,ACK=1,seq=v(取决于服务器上次发送的数据的序号),ack=u+1
- 服务器发完数据后,发送连接释放报文段,FIN=1,ACK=1,seq=w(同上),ack=u+1
- 客户端回复确认报文段,等到时间等待计时器设置的2MSL(最长报文段寿命)到达后,连接彻底关闭
可靠传输
实现机制:
- 校验
- 序号
- 确认
- 发送方在收到确认前,会将发送的数据一直存储在缓存中
- 接收方发送确认报文段:报文段中的“确认号”字段为期待收到的序号。如,收到了序号为1-3的数据,则“确认号”为4
- 发送方收到了确认报文段后,将序号在“确认号”之前的数据从缓存中删除,并发送序号从“确认号”开始的数据。如,收到了为“确认号”为4的报文段,则从缓存中删除序号为1-3的数据,并发送从序号4开始往后的数据
- TPC默认使用累计确认:假设接受方收到了序号为1-3与7-8的数据,但回复的确认报文中的确认字段号仍为4(即是确认机制,也是重传机制)
- 重传
- 累计确认
- 超时重传:TCP发送方在规定时间(加权平均RTT时间,自适应)内没有收到确认就要重传已发送的报文段
- 快重传(冗余ACK/冗余确认):每当比期望序号大的失序报文段到达,就发送一个冗余ACK,指明下一个期待数据的序号
流量控制
利用滑动窗口机制实现
接受方根据自己接收缓存的大小,动态的调整发送方的发送窗口大小,发送窗口=min{接收窗口rwnd,拥塞窗口cwnd}【拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反应网络当前容量】。当发送窗口=0时,发送方停止发送数据
当接收方可以接收数据时,将发送报文段通知发送方。为防止这个报文段丢失,导致双方一直等待,TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器的时间到期,发送方就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值
拥塞控制
拥塞会导致网络中许多资源同时呈现供应不足 → 网络性能变坏 → 网络吞吐量将随输入符合增大而下降
拥塞控制目的:防止过多的数据注入到网络中(全局性问题,涉及到网络中所有主机、路由器,以及与降低网络性能有关的因素)
出现拥塞条件:对资源需求的总和 > 可用资源
拥塞控制的四种算法:
假定:
数据单方向传输,而另一个方向只传送确认
接收方有足够大的缓存空间,因而发送窗口大小只取决于拥塞程度(发送窗口=min{接收窗口rwnd,拥塞窗口cwnd})
- 1.1. 慢开始
1.2. 拥塞避免
- 2.1 快重传
2.2 快恢复
UDP
UDP只在IP数据包服务之上增加了少了功能 → 复用分用和差错检测
特点
- UDP是无连接的,开销少、时延低
- UDP使用最大努力交付,即不保证可靠交付
- UDP面向报文(不分割成分组),应用层给UDP多长的报文,UDP就原样发送,适合一次性传输少量数据的网络应用
- UDP无拥塞控制,适合很多实时应用(IP电话、视频会议)
- 首部开销小,为8B(TCP为20B)
首部格式
- UDP面向报文(不分割成分组),应用层给UDP多长的报文,UDP就原样发送,适合一次性传输少量数据的网络应用
- UDP无拥塞控制,适合很多实时应用(IP电话、视频会议)
- 首部开销小,为8B(TCP为20B)
首部格式
UDP校验
在计算检验和时,在UDP首部生成一个伪首部:
伪首部仅在计算检验和时才出现,不向下传送,也不向上递交
计算校验和:
发送端填上伪首部
全0填充检验和字段
全0填充数据部分
检验校验和:
接收端填上伪首部
检验和字段不再使用0填充,而是使用接收到的UDP首部中的检验和
进行同样的计算
当计算结果为全 1 时,无差错,否则丢弃数据包/交付给应用层附上出差错的警告