网络(五) 传输层

第五章 传输层

5.1 传输层与UDP

一. 传输层的功能

  1. 传输层为应用进程之间提供端到端的逻辑通信
  2. 传输层要对收到的报文进行差错检验
  3. 传输层需要2种协议
    (1)面向连接的TCP
    (2)无连接的UDP

二. UDP的特点

  1. UDP是无连接的,即发送数据之前不需要建立连接
  2. UDP使用尽最大努力交付,即不保证可靠交付,同时也不实用拥塞控制
  3. UDP面向报文,适合多媒体通信需求
  4. UDP的首部开销小,只有8字节
    image_1aukv6bbje8lsrndmmcto16169.png-15.2kB
    校验和字段计算过程:把没32bit作为一项,逐项相加(包括首部和数据),最后不足32bit的项填充0后相加。将这些项的反码求和后再求反码,结果就是校验和字段的值

5.2 TCP

一. TCP的概念

  1. TCP是面向连接的传输层协议

  2. 每一条TCP连接只能又2个端点
    每一条TCP连接只能是点对点的

  3. TCP提供可靠交付物反应

  4. TCP提供全双工通信

  5. TCP是面向字节流的
    (1)TCP把每个字节都编上了序号
    (2)TCP要求把每个序号都发送回ACK报文

  6. TCP报文头
    image_1aummqr2i1rk616ccdn114nnml39.png-13.6kB
    (1)源端口,目的端口占4字节:表示操作系统上的0~(2^{16}端口范围)
    (2)序号:报文第一个字节的序号(4字节)
    (3)确认号:即将收到的对方返回报文中的序号(这个序号由对方主机维护)(4字节)
    【注】:服务端和客户端的区分是用端口来区分的。
    (4)数据偏移:4bit   指出TCP报文段的数据部分距报文段的起始处有多远。单位是32位字
    (5)连续的6bit标记位:
            URG:数据是否需要紧急发送
            ACK:确认字段是否有效。 ACK=1,上面的确认号才有用
            PSH:当收到的报文中PSH=1,接收方不等到缓冲区满就把报文交付到上层。
            RST:当RST=1,表明TCP连接必须先释放再重新建立
            SYN:当SYN=1,表明这是一个连接请求或连接接受
            FIN:用来释放一个连接。
    (6)窗口:2字节   用来让对方设置发送窗口的大小
    (7)紧急指针:16bit   用来指出此报文段中紧急数据站多少字节

二. TCP连接管理

  1. 传输连接需要三个过程
    (1)连接建立
    (2)数据传送
    (3)连接释放

  2. 连接过程需要解决3个问题:
    (1)使每一方能够确认对方的存在
    (2)允许双方确认一些参数(eg:最大报文段长度,最大发送窗口大小,服务质量等)
    (3)对传输实体资源进行分配(eg:缓存大小,连接表中的项目等)

  3. TCP3报文连接过程
    (1)第一条报文:SYN=1,声明自己是测试连接报文。
    (2)第二条报文:SYN=1,ACK=1,并给出自己的seq序号和ack期望对方的序号。表明自己已经接受到了第一条报文。
    (3)第三条报文:ACK=1,设置自己的seq序号和希望对方的序号。自己的seq,说明已经接受到了第二条报文
    (4)开始传输数据 。 。 。
    image_1aup63qccphg103n1snerhu1id59.png-9.4kB

  4. TCP释放连接
    当乙方请求释放连接时,先声明自己已经没有要传输的数据了,FIN=1;然后对方如果还有数据还能发送,直到发送完毕,对方也把FIN设置为1.连接即可释放
    image_1aup7q9uehdf1s8e1c3ai6lrtqm.png-8.7kB

三. TCP可靠传输

  1. 采用TCP协议连接的双方都要有2个窗口:发送窗口和接收窗口
  2. TCP的可靠传输机制:TCP把要传输的报文中的每个字节编上序号。TCP所有确认都是基于序号而不是基于报文
  3. TCP两端的4个窗口大小经常处于动态变化。但每时每刻都有 (Size_{发送窗口} leq Size_{接收窗口})
    此处的窗口大小设置与数据链路层不一样,数据链路层往往是接受窗口小于等于发送窗口,为了尽最大努力交付
  4. TCP连接的往返时间RTT也不是固定不变的,因为路由选择的路线不同。这个新RTT是一个估算值。

四. TCP的流量控制和拥塞控制

  1. 流量控制:rwnd
    (1)发送窗口的滑动收到接收窗口的制约:
    (2)接收方返回的报文中,会带有rwnd=100。表示接受窗口大小为100,此时发送方接收到报文后,就会调整自己的发送窗口为100

  2. 拥塞控制:cwnd(congestion window)
    (1)发送方:根据拥塞窗口cwnd的大小动态改变自己的发送窗口大小
    (2)拥塞窗口的大小取决于网络的拥塞程度,在动态的改变。发送方让自己的发送窗口等于拥塞窗口,考虑到接收方的接收能力,发送窗口的大小可能小于拥塞窗口
    (3)发送方控制拥塞窗口的原则是:只要网络没拥塞,拥塞窗口就可以再增大一些,以便把更多的报文发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少发送到网络中的分组数。

  3. 慢开始原理
    (1)在主机刚刚开始发送报文段时,先设置拥塞窗口cwnd=1.即设置一个最大报文段MSS。
    (2)随后,每收到一个对新报文段的确认后,拥塞窗口×2,即增加一个MSS的数值
    (3)用这种方法逐步增大发送段的拥塞窗口cwnd,可以使分组诸如到网络的速率更加合理(慢开始并不慢)
    (4)sstresh门限值:
            i. 当 cwnd < sstresh 时,使用慢开始算法
            ii. 当 cwnd >= sstresh 时,使用拥塞避免算法:每次只增加一个MSS
    (5)无论在慢开始还是在拥塞阶段,只要发送方出现拥塞(其根据是没有按时收到确认),就把慢开始门限sstresh设置为出现拥塞时的发送方窗口值的一半,然后把拥塞窗口cwnd的值设为1,执行慢开始算法。

  4. 快重传,快恢复算法
    (1)当发送端连续收到三个重复的确认帧时,就执行“乘法减小”,把慢开始的ssthresh减半,但并不是把拥塞窗口设置为1.因为发送方现在认为网络很可能还没发生拥塞,因此现在不执行慢开始算法,即拥塞窗口cwnd的值设置为慢开始门限sstresh的一半,然后执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢的线性增大。
    (2)发送窗口的值为 Min { cwnd , rwnd }

原文地址:https://www.cnblogs.com/moonlord/p/5944202.html