运输层协议概述
进程之间的通信
运输层向它上面的应用层提供通信服务
运输层的两个主要协议
- 用户数据报协议 UDP
- 传输控制协议TCP
在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称之为TCP报文或UDP用户数据报.
UDP在传送数据之前不需要先建立连接
TCP则提供面向连接的服务
运输层的端口
协议栈层间的抽象的协议端口是软件端口
硬件端口是不同硬件设备进行交互的接口
软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址
端口分为:
- 服务器使用的端口号:0~1023
- 客户端使用的端口号:49152~65535
用户数据协议UDP
UDP概述
- UDP是无连接的,即发送数据时不需要建立连接
- UDP使用尽最大努力交付
- UDP是面向报文的
- UDP没有拥塞控制
- UDP支持一对一,一对多,多对一和多对多交互通信
- UDP首部开销小,只有8个字节,比TCP的20个字节的首都要短
UDP的首部格式
当运输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点-应用进程.
传输控制协议TCP概述
TCP最主要的特点
- TCP时面向连接的运输层协议
- 每一条TCP连接只能有两个端点
- TCP提供可靠交付的服务 无差错,不丢失,不重复,按序到达
- TCP提供全双工通信
- 面向字节流
TCP的连接
TCP把连接作为最基本的抽象
TCP连接的端点叫做套接字(socket)或插口
例如:若IP地址时192.3.4.5而端口时80,那么得到的套接字就是(192.3.4.5:80)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定
可靠传输的工作原理
停止等待协议
停止等待就是每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组.
无差错情况
出现差错
像上图图b使用超时重传,利用每发送完一个分组时设置一个超时计时器.
注意:
- A发送完一个分组后,必须暂时保留已发送的分组的副本
- 分组和确认分组都必须进行编号
- 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间长一些.
确认丢失和确认迟到
- 丢弃这个重复的分组M1
- 向A发送确认
使用上述的重传机制,我们就可以在不可靠的传输网络上实现实现的通信
信道利用率
停止等待协议的优点是简单,但缺点是信道利用率太低.
为了提高效率,使用流水线传输,使用连续ARQ协议和滑动窗口协议
连续ARQ协议
ARQ协议规定,发送方每收到一个确认,就把发送窗口向前华东一个分组的位置
对按序到达的最后一个分组发送确认
TCP报文段的首部格式
-
序号 本报文段发送数据的第一个序列号
-
确认号 发送到TCP缓存后反馈的需要下一个发送的序号
-
数据偏移 就是首部长度 以4B为单位
-
六个控制位
紧急位URG(=1可以插队)
确认位ACK(=1有效)
推送位PSH(接收方紧急处理交付给应用层)
复位RST (=1出现差错)
同步位SYN(=1表明是一个连接请求/连接接收报文)
终止位FIN(=1 表明此报文段发送数据已经完毕)
-
窗口 B发送A窗口设置为65536 那么A会发送一个大小为65535的报文
-
检验和 检验首部+数据 检验时加上12B伪首部
-
紧急指针 (=1有意义,数据部分的紧急数据的位置以及字节数)
-
选项 最大报文长度MSS,窗口扩大,时间戳等
TCP连接管理
TCP连接传输的三个阶段
连接建立-> 数据传送-> 连接释放
TCP 连接采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器
TCP的连接建立
三次握手
ROUND1
客户端发送连接请求报文段,无应用层数据.
SYN(同步位)=1,seq(序号)=x(随机)
ROUND2
服务器位该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据.
SYN=1,ACK(确认位)=1,seq=y(随机),ack(确认号)=x+1
ROUND3 客户端位该TCP连接分配缓存和变量,并向服务器端返回确认的确认,可以携带数据.
SYN=0,ACK=1,seq=x+1,ack=y+1
SYN洪泛攻击
解决方案:SYN cookie
TCP的连接释放 四次挥手
参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的"资源"(缓存和变量)将被释放
ROUND1
客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接
FIN(终止位)=1,seq=u
ROUND2
服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了--半关闭状态
ACK=1,seq=v,ack=u+1
ROUND3
服务端发送完数据,就发出连接释放报文段,主动关闭TCP连接.
FIN=1,ACK=1,seq=w,ack=u+1
ROUND4
客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文寿命)后,连接彻底关闭
ACK=1,seq=u+1,ack=w+1
TCP可靠传输
传输层使用TCP实现可靠传输
网络层提供尽最大努力交付,不可靠传输
可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流时完全一样的
TCP实现可靠传输的机制
- 校验 与UDP校验一样,增加伪首部
- 序号
- 确认
- 重传
TCP流量控制
让发送发慢点,要让接收方来得及接收
TCP利用滑动窗口机制实现流量控制
在通信过程中,接收方根据自己接收缓存的大小,动态地调整发送方的发送窗口大小,即接收窗口rwnd(接收方设置确认报文段的窗口字段来将rwnd通知给发送方),发送方的发送窗口取接收窗口rwnd和拥塞窗cwnd的最小值.
例子:A向B发送数据,连接建立时,B告诉A:"我的rwnd(窗口)=400(字节)",设每一个报文段100B,报文段序号初始值为1.
TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器.
若持续设置的时间到期,就发送一个零窗口探测报文字段.接收方收到探测报文段时给出现在的窗口值.
若窗口仍然是0,那么发送方就重新设置持续计时器.
TCP拥塞控制
出现拥塞的条件:
对需求需求的总和 > 可用资源
拥塞控制的目的:
防止过多的数据注入到网络中. 全局性
拥塞控制四种算法
慢开始和拥塞避免配套使用
快重传和快恢复配套使用