学习日记(计网运输层)

一、运输层多路复用与多路分解

1、多路复用

  • 运输层协议从同一主机不同套接字中接收数据块并加上头部信息形成报文段,之后将报文段通过网络层传入因特网的过程,称为多路复用。
  • 基于UDP套接字的多路复用(无连接)
    (1)获得数据块需要加上目的IP地址目的端口号标识(二元组),用于区分目的主机和进程。
    (2)一般的,应用程序的客户端运用运输层为其分配端口号(源端口号),也可由程序员静态绑定
  • 基于TCP套接字的多路复用(连接)
    (1)在报文数据块前加上目的IP、目的端口号、源IP和源端口号标识(四元组),用于区分目的主机或进程。
    (2)一般的,应用程序的客户端运用运输层为其分配端口号(源端口号),也可由程序员静态绑定

2、多路分解

  • 运输层根据标识判断报文应该分给哪个进程,并将报文段分解成报文,通过相关套接字将报文分给进程。

二、UDP运输协议

1、特点

  • 数据发生时间更为精确。
  • 无连接状态。一般可支持多用户。
  • 不用连接建立。节约资源。
  • 分组首部开销小,UDP首部只需要8字节。

2、UDP报文结构

在这里插入图片描述

  • 端口号大小为16比特。
  • 校验和:判断报文段是否在传输的过程中出现差错。

三、TCP运输协议

1、TCP基础

  • TCP是点对点之间连接。
  • TCP在数据传输前需先进行三次握手,配置相关连接信息。
  • 三次握手阶段,前两次发送的特殊报文段不能承载“有效载荷“,第三次特殊报文段可以承载”有效载荷“。
  • 创建连接后,两个进程之间开始发送数据,发送方通过套接字将报文传入TCP发送缓存中,TCP再从发送缓存中取出报文段送往网络层;接收方的TCP运输层从网络层获取报文段,并将其存在TCP接收缓存中,进程通过套接字读取接收缓存中的报文。
    在这里插入图片描述
  • 发送缓存和接收缓存是在建立连接初期设置的。且TCP连接的每一端都有接收缓存和发送缓存。

2、TCP报文段结构

在这里插入图片描述

  • 序号和确认号:根据字节流编号。当客户机向服务器发送数据时,序号(seq)为发送报文段中首个字节的序号确认号(ACK)为客户机需要接收的报文段序号
  • TCP采用累积确认的方式缓存接收报文段。

3、可靠数据传输的实现

(1)超时重传:当接收方ACK响应报文未在设定时间内传到发送方时(因为丢失或延迟),发送方重新发送报文段。
(2)快速重传:当发送方接收到3个冗余ACK确认号报文段时,立刻重新发送确认号为ACK的报文段。
(3)TCP的差错恢复机制:发送方只维护已发送但未被确认的最小字节流序号未发送最小字节序号;接收方维护接收按序到达的报文段最小字节序号,当缺失某一报文段被补齐时,接收方发送当前最小未按序未接收到的字节序号(接收方为选择确认,有选择性地选择确认报文段序号)。

4、流量控制

在这里插入图片描述

  • 发送方维护一个接受窗口大小rwnd,由接收方发送响应报文段告知发送方rwnd大小(TCP报文段中有一个16字节的窗口大小)。
  • 发送缓存中的最后发送报文段的字节序号lastBetySend - 最后确认的序号lastBetyAcked <= rwnd
  • 当接收方rwnd为0时,假设接收方发送最后一条确认报文段(rwnd为0)后,由于没有新报文段到达,因此即使接收缓存有空闲空间,发送方也无法获知,为了解决这一问题,在接收方rwnd=0后,发送方继续发送只有一个字节的特殊报文段,以获得接收方的确认报文段,从而获得rwnd值
  • 注:UDP中没有流量控制,当发送文件时,接收方将接收到的报文段放到一个有限大小的缓存中,进程从缓存中获取完整报文段。若进程访问速度不够快,将造成缓存溢出。

5、TCP连接管理

(1)三次握手
在这里插入图片描述

  1. 第一步: 客户机发送SYN报文段,其中SYN置为1,seq序号设为随机数m
  2. 第二步: 服务器安全接收到SYN报文段,为TCP连接分配缓存和变量用于后续接收报文段数据和记录相关状态,并发送SYNACK报文段,其中SYN置为1,seq序号为初始序号n,ACK序号为m+1
  3. 第三步: 客户机安全接收到SYNACK报文段,客户机为TCP连接分配缓存和变量,并向服务器发送ACK报文段,其中因为已经建立连接SYN置为0,ACK序号为n+1,seq为m+1;此报文段可以携带有效载荷。
  • 采用三次握手的原因:
    倘若客户机在发送第一条SYN报文段后,由于网络延迟,SYN报文段迟迟没有到达服务器SYNACK报文段未到达客户机,因此客户机迟迟收不到SYNACK报文段,因此客户机引起超时重传,再次发送SYN报文段,并成功建立了TCP连接;建立之后第一条SYN报文段到达服务器,这时如果没有第三次握手,那么服务器弧再次建立连接,造成建立两条连接的后果,但是若有第三次握手,服务器就可知道此SYN请求报文段已经建立连接,不会再次为该请求建立新的连接

(2)四次挥手
在这里插入图片描述

  1. 第一步:客户机向服务器发送FIN特殊报文段,其中FIN置为1,seq为序号u;
  2. 第二步:服务器接收到FIN报文段后,进入close_wait状态,并向客户机发送ACK报文段,其中ACK序号为u+1,seq为序号v;
  3. 第三步:服务器通知进程关闭,待所有数据发生完毕后,向客户机发送FIN报文段,其中FIN置为1,ACK序号为u+1,seq为序号w;
  4. 第四步:客户机接收到FIN报文段,进入time_wait阶段,并向服务器发送ACK报文段,其中seq为u+1,ACK序号为w+1。
  • 采用四次挥手的原因:
    相互告知己方已做好关闭连接的准备,若有一方没有准备好,那么关闭将延迟,比如服务器端的close_wait阶段就是等服务器将剩余需要处理的报文段处理完毕之后才继续进行关闭连接操作。
  • 采用time_wait的原因:
    1)为了等待确认服务器准确接收到ACK报文段,完成关闭连接操作。若服务器没有收到ACK报文段,那么其会超时重发FIN报文段,此时客户机若已经关闭,那么服务器永远无法关闭连接,因此客户机需要等待一段时间才能关闭。
    2)为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

6、TCP拥塞管理

(1)TCP报文段对网络拥塞的暗示:

  • 响应报文超时到达或出现3个冗余ACK报文以上,指示当前网络已经拥塞,应降低传输速率;
  • 按序收到ACK响应报文时,暗示网络是畅通的,可以增高速率;
  • 带宽探测 :当因为网络拥塞降低传输速率后,再次增加传输速率,查看是否会造成网络拥塞。

(2)TCP拥塞控制算法

  • 发送方维护着一个拥塞窗口(cwnd),该窗口跟随控制算法实现动态变化,是一个变量,限制发送速率;慢启动阈值(ssthesh),记录当前慢启动的进入拥塞避免的阈值。
    在这里插入图片描述
  1. 慢启动
    最开始,设置cwnd=1*MSS/RTT(一个报文段),发送方只能发送一个报文段,一旦收到确认报文段,以指数级增加速率。若遇到超时丢包事件时,将慢启动门限ssthesh变量设为cwnd的一半,并将cwnd置为1,重新慢启动;若收到三个冗余ACK报文段时,发送方立刻快速重传,并将ssthesh设为cwnd的一半并进入快速恢复模式
  2. 拥塞避免
    当cwnd<ssthesh时,慢启动过程,cwnd呈指数增长,当cwnd>=ssthesh时,开启拥塞避免,cwnd每次增加1。当遇到超时丢包事件时,再次将ssthesh设为cwnd的一半并将cwnd置为1,重新进行慢启动;若收到三个冗余ACK报文段时,发送方立刻快速重传,并将ssthesh设为cwnd的一半并进入快速恢复模式
  3. 快速恢复
    cwnd的值等于ssthesh的值,且对收到每个冗余的ACK报文段,cwnd的值增加1(例如进入快速恢复前后工收到4个冗余ACK报文段,则cwnd的初始值应该为ssthesh+4)。当丢失报文段的正确ACK到达后,进入拥塞避免模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值