运输层的作用

运输层向它上面的应用层提供通信服务,两个主机进行通信就是两个主机中的应用进程相互通信。通信的真正端点并不是主机而是主机中的进程。端到端的通信是应用进程之间的通信。运输层有一个重要功能:复用(multiplexing)和分用(demultiplexing)。

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

通信的真正端点并不是主机,而是主机中的进程,端到端的通信是应用进程之间的通信。

网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。运输层还要对收到的报文进行检测。根据应用程序的不同需求,运输层需要有两种不同的运输协议,即面向连接的TCP和无连接的UDP。运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道,但这条逻辑信道对上层的变现却因运输层使用的不同协议而又很大的差别。当运输层采用面向连接的TCP协议时,尽管下面的网络是不可靠的,但这种逻辑通信信道就相当于一条全双工的可靠信道。但当运输层采用无连接UDP协议时,这种逻辑通信信道任然是一条不可靠信道。

运输层的作用:向它上边的应用层提供通信服务
运输层的协议TCP,UDP
运输层的设备:网关

运输层的协议

运输层协议概述

运输层两个主要协议就是:用户数据报协议UDP传输控制协议TCP
运输层是通过首部的端口号来确定该把数据传给哪个端口的

TCP和UDP对应服务的应用层协议

TCP对应的协议:

(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议

UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

UDP和TCP的区别

  1. TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。

  2. TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报

  3. TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。

UDP协议

概述

UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。

UDP与TCP位于同一层,但它不管数据包的顺序、错误或重发。因此,UDP不被应用于那些使用虚电路的面向连接的服务,UDP主要用于那些面向查询—应答的服务,例如NFS。相对于FTP或Telnet,这些服务需要交换的信息量较小。

UDP协议的特点

UDP主要特点:

(1)UDP是无连接的,发送数据之前不需要建立连接,减少了开销和发送数据之前的时延。

(2)UDP使用尽最大努力交付

(3)UDP是面向报文的

(4)UDP**没有拥塞控制**,因此网络出现的拥塞不会使源主机的发送速率降低。

(5)UDP支持一对一、一对多、多对一和多对多的交互同信。

(6)UDP的首部开销小,只有8字节,TCP20字节。
 

UDP报文结构

IP数据报的检验和检验IP数据报的首部,UDP检验和是把首部和数据部分一起都检验的。

每个UDP报文分UDP报头和UDP数据区两部分。报头由四个16位长(2字节)字段组成,分别说明该报文的源端口、目的端口、报文长度以及校验值。UDP报头由4个域组成,其中每个域各占用2个字节,具体如下:
  (1)源端口号;
  (2)目标端口号;
  (3)数据报长度;
  (4)校验值。
  使用UDP协议包括:TFTP(简单文件传输协议)、SNMP(简单网络管理协议)、DNS(域名解析协议)、NFS、BOOTP。

TCP/IP协议

TCP/IP协议是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。通俗而言:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。
  IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层—TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包是不可靠的,因为IP并没有做任何事情来确认数据包是否按顺序发送的或者有没有被破坏,IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。

  TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。
  

可靠传输的原理

TCP是面向字节流的,可靠的,点对点的全双工面向连接协议。

停止等待协议

全双工通信的双方既是发送方也是接收方。

1,无差错的情况下

2,出现差错的情况下
上图(b)在传输过程中出现差错的情况。

3,确认丢失和确认重传

连续ARQ协议

TCP可靠传输的实现

基本实现

以字节为单位的滑动窗口

================================================

B将确认号31告知A,然后A从该确认号开始,发送后边的窗口大小的数据

A的发送窗口内部和B的接收窗口内部

P3-P1 = A的发送窗口大小
P2-P1 = 已发送但还没有收到确认的
P3-P2 = 允许发送但还没有发送的。

如果此时32,33没有按序到达,说明31没有收到,所以B仍然只能给A返回确认号仍然是31。

================================================

如果31,32,33都顺利到达,A收到了新的确认号34,则滑动窗口向前移动3

================================================
如果A在连续发送完42-53之后,P2和P3重合,发送窗口内的序号都已经用完了,但还没有再收到确认。

这样A就等待一段时间(重传计时器控制)后就重传这部分数据,重新设置重传计时器,直到收到B的确认为止。

发送缓存和接收缓存

发送缓存用来暂时存放:
(1)发送应用程序传送给发送发TCP**准备发送的数据**;
(2)TCP已发送出但尚未收到的确认的数据。
接受缓存用来暂时存放:
(1)按序到达的、但尚未被接受应用程序读取的数据
(2)未按序到达的数据。

超时重传的时间选择

TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT。TCP保留了RTT的一个加权平均往返时间RTTs(又称为平滑的往返时间)。

新的RTTs = (1-α) * (旧的RTTs)+α * (新的RTT样本)

上式中,0≦α<1。

超时重传时间

RTO = RTTs +4 * RTTd (RTTd是RTT的偏差的加权平均值)

新的RTTd=(1-β)(旧的RTTd)+β|RTTs-新的RTT样本| (β的推荐值是0.25)

TCP的流量控制

流量控制(flow control)就是让发送方的发送率不要太快,要让接受方来得及接收。利用滑动窗口机制可以很方便地在TCP连接上实现对发送方的流量控制。发送方的发送窗口不能超过接收方给出的接收窗口的数值TCP的窗口单位是字节,不是报文段。

TCP的拥塞控制

拥塞控制概述

拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路器不致过载。拥塞控制多要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、多有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制旺旺指点对点通信量的控制,是个端到端的问题。流量控制所要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

拥塞控制方法

慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retransmit)和快恢复(fast recovery)。

1.慢开始和拥塞避免
发送方维持一个叫做拥塞窗口(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。

慢开始算法的思路是:先探测一下,由小到大逐渐增大发送窗口,也就是说由小到大逐渐增大拥塞窗口数值。使用慢开始算法后,没经过一个传输轮次(transmission round),拥塞窗口cwnd就加倍。

拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增加,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样,拥塞窗口cwnd按现行规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
2.快重传和快恢复
快重传算法首先要求接受方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等待自己发送数据时才进行确认。

(1)当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。
(2)由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法,而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

TCP的运输连接管理

注:seq:”sequance”序列号;ack:”acknowledge”确认号;SYN:”synchronize”请求同步标志;;ACK:”acknowledge”确认标志“;FIN:”Finally”结束标志

三次握手

TCP连接建立过程

开始A和B都处于CLOSED状态然后B先进入LISTEN状态,等待请求

  • 首先Client端发送连接请求报文A发送后A进入SYN-SENT状态
  • Server段接受连接后回复ACK报文,并为这次连接分配资源,B发送后B进入SYN-RCVD状态
  • Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源。A发送后A进入ESTAB-LISHED状态,B收到后也进入该状态,这样TCP连接就建立了。

为什么要三次握手防止失效的连接请求报文段突然又传送到主机B
场景:A首先发送一个连接请求,但是该请求在网络节点上滞留了,没有收到确认。于是A重传了一次请求,并且收到了B的确认,于是连接建立,数据传输完成后,释放连接,假定A发出的第一个请求报文段并没有丢失,而是在某些网络节点上滞留,本来是一个失效的请求,但B收到后误认为是A再次发出一个新请求,于是向A发送确认,同意建立连接。
假定采用两次握手,那么只要B发出确认,则新的连接就建立了。由于A并没有发出请求,因此不理会B的确认,也不会向B发送数据,但B却以为新的连接已经建立,并一直等待A的数据,B的许多资源就这样白白浪费了。
假定采用三次握手,则B发出确认,但A因为并没有发请求,所以不理会B的确认,B没有收到A的确认,则连接建立失败,B知道连接建立失败。会回收资源。

极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,“三次握手”很有必要!
为什么不是四次握手
握手握的是序列号,四次握手的过程是
1,A发送给B 同步序号SYN+A的seq为x
2,B收到后确认收到ACK发给A,然后存储该序号SYN为B的ack=x+1,确认A的seq按序到达
3,B向A发送SYN+自己的序列号seq为y
4, A收到B的序列号,存储到本地,发送ack=y+1,确认收到了,发送ACK+ack和自己的新序号seq为x+1

四次挥手

TCP连接断开过程

开始的时候A和B都处于ESTAB-LISHED状态

  • 假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。A发完后A进入FIN-WAIT-1状态

  • 所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。B收到后向A发送ack,B发完后B进入COLSE-WAIT状态

  • A收到B的确认后进入FIN-WAIT-2状态

  • 当B确定数据已发送完成,则向A发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。A收到B的ack就进入Client端收到FIN报文后, “就知道可以关闭连接了。B发完后B进入 LAST-ACK状态

  • 但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。“,Server端收到ACK后,”就知道可以断开连接了”。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。Ok,TCP连接就这样关闭了!

设置2MSL时间的问题

1,为了保证A发送的最后一个ACK能到达B。因为这个ACK可能丢失,因为使B收不到确认,无法关闭,有个这段时间,B就可以超时重传FIN+ACK,然后A就重传一次ACK,然后重置定时器。最后A,B都能顺利关闭,如果没有这段时间,A发送完ACK就关闭,B不一定能顺利关闭。
2,防止“已失效连接请求报文段”出现在本连接中,A在发送完最后一个ACK后,再经过2MSL,就可以使本链接持续的时间内所产生的所有报文段都在网络中消失,这样就可以使下一个连接中不再出现这种旧的请求报文段

和下层的对接

继续讲哪个小例子,假如说是中国邮政EMS(TCP)承包了该客人的业务,它拿到客户的信封后依据之前邮局对照表里解析出来的地址(ip地址)把这封信放到一个包裹里(ip数据报):包括包裹外壳(源ip地址和目的ip地址)+完整的信(tcp报文)。

然后快递公司站点把包裹投递出去,经过服务站点的层层转发(使用了下三层:数据链路层,物理层)送到对应住户(进程)所在的小区(主机)。

网络层在这里负责将完整的信打上ip地址投递出去,到它的传送网络里
网络层在这里负责在传送终点站直接交付给当地小区门口的快递公司服务站点