• 运输层


     进程之间的通信,在IP层,进行通信的就是两个主机,而在运输层,进行通信的却是两个进程,这就涉及到运输层的一个复用和分用的问题了,也就是发送方将不同的进程都用一个运输层协议传送数据,而分用是指将一个协议数据分出来给各个进程使用;
    运输层还要对收到的报文进行差错检测:两种不同的运输协议,无连接的UDP和有连接的TCP;
    UDP和TCP的区别:
        我们知道,在网络层,都是不可靠的传输,但是在运输层,有连接的TCP是一条可靠的全双工信道,而无连接的UDP依然是一条不可靠信道;
        运输层的两个协议:
    用户数据报协议(UDP);传输控制协议(TCP);
    两个对等运输实体在通信时传送的数据单位叫做运输协议数据单元;
    UDP在建立之前不需要建立连接;
    TCP提供面向连接的服务;
    在主机上的多种进程中,我们要如何去识别我们要用哪个进程呢?这就要用到端口的知;
    端口具有本地性,只有本地意义,不同的计算机上是可以有同样的端口的;
    端口分为两类;
        服务器端使用的端口号;客户端使用的端口号;
        服务器端:这是一些常用的服务器端口号;如FTP:21;HTTP:80;
        客户端:(短暂端口号)通信结束之后,就可以给其他进程用了;
    用户数据报协议UDP;
        特点:无连接;尽最大努力交付;面向报文;没有拥塞控制;支持1对1,1对多,多对1和多对多的交互通信;UDP的首部开销小;
    传输控制协议TCP:
    主要特点:面向连接;只能有两个端口,只能是点对点;支持可靠交付的服务;提供全双工通信;面向字节流;
        其中提供全双工通行的意思是指:TCP允许通信双方的应用进程在任何时候都能发送数据,TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双向通信的数据;
    套接字:即端口号加上IP地址即为套接字;
    同一个IP地址可以有多个不通过的TCP连接,而通过一个端口号可以出现在多个不同的TCP连接中;
    可靠运输的工作原理;
        在理解可靠运输之前, 我们先了解一下什么是不可靠运输;即,传输信道产生差错,不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据;
    停止等待协议;
        概念:发送一个分组之后就停止发送,等待对方的确认,在收到确认之后再发送下一个分组;
        超时重传:发送方只要过了一段时间没有收到确认,就认为刚才发送的分组丢失了,重传前面发送的分组;
        停止等待协议:发送方每发送一个分组,就进入超时重传状态,收到确认之后就撤销,然后再发送下一个分组;
    注意三点:
        1,A在发送出去之后,必须先保留一份副本;
        2,分组和确认分组都必须进行编号;
        3,超时计时器应该比数据在分组中传输的往返时间更长一些;
    确认丢失和确认迟到:
    现在就有一种情况,B在收到
        1,丢失这个重复的分组M1,不向上层交付;
        2,向A发送确认,
     信道利用率:
        一般来说,使用停止等待协议比较简单,当缺点就是信道利用率太低了,所以我们使用了更高效的传输,流水线传输,由发送发连续发送多个分组,不必等收到确认之后在发送;
    而使用流水线传输,就要使用连续ARQ协议和滑动窗口协议 ;
        对于连续ARQ协议来说;
        发送方:每收到一个分组,就把发送窗口向前滑动一个窗口,实现分组,
        接收方:不必对收到的分组逐个发送确认,采用累积确认的方式,对按序到达的最后一个分组发送确认;
        TCP报文段的首部格式:
            确认ACK:仅当ACK=1时确认号字段才有效;当ACK=0,确认号无效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置1;
            同步SYN:在连接建立时用来同步序号,当SYN=1而ACK=0时,表明这是一个连接请求字段,对方若同意 建立连接,则应在响应的报文中使SYN =1和ACK=1.因此,把SYN置为1就表示这是一个连接请求或连接接受报文;
    终止FIN:用来释放一个连接,当FIN=1时,表明此报文段的发送方的数据已发送完毕;并要求释放运输连接;
    这个时候,我们就要讨论一下三次握手,四次分手;
    三次握手来建立连接,
        首先:男方先发出SYN= 1,提出牵手的询问;
        然后:女方回应SYN=1,ACK=1;也就是说我同意你的牵手啦,并向男方的伸出了一双手;
        最后:男方回应ACK=1,牵手成功啦~~~
    四次分手来释放连接,(比较复杂一点)
        男方:发出FIN,提出分手,进入FIN-WAIT-1状态;男方提出了分手,并做好了被骂的准备;
        女方:发送ACK=1,把该发的数据发完,敲里妈,渣男什么都发送过去;
        男方:打不还手,骂不还口;进入FIN-WAIT-2状态;
        女方:发送FIN =1,ACK=1,好了,我已经知道了,记住是我先甩了你。。
        男方:发送ACK=1,好吧,我已经知道你甩了我了,我就等等,看你会不会想不开什么的。。。
                    进入LAST-ACK(最后确认阶段)
        女方:挂了电话。。。
        男方:等了十分钟后,确定对方没死,又去牵手下一个了。。。
    注意:窗口字段明确指出了现在允许对方发送的数据量,窗口值司经常在动态变化着;
    TCP可靠传输的实现;
        A方的发送窗口:在没有收到B的确认情况下,A可以连续把窗口的数据都发送出去,凡是已经发送过的数据,在没有收到确认之前都进行副本备份;
        发送窗口的后面表示已经发送且收到了确认,窗口前面表示还没发送的数据;
    在窗口的里面,前半部分表示允许发送但还没发送的数据,后半部分表示已经发送但还没收到确认的数据;
        对于发送窗口中的数据,如果没有按序到达的情况出现,怎么办?
            对于接收方,对于没有按序到达的数据,就只按照收到的数据的最高序号给出确认,向发送方再次索取,如果收到了正确的数据,就把原来的清空掉,然后再填入正确的数据;
        如何判断收到的确认报文是最先发送的报文段的确认,还是后来重传的报文段的确认?
    因为确认是最先发送的,还是重传的确认,对于超时重传的时间选择是非常重要的;
        所以提出这样的规定,对于重传的报文段,就不采用其往返时间样本;
    TCP的流量控制;
        所谓流量控制,就是让发送方的发送速率不要太快,要让接收方来得及接受;
    让发送方的发送窗口不能超过接收方给出的接受窗口的数值;
    TCP的拥塞控制:
        拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载;是一个全局的过程,而流量控制,往往指点对点通信量的控制,是个端到端的问题,解决的是一条线的问题,而拥塞控制是解决一张网的问题;
        几种拥塞控制的方法:慢开始,拥塞避免,快重传,快恢复;
            发送方让自己的发送窗口等于拥塞窗口;
            发送方控制拥塞窗口的原则:只要没有拥塞,就把发送窗口扩大,出现拥塞, 拥塞窗口就减小;
        慢开始算法:一开始发送端口(cwnd)只有一个1个单位,在收到确认之后,就加1,变成两个单位,发送两个报文,再次收到确认后,就加2,发送四个报文了;就这样指数倍地加上去。。。
        这里的慢并不是指增长速度慢,而是一开始的时候是以1个单位作为开始的。
        对比拥塞避免算法:每次收到确认,就把拥塞窗口加1,不是呈指数倍增加,而是呈现线性增长,这就是拥塞避免算法,这样做,绝壁是可以避免拥塞的了。。。
        满开始和拥塞避免算法的实现举例;
        一开始,先用慢开始,升到sshresh(慢开始门限)的初始值之后,就使用拥塞避免算法,做线性增长,然后出现了网络拥塞之后,把sshresh的值设置为除以2的值,来做为新的sshresh的值,然后再用慢开始,重新来过。
        这里涉及到一个乘法减小和加法增大;
        快重传和快恢复:
    快恢复算法:
        区别之处在于:在出现了拥塞之后,不是将ssthresh的初始值设为0,而是将sstresh的值设置为原ssthresh的值的一半,然后开始执行的是拥塞算法,即线性增强;
        所以,从前的那个拥塞之后就把ssthresh的值设置为0,然后在重新开始的版本已经淘汰不用了,而是将ssthresh的值减半,然后直接用线性增长的方式;
        记得:发送方的发送窗口一定不能超过对方给出的接受窗口值rwnd;
        
            
     
        
        
        
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    类的再理解
    关于网络配置和zmp以及json
    PCL 库安装
    Ros学习注意点
    Ros集成开发环境配置
    《TCP/IP详解卷1:协议》第3章 IP:网际协议(1)-读书笔记
    《Effective C++》第1章 让自己习惯C++-读书笔记
    《TCP/IP详解卷1:协议》第2章 链路层-读书笔记
    《TCP/IP详解卷1:协议》第1章 概述-读书笔记
    C++内存分配与对象构造的分离
  • 原文地址:https://www.cnblogs.com/zxx123/p/9242483.html
Copyright © 2020-2023  润新知