计算机网络_传输层详解

来源:我的个人技术博客 www.shaoxiongdu.cn

计算机网络-传输层详解

一. 传输层概述

1. 进程之间的通信

运输层向上层【应用层】提供端到端的逻辑通信服务,即应用到应用的通信服务。只有两个主机之间的协议栈才会有传输层,网络核心部分中只用到下面的三层【网络层,数据链路层,物理层】

上述中逻辑通信的意思是:

运输层之间的通信好像是沿着水平方向传送数据,但事实上两个运输层之间没有水平方向的物理连接,需要按照虚线的方向多次传送。

如下图所示

image-20210508203306879

2.因特网的传输层协议

2.1 分类

因特网(一般是TCP/IP网络)为上层提供两个不同的传输层协议。

1. 用户数据报协议(User Datagram Protocol UDP协议)
2. 传输控制协议(Transmission Control Protocol TCP协议)
2.2 区别
TCP传输控制协议UDP用户数据报协议
可靠性可靠不可靠
连接性面向连接无连接
传输单位报文段用户数据报
效率
双工性全双工一对一,一对多,多对多
流量控制滑动窗口
拥塞控制满开始,拥塞避免,快重传,快恢复
优点保证传输质量可靠灵活、轻量、传输速度快
缺点传输速度慢不保证传输质量
适用场景用于在传输层有必要实现可靠传输的情况用于那些对高速传输和实时性有较高要求的通信或广播通信
2.3 应用

使用UDP和TCP协议的各种网络应用如下所示

应用应用层协议运输层协议
域名解析DNSUDP
文件传输TFTPUDP
IP地址配置DHCPUDP
网络管理SNMPUDP
远程文件服务器NFSUDP
多播IGMPUDP
电子邮件SMTPTCP
远程终端接入TELNETTCP
万维网HTTPTCP
文件传输FTPTCP

注: HTTP1.0和HTTP2.0使用TCP协议 HTTP3.0使用UDP协议

3.复用分用

3.1复用

复用指同一个发送端主机中的多个应用层使用同一个运输层协议传输数据。

3.2分用

分用指在同一个接收端主机传输层剥去报文的首部之后将数据正确的交付给目的应用程序

image-20210508211112082

3.3端口号
背景

复用和分用的前提是能够分辨同一个主机中不同的应用程序。在TCP/IP中,使用一种和操作系统无关的协议端口号。

概念

端口号用16位(2个字节)来表示,能表示的最大范围是0~65535.

分类
  1. 熟知端口

    0~1023 由因特网赋号管理局负责分配给一些常用的应用。

    部分端口如下

    应用程序FTPTELNETSMTPDNSTFTPHTTPSNMPSNMP(trap)
    端口号212325536980161162
  2. 登记端口

    1024~49151 可在IANA注册登记,防止重复使用。

  3. 动态端口

    49152~65535 由系统动态生成

二.用户数据报协议(UDP)

1.概述

  • 提供无连接服务

    ​ 发送数据之前不需要建立连接。因此减少了传输开销,降低了传输时延。

  • 最大努力交付

    ​ 不保证传输质量,即不保证可靠交付。

  • 无拥塞控制机制

    ​ 出现网络拥塞不会使源主机的发送速率降低,对某些实时应用很重要。比如IP电话,视频会议等。

  • 面向报文

    ​ 应用层交给一个报文,UDP就会将其发送出去。如果过大,底部的网络层会将其分片,会降低效果,如果过小,则降低了网络层的传输效率。

  • 支持一对一,一对多,多对多。

  • 首部8字节,比TCP协议的20个字节少。

2.首部格式

image-20210508211818918

UDP的首部共8个字节

  • 源端口,目标端口各2个字节。

  • 长度:UDP用户数据报的长度

  • 检验和:差错检测码,防止UDP用户数据报在传输中出错。

    如何计算检验和:

    1. 在UDP首部添加12个字节的伪首部,只是为了计算检验和,不向下传送也不向上递交。

    image-20210508212236040

    1. 将检验和字段置0
    2. 将伪首部,UDP首部,数据部分看成由许多16位的二进制,按二进制反码求和计算,将结果取反码写入检验和字段。
    3. 接收方将同样的多个16位二进制反码求和,如果无差错,则结果应是1.

关于伪首部

  • 源IP与目标IP各占4字节

  • 第三个字段固定0,占一个字节

  • 第四个字段为协议号,当协议为TCP时,此字段是6.

  • 第四个字段是UDP用户数据报的长度。

    这样的检验和,既检查了UDP用户数据报信息,又检查了IP地址。

三.传输控制协议(TCP)

1.TCP的特点

  • 面向连接

    ​ 在传输数据之前,会先建立连接。具体来说,数据收发双方的内存中都建立一个用于维护数据传输状态的对象,比如双方 IP 和端口是多少?现在发送了多少数据了?状态健康吗?传输速度如何?等。所以,连接是网络行为状态的记录。

  • 一对一

    ​ 建立连接之后,连接被通信两端的端点确定。

  • 全双工

    TCP 是一个双工协议,数据任何时候都可以双向传输。

  • 可靠交付

    ​ 由于发送数据之前建立了连接,并且接收端接收到数据之后会返回一个确认,所以TCP传输的数据是可以保证无差错,不丢失,不充分,有序到达的。

  • 面向字节流

    应用程序交给TCP的是大小不等的数据块,但是TCP会认为是一串无结构的字节流,TCP会取出特定大小的数据陆续写入TCP发送缓存中。

    image-20210508214454794

    为什么要这么处理呢?

    • 为了稳定性,一次发送的数据越多,出错的概率越大。

    • 为了效率,网络中有时候存在着并行的路径,拆分数据包就能更好地利用这些并行的路径。

    • 大量的应用频繁地通过网卡收发数据,这个时候,网卡只能一个一个处理应用的请求。当网卡忙不过来的时候,数据就需要排队,也就是将数据放入缓冲区。如果每个应用都随意发送很大的数据,可能导致其他应用实时性遭到破坏。

    因此,TCP会按照应用交给的数据块进行拆包和封包处理。

  • 拆包

    数据经过拆分,然后传输,然后在目的地重组,俗称拆包。

  • 封包

    如果发往一个目的地的多个数据太小了,为了防止多次发送占用资源,TCP 协议有可能将它们合并成一个 TCP 段发送,在目的地再还原成多个数据,这个过程俗称粘包。

2.TCP报文段格式

image-20210508215056259

TCP报文段首部的前20个字节是固定的,后面有4N个字节是根据需要增加的选项。

各字段含义如下

  • 源端口/目标端口

    各占2字节,用于传输层的复用和分用。

  • 序号

    占4字节,在发送数据时,TCP会为每一个字节的数据都按顺序编号,该字段表示这个TCP报文段中数据部分的第一个字节的序号。

  • 确认号

    占4字节, 期望收到对方的下一个报文段的第一个字节的序号。

  • 数据偏移

    占4位。单位是4字节。因此,最大值是2^4=15 TCP Header 部分的长度是可变的,因此需要一个数值来描述数据从哪个字节开始。

    也就是最大偏移为15*4=60个字节 即TCP首部的最大长度为60个字节。

  • 保留

    ​ 用于日后扩展能力。

  • 标志位 各占1位

    • URG 代表这是一个紧急数据,比如远程操作的时候,用户按下了 Ctrl+C,要求终止程序,这种请求需要紧急处理。
    • 确认ACK 代表响应,所有的消息都必须有 ACK,这是 TCP 协议确保稳定性的一环。只有此字段为1时,首部的确认号才有意义。
    • PSH 代表数据推送,也就是在传输数据的意思。出于效率的原因,TCP可能会延迟发送数据,这样可以一次处理多个数据。当此字段为1时,TCP不会等待,会立即发送。 现在TCP会根据情况自动设置此字段的值。不会交给应用处理。
    • RST 重置位,当连接中断时,将此置1,表示需要重新连接。
    • SYN 同步请求,也就是申请握手。用来建立一个连接。当SYN=1,ACK=0时,表示是一个连接请求。当SYN=1,ACK=1时,表示是一个接收方同意连接的响应。
  • 窗口

    ​ 占2字节。表示发送端的接收窗口的大小,用来控制对方发送的数据量。单位是字节。 计算机网络经常用接收方的窗口大小来控制自己的数据发送量。

  • 检验和

    2字节。和UDP一样,会加上伪首部然后计算。此时,伪首部中的协议字段应该是6.长度应该是TCP报文段的长度。

  • 紧急指针

    ​ 指向最后一个紧急数据的序号(Sequence Number)。它存在的原因是:有时候紧急数据是连续的很多个段,所以需要提前告诉接收方进行准备。

  • 选项

    ​ Options 中存储了一些可选字段,比如MSS。表示发送方的缓存能接受的报文段的最大长度是MSS个字节。它是一个协商字段(Negotiate)。协议是双方都要遵循的标准,因此配置往往不能由单方决定,需要双方协商。过大,接收方会拒绝,并且会占用网络资源。过小那头部的数据占比会上升,会浪费传输资源,降低吞吐量。

  • 填充

    ​ 因为 Options 的长度不固定,需要 Pading 进行对齐。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员阿杜吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值