网络5——传输层

来源:互联网 发布:计算机算法有什么 编辑:程序博客网 时间:2024/06/10 06:20

1、为什么需要传输层

网络层和数据链路层都无法为端到端的应用进程之间提供可靠地数据传输。我们还记得:ip协议提供的是:不可靠、无连接的数据报传送服务的协议,提供“尽力而为”的服务。数据链路层只能体重相连的两节点间的可靠数据传递。

所以传输层存在的原因:

     1.为两个端系统中运行的应用进程之间提供数据通信;
     2.可灵活选择适当的协议保证通信的可靠性

这个图就比较形象的说明了UDP只提供通信,差错检测;而TCP还提供差错控制,流量控制,拥塞控制功能。


2、UDP用户数据报协议


看udp的格式。

在计算检验和时,临时把伪首部 UDP用户数据报连接在一起。伪首部仅仅是为了计算检验和

UDP多路复用与多路分解:
多路复用:多个应用进程使用同一个UDP协议发送数据;
多路分解:由UDP协议将UDP报文发送给不同的应用进程;
UDP是一种不可靠的传输层协议:
无连接;
不进行差错控制,不能保证数据一定能准确地到达
数据在途中丢失,不重传;数据错误的到达,检错丢弃;数据正确的到达,接受;
接收方对以上三种情况的感知是一样的,无法区分,不能保证数据一定准确地到达
不进行流量控制、拥塞控制,留下威胁网络传输可靠性的隐患

3、TCP传输控制协议


(1)源端口和目的端口  –各2个字节,表示源和目的端口号。

(2)发送序号    –4字节,指出本报文中的数据的第一个字节在发送方本次连接上发送的数据流中的位置(以字节编号,SYN=1时表示启始值)。

(3)确认序号–4字节,告诉对方希望下一次发送的字节序号,与ACK=1配合使用;若收到的确认号为N,则表示序号N-1为止的数据已全部收到。

(4)TCP头部长度–4比特,指出以4字节为单位的报文头部长度,如没有选项,则为5即20Bytes。该域是针对变长的“选项”域设计的。

(5)紧急标志位URG(URGent)–当URG=1时,表明此报文是紧急数据,应尽快传送出去,接收方应优先处理。

(6)确认标志位ACK–只有当ACK=1时确认序号字段才有意义。当ACK=0时,确认序号没有意义。目前见到的ACK=0的情况就是请求建立连接的情况。

(7)急迫标志位PSH(PuSH)–当PSH=1时,该包连同传送缓冲区的其它包应立即进行传送,而无需等待缓冲区满了才送,接收端必须尽快将此数据交给程序处理。

(8)重建标志RST(ReSeT)–当RST=1时,表明出现严重差错,复位产生差错的连接

(9)同步标志位SYN–当SYN=1而ACK=0时,表明这是一个建立连接请求报文,若对方同意建立该连接,则在发回的报文中使将SYN和ACK标志位同时置1。建立完连接之后就变为了SYN=0,然后发送数据,返回响应。

(10)终止标志位FIN(FINal)–当FIN=1时,表明数据已经发送完毕,并请求释放连接。

(11)窗口------用于流量控制–2字节,接收数据方告诉发送数据方它的接收窗口大小(接收缓冲区大小),其单位为字节。

(12)校验和–2字节,校验和字段检验的范围包括TCP报文的头部、数据区和伪包头。

(13) 紧急指针–2字节,当URG= 1 的时,紧急指针就会指示出紧急数据所在位置。

(14)可选项–长度可变,可选项的长度要么是 0 ,要么就是 32bit 的整倍数。TCP只规定了一种选项,即最长报文段MSS(Maximum Segment Size),限定了发送主机在报文段中可传送数据的最大长度。
我们总结TCP建立连接:三次握手
  1.客户端发送请求:SYN=1,ACK=0,seq=x
  2.服务器接受请求,分配缓存和变量,返回响应:  SYN=1,ACK=1, seq=y
  3.客户端接受响应,分配缓存和变量,返回响应:SYN=0, ACK=1, seq=x+1

TCP的差错控制:
            发送方每传送一个报文段就启动一个重传定时器,若正常情况下,确认一定会在超时之前到来, 如果定时器超时则重传;对于重复接收的确认,发送方丢弃后什么也不做.
           接收方接收数据后,进行数据差错检测,检测正常则接收,错误就丢弃;对于重复接收的数据丢弃,并进行再次的确认;
注意:
发送方在发送完一个分组后,必须暂时保留已发送的分组的副本。
超时计时器的重传时间RTO应当比数据在分组传输的平均往返时间RTT更长一些。

TCP流量控制:
TCP接收方通过报文段头部的窗口(通告窗口)字段将接收方当前可用缓存大小反馈给发送方,从而改变发送端滑动窗口的大小,进行流量控制
发送窗口大小 =接收窗口大小(RcvWindow)
接收窗口大小表明接收方当前可用的缓存空间大小
发送窗口大小表明发送方在未获确认的情况下可连发数据大小

TCP拥塞控制:
1.慢启动:TCP刚建立连接时将拥塞窗口变量cwnd设置为1个报文段大小,然后以指数方式放大cwnd,直到大于等于ssthresh,进入拥塞避免阶段
2.进入拥塞避免阶段后,TCP采用线性增加方式放大cwnd
3.无论是慢启动阶段还是拥塞避免阶段,如果发生重传定时器超时的现象,就必须回到慢启动阶段, cwnd设置为1个报文大小, ssthresh设置为上一次拥塞窗口值cwnd的一半

快速重传:当个别报文段丢失,发送方收到3个重复的ACK,进行快速重传
快速恢复:快速重传后,进入拥塞避免阶段进行快速恢复



原创粉丝点击