计算机网络之传输层

举报
JohnTai 发表于 2018/12/27 16:38:05 2018/12/27
【摘要】 传输层是计算机网络中非常重要的组成部分,为运行在不同主机上的进程提供了端到端的逻辑通信机制,主要包括UDP、TCP两个协议。


传输层为运行在不同主机上的进程提供了端到端的逻辑通信机制,主要包括UDP、TCP两个协议

一、基本的工作方式:

发送端:将应用层递交的消息分成一个或多个segment(报文段),并向下传输给网络层

接收端:将接收到的segment组装成消息并交给上层应用层

二、TCP、UDP协议

1、TCP特点

  • 提供点对点的通信机制

  • 可靠、按序的字节流机制

  • 流水线机制

  • 发送方、接收方缓存

  • 全双工,同一连接中能够传输双向数据流

  • 累计确认机制,该序列号之前的所有字节均已被正确接收到

2、TCP段结构

  • 序列号:是指segment中第一个字节的编号,建立TCP连接时双方随机选择序列号

  • ACKs:希望接收到的下一个字节的序列号

3、UDP

基本是对IP协议简单封装的基础上加上以下两个功能:

UDP多路复用、多路分用
  • 传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程;

  • 从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层;

UDP检验和(checksum)

三、可靠数据传输(rdt)原理

何为可靠:数据包不错、不丢、不乱

1. 流水线机制

流水线机制即同时发送多个packet。

2. 滑动窗口

管理空中的packet(未经确认),即序列号的范围。随着协议的运行,窗口在序列号空间内向前滑动。主要包括:GBN,SR。

  • GBN 处理乱序时,由于接收方没有缓存,因此重发的packet较多,造成一定的浪费

  • SR 接收方对每个packet单独进行确认,设置缓存机制,缓存乱序到达的packet 发送方只重传没收到ACK的分组(每个packet有单独的计时器)

3. 可靠数据传输

  1. TCP RTT和超时 大于RTT,过短会造成不必要的重传,过长会对段丢失时间反应慢

  2. 如何估计RTT?

    SampleRTT:测量从段发出去到收到ACK的时间,求平均值EstimatedRTT。移动加权平均: EstimatedRTT = (1-⍺)EstimatedRTT + ⍺sampleRTT

    DevRTT = (1- β)DevRTT + β|SampleRTT-EstimatedRTT|

    超时时间TimeoutInterval = EstimatedRTT + 4*DevRTT

  3. TCP发送方发送数据流程

  • 从应用层接收到数据

  • 创建Segment

  • 序列号是Segment第一个字节的编号

  • 开启计时器

  • 设置超时时间:TimeOutInterval

  • 重传引起超时的Segment

  • 重启定时器

  • 如果确认此前未确认的Segment,更新SendBase,如果窗口中存在未被确认的packet,重新启动计时器

快速重传机制

如果发送方收到对同一数据的3个ACK,则假定该数据之后的段已经丢失,在定时器超时之前即进行重传。

四、流量控制

基本思想:控制发送方传输数据不能太多、太快,以至于淹没接收方(buffer溢出)

方式:

  1. Receiver通过在Segment的头部字段将RcvWindow告诉Sender

  2. Sender限制自己已经发送的但未收到ACK的数据不超过接收方的空闲RcvWindow尺寸

  • 注意:如果Sender接收到RcvWindow=0,会出现什么情况? 在这种情况下,发送方仍然可以发送很小的段,从而可以让接收方回复新的RcvWindow大小。

五、连接管理

发送发和接收方在传输数据之前会建立连接,同时交换Buffer和流量控制信息等。

* 通过三次握手建立连接:
  1. 客户主机向服务器发送SYN报文段,初始序列号等,此外不携带其他任何数据

  2. 服务器收到SYN报文段,答复SYNACK报文段,服务器分配缓存,选择初始序列号并答复客户机

  3. 客户机收到服务器SYNACK报文段后,会答复一个ACK报文段

为什么需要三次握手?两次是否可行?

* 通过四次握手断开连接:
  1. 客户端和服务端都可以主动发起断开

  2. 客户端socket调用关闭的函数,发送FIN报文段

  3. 服务器收到后,答复ACK

  4. 服务器发送FIN报文段

  5. 客户端收到FIN后,答复ACK,并等待一段时间(一般30s),如果这段时间内再次收到FIN,会再次发送ACK。

六、拥塞控制

太多发送主机发送了太多数据或者发送速度太快,导致网络无法处理。

主要表现:packet丢失(路由器缓存溢出)、分组延迟过大(在路由器缓存中排队)

代价:时延变大,上游传输能力被浪费。

那么如何进行拥塞控制呢?管制发送方发送速率

  • 端到端拥塞控制 网络层不需要显式的提供支持,端系统通过观察loss,delay等网络行为判断是否发生拥塞(TCP采用此种方式)

  • 网络辅助的拥塞控制 路由器向发送方显式地反馈网络拥塞信息,简单的拥塞指示(1bit)

ATM ABR(available bit rate)拥塞控制

发送发发送RM cells,交换机设置RM cell位:NI bit:rate不许增长,CI bit:拥塞指示。RM cell由接收方返回给发送方。

TCP如何控制网络速率:
  • 加性增-乘性减:AIMD

逐渐增加发送速率,谨慎探测可用带宽,直到发生loss。每个RTT将congwin增大一个MSS,发生loss后将CongWin减半。

  • 慢启动:SS

当连接开始时,指数性增长。TCP连接建立时,CongWin=1,例:MSS=500 byte,RTT=200msec,初始速率=20k bps。初始速率很慢,但是快速攀升。

  • Threshold变量

该变量控制指数增切换到加性增。loss事件发生时,Threshold被设为Loss事件前CongWin值的1/2。

  • Loss事件的处理

如果是3个重复的ACK,CongWin将为原来的1/2,如果是超时造成的loss,CongWin降为1。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。