• 计网:传输层


    传输层

    传输层的功能

    1、传输层提供进程与进程之间的逻辑通信

    2、复用分用

    为什么要有复用和分用?

    两台主机的通信是就是主机内的进程在相互通信,也就是说端到端的通信就是应用进程在通信。

    在一台主机中经常有许多进程同时分别与另一台主机内的多个进程通信 换句话说:

    当用户很多,而资源不足的时候,我们就会重复使用并且彼此分享。

    这里一个进程可以叫做 “一个用户

    多个用户使用一个IO资源 发送消息 时,我们称之为“复用”。
        指发送方不同的进程都可以使用同一个运输协议传送数据【需要加上合适的首部】
    多个用户使用一个IO资源 接收消息 时,我们称之为 “分用” 
        指接收方的运输层在剥去报文首部后能够把这些数据正确的交付目的进程 

    故可以看出,网络层为主机之间提供逻辑通信,而运输层为进程之间提供端到端的逻辑通信

    在网络层

    局域网内多个主机利用一个路由网关发送消息给互联网的其他主机。这也是复用技术。

    同理,利用网关接收路由数据报就叫 分用技术。

    在运输层

    操作系统的 多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)发送数据称为复用

    同理,接收时叫做 分用

    在应用层

    操作系统的 多个线程 利用一个端口(或者叫socket,socket = IP+端口号 )发送消息称为“”复用“”(有一个技术名词“IO多路复用”讲着的大概就是这个意思)

    同理,接收时叫分用

    3、传输层对收到的报文进行差错检测

    4、传输层的两种协议  TCP 和 UDP

    传输层寻址与端口

    端口:逻辑端口/软件端口,是传输层的SAP,标识主机中的应用进程

    端口号:长度为16bit ,能表示65536个不同的端口号

     

    套接字

    在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程

    TCP协议

    面向连接的传输控制协议  

    传送数据之前必须建立连接,数据传送结束时要释放连接;不提供广播或多播服务;由于TCP要提供可靠的面向连接的传输服务,因此增加了许多开销

    特点

    1、面向连接(虚连接)

    2、点对点

    3、可靠交付:不丢不重

    4、提供全双工信道

      发送缓存:准备发送的数据和已经发送但尚未收到确认的数据

      接收数据:按序到达但尚未接受应用程序读取的数据和不接受到达的数据

    5、面向字节流 :TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流 

    TCP报文首部格式

    序号:在一个TCP链接装传送的字节流中的每一个字节都按顺序编号,本字段标识本报文段所发送数据的第一个字节的序号

    确认号期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表示到序号N-1为止的所有数据都已经正确收到

    数据偏移:首部长度

    控制位:

    1、 

    2、 

    3、

    4、

    5、

    6、

    窗口: 发送本报文端的一方的接收窗口,即现在允许对方发送的数据量

    检验和:检验首部+数据,讲演时要加上12B的伪首部,第四字段为6

    紧急指针:URG= 1时才有意义,指出本报文段中紧急数据的字节数

    TCP的连接建立  【三次握手】

    1、客户端发送连接请求报文段,无应用层数据【客户端向服务器端发送一个同步数据包请求建立连接,该数据包中,初始序列号(seq)是客户端随机产生对的一个值,例如x,确认号(ack)是0】

    SYN = 1、seq = x(随机),ack = 0

    2、服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据 【服务器端收到这个同步请求数据包后,会对客户端进行一个同步确认,这个数据包中,序列号是服务器随机产生一个值,例如y,确认号是客户端的初始序列号+1】

    SYN = 1、ACK = 1、seq = x(随机)、ack = x + 1

    3、客户端为该TCP连接分配缓存和变量、并向服务器端返回确认的确认,可以携带数据【客户端收到这个同步确认数据包后,再对服务器进行一个确认,该数据包中,序列号是上一个同步请求数据包中的确认号,确认号是服务器的初始序列号+1】

    SYN = 0、ACK = 1、seq = x + 1、ack = y + 1

    SYN洪泛攻击

    TCP的连接释放  【四次握手】

    1、客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接

    FIN = 1,seq = u

    2、 服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了【半关闭状态

    ACK = 1、seq = v ,ack = u + 1

    3、服务器端发送完数据,就发送连接释放报文端,主动关闭TCP连接

    FIN = 1、ACK = 1、seq = w,ack = u + 1

    4、客户端回送一个确认报文段、再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭

    ACK = 1、seq = u + 1 ,ack = w + 1

    TCP可靠传输

    可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的

    TCP实现可靠传输的机制

    1、校验

    与UDP校验一样,增加伪首部

    2、序号

    3、确认

    4、重传

    确认重传不分家,TCP的发送方在规定的时间  【重传时间】内没有收到确认就要重传已发送的报文段  【超时重传

    TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)

    冗余ACK【冗余确认】

    TCP流量控制

    流量控制:发送方发的快,接收方来不及收

    TCP利用滑动窗口机制实现流量控制

    在通信过程中,接收方根据自己的接收缓存的大小,动态的调整发送方的发送窗口的大小,即接受窗口rwnd (接受方设置确认报文端的窗口字段来讲rwnd 通知给发送方)

    发送方的发送窗口 =  min(接收窗口rwnd ,拥塞窗口cwnd)

    实例:

    TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器

    若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值,可以进行重传

    若窗口依然为0,则发送方就重新设置持续计时器

    TCP拥塞控制

    出现拥塞条件:

      对资源需求的总和  > 可用资源

    导致:许多资源同时供应不足   ——> 网络性能变差 ——> 网络吞吐量将随输入负荷增大而增大

    拥塞控制:

    防止过多的数据注入到网络中 【全局性】

    拥塞控制的四种算法:

    假定:

    1、数据单方向发送,另一方只传送确认

    2、接收方总是有足够大的缓存空间,因而发送窗口的大小取决于拥塞程度

    发送方的发送窗口 =  min(接收窗口rwnd ,拥塞窗口cwnd)

    接受窗口:接收方根据接收缓存设置的值,并告知给发送方,反应接收方容量

    拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当中的容量 

    1、慢开始和拥塞避免

    一个传输轮次:发送一批报文段并收到他们的确认的时间   

    2、快重传和快恢复 

    UDP协议

    无连接的用户数据报协议

    传送数据之前不需要建立链接,收到UDP报文后也无需给出确认

    UDP在IP数据报服务上增加的功能:复用分用差错检测

    应用层给UDP多长的报文,就照样发送,一次发一个完整报文

    特点:

    1、不可靠:需要保证最大努力交付

    2、无连接:减少开销和发送数据之前的时延

    3、面向报文:适合一次性传输少量数据的网络应用

    4、无拥塞控制:适合很多实时应用

    5、首部开销小:8B 。TCP:20B

    UDP首部格式

     分用时,找不到对应的目的端口,就丢失报文,并给发送方,发送ICMP“端口不可达”的差错报告报文

    UDP校验

    伪首部只有在计算检验和时才出现,不向下传送也补向上递交

    UDP长度:UDP首部8B+数据部分长度(不包括伪首部)

    发送端:

    1、填上伪首部

    2、全0填充检验和字段

    3、全0填充数据部分

    4、伪首部+首部+数据部分采用二进制反码求和

    5、把和求反码填入检验和字段

    6、去掉伪首部,发送

    接收端:

    1、填上伪首部

    2、伪首部+首部+数据部分采用二进制反码求和

    3、结果全为1则无差错,否则丢弃数据报/交给应用层附上出差错的警告

  • 相关阅读:
    为什么一个字节可以表示的有符号整数的范围是-128~+127?
    redis入门指南(一) ——简介及入门相关
    C Primer Plus(二)
    lua程序设计(一)
    证明:S = 1 + 1/2 + 1/4 + 1/8 + 1/16 + ·······,求证 S = 2
    C Primer Plus (一)
    C语言打印年历
    Spring IoC 自定义标签解析
    CentOS 7 Nacos 集群搭建
    CentOS 7 Zookeeper 和 Kafka 集群搭建
  • 原文地址:https://www.cnblogs.com/pam-sh/p/12721285.html
Copyright © 2020-2023  润新知