zoukankan      html  css  js  c++  java
  • 网络(五) 传输层

    第五章 传输层

    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 }

  • 相关阅读:
    转:高层游戏引擎——基于OGRE所实现的高层游戏引擎框架
    转: Orz是一个基于Ogre思想的游戏开发架构
    转:Ogre源代码浅析——脚本及其解析(一)
    IntelliJ IDEA添加过滤文件或目录
    为什么要使用ConcurrentHashMap
    volatile关键字解析
    Spring Boot MyBatis 通用Mapper 自动生成代码
    使用mysql乐观锁解决并发问题
    使用Redis分布式锁处理并发,解决超卖问题
    浅析 pagehelper 分页
  • 原文地址:https://www.cnblogs.com/moonlord/p/5944202.html
Copyright © 2011-2022 走看看