计算机网络第五章61,计算机网络笔记——第五章+第六章

第五章.运输层

运输层的概述

运输层属于面向通信部分的最高层,同时也是用户功能中的最低层。从运输层的角度看,通信的真正端点并不是主机而是主机中进程

运输层有一个很重要的功能, 复用 和 分用 。复用是指发送方不同的应用进程都可以使用同一个运输层协议传送数据,分用指接收方的运输层在剥去报文的首部后能够把这些数据正确交付目的应用进程。

运输层两大通信协议:TCP(传输控制协议) 和 UDP(用户数据报协议) 。

端口

使用协议端口号可以达到分用的目的,注意的是,这种在协议栈层间的抽象的协议端口是 软件端口 ,和路由器或交换机上的硬件端口是完全不同概念。硬件端口是不同硬件设备进行交互的接口,而软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。

16位端口可允许65525个不同的端口,端口分为两大类,服务器端使用的端口号(0-49151)和客户端使用的端口号(49152-65535)。其中服务器端使用的端口号又分为两种:

熟知端口号:0-1023,一般给常用软件分配,让用户都知道。

登记端口号,1024-49151,为没有熟知端口号的应用程序使用,需要在IANA登记,以防重复。

UDP

UDP只在IP的数据报服务之上增加了很少一点功能,就是复用和分用的功能以及差错检测。UDP是无连接,尽最大努力交付,面向报文的(对应用层交下来的报文,添加首部后直接发送)。UDP没有拥堵控制,首部开销很小,只有8个字节,由于UDP没有拥堵控制,如果很多主机同时发送高速率的实时视频流时,网络就容易发生拥堵。

TCP

TCP是面向连接,点对点通信,可靠交付,全双工通信的,面向字节流。

可靠传输的工作原理

先从最简单的停止等待协议说起

停止等待协议

每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。其间如果出现差错(超过一段时间后没有收到确认),就 超时重传 。通过这样的机制(也叫自动重传请求ARQ(Automatic Repeat reQuest)),就可以实现可靠通信。

确认丢失和确认迟到

接收方收到重传分组,需要做两件事,丢弃这个分组,向发送方发送确认,因为A是收不到确认才发了重传分组。

发送方收到迟到的确认,丢弃即可,如果发送方始终收不到确认,说明线路太差。

信道利用率 U = Td/(Td+RTT+Ta)

Td:发送方发送分组所需要的时间

RTT往返时间

Ta:接收方发送确认所需时间

停止等待的的信道利用率是很低的。

连续ARQ协议

发送方维持一个发送窗口,每收到一个确认就可以把发送窗口向前滑动。接收方一般采用累计确认的方式,就是在收到几个分组后,对按序到达的最后一个分组发送确认。

TCP可靠传输的实现

TCP的滑动窗口是以 字节 为单位的,流程跟连续ARQ协议很像,窗口的大小是可以改变的。另外TCP发送方和接收方都有缓存,发送缓存包含发送窗口和应用程序传送给TCP准备发送的数据。接收缓存存放按序到达,但未被应用程序读取的数据和未按序到达的数据。对于未按序到达的数据,TCP一般临时存放在接收窗口中,等到缺少的字节收到后再按序交付给应用程序。

选择确认SACK

对于收到的报文段无差错,只是未按序号,中间还缺少一些序号的数据,只要求发送方重传缺少的数据,这时候选择确认SACK是一种可行的处理方法。

但是由于TCP首部没有哪个字段可以存放字节块的边界信息,而首部长度限制,所以一般还是重传所有未被确认的数据块。

TCP的流量控制

所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

接收方收到了分组后,可以在确认报文中设置rwnd来要求发送方窗口大小调整,以此来控制流量。但是如果发送方收到了零窗口通知后,接收方要增大窗口发送一个增大窗口报文,但是这个报文丢失会造成死锁,因此TCP为每一个连接设有一个持续计时器。

只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,如果计时器的时间到期,就发送一个 零窗口探测报文段(仅有1字节的数据) ,接收方在确认这个探测报文时给出现在的窗口值,如果还是零,就重新设置持续计时器,不是零就打破死锁。

TCP的拥堵控制

所谓拥堵控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥堵控制是防止网络线路中过多的数据堵塞,而流量控制是为了让接收端来得即接收数据,当然网络中有很多主机在发送数据时,拥堵控制就显得特别重要。

拥堵控制的四种算法: 慢开始 ,拥堵避免, 快重传 , 快恢复 。

相关名词:

拥堵窗口cwnd

接收窗口rwnd

慢开始门限ssthresh

慢开始和拥堵避免

发送方维持一个拥堵窗口cwnd的状态变量,发送窗口等于min(拥堵窗口,接收窗口),当网络发送拥堵时,就减小拥堵窗口,反之增大。那么发送方如何知道网络发生了拥堵?我们知道,当网络发生拥堵时,路由器就会丢弃分组,因此当发送方没有按时收到应当到达的 确认报文 ,就可以认为网络发生了拥堵。

慢开始:当主机开始发送数据时,应当先试探性地往网络中发送数据。通常一开始先把拥堵窗口cwnd设置为一个最大报文段MSS的数值,每接收到 一个确认报文 后,就可以把cwnd 增加至多一个 MSS的数值,也就是翻倍增大cwnd大小。

为了防止拥堵窗口cwnd增长过大引起网络拥堵,还需要设置一个慢开始门限ssthresh状态变量。

当cwnd

当cwnd>ssthresh,停止使用慢开始算法而改用拥堵避免算法

当cwnd=ssthresh,两者皆可

拥堵避免 就是cwnd每经过一个往返时间RRT就把发送方的拥堵窗口cwnd增加1,而不是加倍,即拥堵避免是线性增长,慢开始是指数增长。

乘法减小:无论在慢开始阶段还是拥堵避免阶段,只要出现超时(即可能出现网络拥堵),就把慢开始门限值ssthresh 设置为当前cwnd的减半,并且cwnd设置为1

加法增大:在执行 拥堵避免 算法后,使 拥堵窗口 缓慢增大

乘法减小和加法增大合起来常称为AIMD算法。

注意的是,上述两种算法并不能完全避免拥堵,只是使网络不容易出现拥堵。

快重传和快恢复

快重传:快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认。例如没有收到M3,却收到了M4,以后收到M5,M6等都立刻发出确认M2,让发送方及时知道M3丢失。快重传算法规定发送方只要一连续收到 三个重复确认 就应当立即重传对方尚未收到的报文段,而不必继续等待为M3设置的重传计时器到期,这样整个网络的吞吐量得到了很大的提升。

快恢复:当发送方连续收到三个重复确认,把ssthresh和新的cwnd设置为当前cwnd的一半,然后开始执行拥堵避免算法(加法增大)。

在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用。

注意的是,发送方的发送窗口一定不能超过接收方在TCP首部中给出的接收窗口rwnd,即发送窗口上限 = min[rwnd,cwnd]

TCP连接管理

相关TCP报文首部:

SYN:在建立连接时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。如果对方同意建立连接,在响应报文段SYN=1和ACK=1

seq:序号,表明该报文段第一个数据字节的序号

ACK:仅当ACK=1时确认号字段才有效。

ack:确认号,期望收到对方下一个报文段的第一个数据字节的序号

FIN:用来释放一个连接。FIN=1,表明此报文段的发送方的数据已发送完毕,并要求释放连接。

TCP连接的建立

tcp连接建立图.png

关于最后一次确认的作用:

假定A第一次建立连接发送的请求报文延迟了,A重发一次建立连接的请求,于是B收到了两个连接建立请求,错误地打开两个连接。

TCP连接的释放

tcp连接释放图.png

TCP连接释放是双方都可以主动发起释放连接请求。

关于最后主动关闭连接方需要进入TIME-WAIT状态等待2MSL时间

为了确保A最后发送的ACK报文能够到达B。如果A在TIME-WAIT状态下收到了B的FIN+ACK报文的重传,就可以重传一次最后的ACK报文。因此TCP连接中被动关闭连接的一方往往是先关闭连接的一方。

另外TCP连接中,除了时间等待计时器外,还有一个保活计时器,其作用是为了防止客户端的主机出现故障,而长期占用服务器的资源。

第六章.应用层

DNS域名系统

域名系统DNS(Domain Name System),从域名解析出IP地址。因特网的域名系统DNS被设计成为一个联机分布式数据库系统,使大多数名字都在本地进行解析,仅少量解析需要在因特网上通信。

当需要解析主机名的时候,主机调用解析程序,用UDP用户数据报方式发给本地域名服务器,如果本地域名服务器无法解析域名,就向其他域名服务器发出查询请求。

域名结构

例子:mail.cctv.com,从左往右,mail是三级域名,cctv是二级域名,com是顶级域名

你可能感兴趣的:(计算机网络第五章61)