zoukankan      html  css  js  c++  java
  • 计算机网络基础---运输层

    运输层

    概述:

    网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。

    传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,

    使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。

    网络层是为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。

    应用进程之间的通信:

    在一台主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。

     这表明运输层有一个很重要的功能——复用 (multiplexing)和分用 (demultiplexing)。

    两个主机进行通信实际上是两个主机中的应用进程通信

     应用进程间通信又称为端到端的通信

    运输层的一个很重要的功能就是复用和分用
    应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。

     TCP和UDP的特点

    1. 用户数据报协议UDP(User Datagram Protocol) [RFC 768]
    2. 传输控制协议TCP (Transmission Control Protocol) [RFC 793]

    UDP特点

    1. UDP是无连接的;
    2. UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
    3. UDP是面向报文的;
    4. UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等);
    5. UDP支持一对一、一对多、多对一和多对多的交互通信;

    UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

    (通过进程之间进行确认可靠)

    TCP特点

    1.TCP是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);

    2.每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);

    3.TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;

    4.TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;

    5.面向字节流。TCP中的“流”(stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

    套接字的概念

    UDP数据报格式

    首部字段只有 8 个字节,包括源端口、目的端口、长度、检验和。12 字节的伪首部是为了计算检验和临时添加的。 

    TCP数据报格式

    序号:seq

    用于对字节流进行编号,例如序号为 301,表示第一个字节的编号为 301,如果携带的数据长度为 100 字节,那么下一个报文段的序号应为 401

    确认号:(ack小写)

    期望收到的下一个报文段的序号。

    例如 B 正确收到 A 发送来的一个报文段,序号为 501,携带的数据长度为 200 字节,因此 B 期望下一个报文段的序号为 701,B 发送给 A 的确认报文段中确认号就为 701

    数据偏移:

    它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。“数据偏移”的单位是 32 位字(以 4 字节为计算单位)

    紧急URG:

    当URG=1表明紧急指针字段有效,他告诉接收方TCP次报文中有紧急数据,应该尽快交付给应用程序。(相当于高优先级的数据)

    例如用户发出中断命令ctrl+c需要立即执行

    确认ACK:

    当ACK=1时确认号字段才有效,当ACK=0时确认号无效。

    推送PSH(PUSH):

    接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付。  

    复位RST(reset):

    当 RST = 1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

    同步SYN:

    (用来建立连接)

    连接建立时用来同步序号。当 SYN=1,ACK=0 时表示这是一个连接请求报文段。若对方同意建立连接,则响应报文中 SYN=1,ACK=1。

    终止FIN(FINal):

    用来释放一个连接,当 FIN=1 时,表示此报文段的发送方的数据已发送完毕,并要求释放连接。

    窗口:

    窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

    选项:

    选项字段 —— 长度可变。TCP 最初只规定了一种选项,即最大报文段长度 MSSMSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节。” 

    MSS = TCP报文段长度 --  TCP首部长度

    为什么要规定MSS

    MSS 与接收窗口值没有关系。
    若选择较小的 MSS 长度,网络的利用率就降低。
    当 TCP 报文段只含有 1 字节的数据时,在 IP 层传输的数据报的开销至少有 40 字节(包括 TCP 报文段的首部和 IP 数据报的首部)。这样,对网络的利用率就不会超过 1/41。到了数据链路层还要加上一些开销。
    若 TCP 报文段非常长,那么在 IP 层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的 TCP 报文段。当传输出错时还要进行重传。这些也都会使开销增大。
    因此,MSS 应尽可能大些,只要在 IP 层传输时不需要再分片就行。
    由于 IP 数据报所经历的路径是动态变化的,因此在这条路径上确定的不需要分片的 MSS,如果改走另一条路径就可能需要进行分片。
    因此最佳的 MSS 是很难确定的。

    TCP的三次握手和四次挥手 重要:

    https://www.cnblogs.com/xiaokang01/p/10032377.html#_label1_0

    TCP是如何保证可靠传输的  重要:

    https://www.cnblogs.com/xiaokang01/p/10033267.html#_label0_1

     
  • 相关阅读:
    python操作pymysql
    使用raise语句抛出异常
    异常处理
    01.正太分布模型
    常用正则表达式总结(47条)
    Scrapy项目_苏宁图书信息
    Scrapy项目_阳光热线问政平台
    Scrapy 项目:腾讯招聘
    Python爬虫_糗事百科
    Python爬虫_百度贴吧(title、url、image_url)
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/10032129.html
Copyright © 2011-2022 走看看