导图社区 运输层
全网最全的运输层思维导图各占两个字节,端口是运输层与应用层之间的服务接口,运输层的复用和分用功能都要通过端口才能实现
编辑于2022-05-23 17:56:39运输层
功能
复用和分用
复用
应用进程都可以通过运输层再传到IP层
分用
运输层收到IP层的数据后,必须分别交付给指明的各应用进程
为应用进程之间的通信提供端到端的逻辑通信
当使用TCP协议时,提供可靠通信,当使用UDP时,提供不可靠通信
UDP和TCP
用户数据报协议UDP
传送的数据单元是UDP报文或UDP用户数据报
不可靠交付
一对一、一对多、多对多通信,适合实时通信
传输控制协议TCP
传送的数据单元是TCP报文段
面向连接
一对一服务
使用协议
端口
用进程标识符PID来表示,但由于不同的操作系统使用不同格式的进程标识符,且进程标识符是动态分配的,必须使用与操作系统无关的方法对应用进程进行标志
使用协议端口号,简称端口,运输层用一个16位的端口号来标志一个端口,可以表示65536个不同的端口,范围是0~65535
服务器端使用的端口号
熟知端口号或全球通用端口号 0~1023
FTP:21
TELNET:23
SMTP:25
DNS:53
HTTP:80
HTTPS:443
登记端口号 1024~49151
客户端使用端口号 49152~65535
仅在客户进程运行时动态分配,由客户进程临时使用,客户进程结束后,所使用的的端口号会被系统收回,以供其他客户进程使用
熟知端口号
UDP
特点
无连接,尽最大努力交付
面向报文,没有拥塞控制,适合实时通信
首部开销小,只有8个字节
支持一对一、一对多、多对一和多对多的交互通信
首部
计算检验和时,临时把“伪首部”和UDP用户数报连接在一起计算,伪首部仅仅是为了计算检验和
TCP
特点
面向连接的运输层协议
每一条TCP连接只能有两个端点,只能是点对点连接
提供可靠交付服务,无差错、不丢失、不重复、按序到达
提供全双工通信
面向字节流
“流”指的是一连串的字节序列
连接的端点叫做套接字或插口,端口号拼接到IP地址的后面,中间用冒号隔开,构成套接字 socket=(IP地址:端口号)
可靠传输工作原理
每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组
接收端收到分组后,给发送端发送确认信息,如果接受时出现了差错,接收端什么也不做,如果发送的确认信息出现差错,为了保证可靠传输,发送端为每一个分组设置一个超时计时器,只要超时,就重传分组。 但这种方法信道利用率太低
为了提高效率,采用流水线传输
发送方使用滑动窗口,接收方使用累积确认
发送窗口
位于发送窗口的分组都可以连续的发送出去,而不需要等待对方的额确认
累积确认
接收方不必对收到的分组逐个发送确认,而是在收到几个分组之后,对按序到达的最后一个分组发送确认,这就表示到这个分组为止的分组都已经正确收到
假如发送方发送5个分组,而中间第3个分组丢失,这是接收方只能对前两个分组发出确认,而发送方只能把后面的三个分组再重传一次
首部格式
源端口和目的端口
各占两个字节,端口是运输层与应用层之间的服务接口,运输层的复用和分用功能都要通过端口才能实现
序号
占4个字节,TCP连接中传送的字节流中的每一个字节都按顺序编号,序号字段的值指的是本报文段所发送的数据的第一个字节的序号,整个字节流的起始序号是在连接建立时设置的
确认号
占4个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,表示到N-1为止的所有数据都已经正确收到
数据偏移(首部长度)
占4位,表示TCP报文段数据起始处距离TCP报文段的起始处有多远。“数据偏移”的单位是4字节。因为数据偏移占4位,最大表示15,则首部的最大长度是60字节,选项长度不超过40字节。
保留
占6位,保留为今后使用,目前全置为0
紧急URG
当URG=1时,表明紧急指针字段有效。表示此报文段中有紧急数据,应尽快传送,URG字段往往与紧急指针字段配合使用
确认ACK
只有当ACK=1时,确认字段才有效,TCP规定,在建立连接之后,所有传送的报文段都必须把ACK置为1
推送PSH
接收方TCP收到PSH=1的报文段,尽快地向上交付到应用进程,而不再等到整个缓存都填满之后再向上交付
复位RSH
当RSH=1时,表明TCP连接中出现严重的出错,必须释放连接,然后重新建立连接
同步SYN
在连接建立时用来同步序号。SYN=1表示这是一个连接请求或连接接受报文段 SYN=1,ACK=0时,表示连接请求报文段 SYN=1,ACK=1时,表示连接接受报文段
终止FIN
用来释放一个连接,FIN=1表明此报文段的发送数据已发送完毕,并要求释放此连接
窗口
占2个字节,是发送本报文段的一方的接收窗口,用来告诉对方下一次发送多少字节,即告诉对方下一次发送时,将发送窗口设置为这个窗口值
检验和
占2个字节,检查的范围是首部和数据这两个部分,在检验和时,要在TCP报文段前面加上12字节的伪首部
紧急指针
占2个字节,与URG配合使用,当URG=1时,才有意义,指出本报文段中紧急数据的最后一个字节位置
选项
长度可变,最初只规定了一种选项
最大报文段长度MSS:是每一个TCP报文段中数据部分的最大长度
窗口扩大选项
时间戳选项
选择确认选项
填充
使整个TCP报文首部长度是4字节的整数倍
TCP可靠传输的实现
使用滑动窗口实现
以字节为单位
发送方维持发送窗口,接收方维持接收窗口
A收到B的窗口号为N,序号为M的信息,表示要求A将自己的发送窗口设置成N,从序号为M的位置开始发送数据
设置超时重传
选择确认SACK
TCP的流量控制
让发送方的发送速率不要太快,让接收方来的及接受
死锁
当发送方处于暂停状态,直至接收方重新发送一个新的非0窗口值为止,若发送的新的报文段丢失,则发送方在等待接收方,接收方也在等待发送方,导致死锁
解决:TCP为每一个连接设有一个持续计时器,只要一方收到0窗口通知,就启动持续计时器,若持续计时器设置的时间到期,则发送一个零窗口探测报文段,对方在收到这个报文之后给出当前窗口值,若窗口仍然是零,则重新启动持续计时器,若窗口不是零,死锁被打破
TCP的拥塞控制
拥塞控制和流量控制的区别
拥塞控制是全局性的过程,流量控制是给定的发送端到接收端的点对点的控制
拥塞窗口cwnd:发送方维持的一个窗口,可以根据网络的拥塞程度,动态地调整窗口 单位是字节
拥塞控制算法
慢开始
建立TCP连接之后,发送方每发送一对新的报文段的确认,就把cwnd加1,成指数增长(只要收到确认报文,cwnd就加1,可以紧接着发送数据)
拥塞避免
让拥塞窗口cwnd缓慢增大,没经过一个轮次,cwnd加1,使cwnd呈线性增长
当网络出现拥堵时,(发送方没有按时收到确认)就把门限值ssthresh设置为出现拥塞时窗口值的一半,然后将cwnd设置为1,进行慢开始算法
快重传
为了避免单个报文段丢失而被误认为网络拥堵,同时为了让发送方尽早知道有个别报文段没有到达接收方,进行快重传算法 接收方每收到一个失序的报文段就立即发出对已收到报文段的重复确认,当接收方连续收到三个重复的确认时,就执行“快重传”
快恢复
在快重传丢失的报文段的同时,执行快恢复算法,令cwnd窗口减为当前窗口的一半,ssthresh也为同样的数值,然后执行拥塞避免算法
慢开始门限
为了防止拥塞窗口过大引起的网络拥塞,需要设置一个慢开始门限ssthresh,当cwnd<ssthresh 时,使用慢开始算法 cwnd>ssthresh 时,使用拥塞避免法 cwnd=ssthresh 时,使用慢开始算法或拥塞避免算法都行
TCP的连接管理
建立连接
采用客户-服务器方式,主动发起连接建立的应用进程叫做客户,被动等待连接建立的应用进程叫做服务器
三次握手
之所以建立请求是为了防止滞留在网络中的连接请求报文段在以后的某个时间又到达了服务器端
建立连接的前两次发送的数据报,即使不携带数据,也要消耗一个序号,第三次握手如果没有数据,则不消耗序号
数据传送
连接释放
数据传输结束后,双方都可以释放连接
释放连接时发送的连接释放数据报,其首部的FIN=1,序号seq=u(已传送的最后一个字节的序号加1)等待B的确认,FIN报文即使不携带数据,也要消耗一个序号
释放连接时,客户和服务器都要进行一次连接释放报文段的发送与确认