《计算机网络:自顶向下方法》笔记:03.运输层

本章思维导图

暂无

一、概述和运输层服务

运输层在端系统中实现进程到进程之间的传输,发送端将应用层报文转换成报文段(实现的方法是:将应用报文划分为较小的块,并为每块加上一个运输层首部)随后运输层将报文段传递给网络层,网络层(比如路由器)不关心运输层的报文段。接收端网络层抽取传输层报文段,并将其交给传输层,传输层接收到报文段后,使该报文段中的数据被接收进程所使用。

运输层协议能提供的服务常常受制于底层网络层协议的服务类型,然而即使底层网络协议不能在网络层提供响应的服务,运输层协议也能提供某些服务。例如,即使底层网络协议是不可靠的,运输协议也能为应用程序提供可抗的数据传输服务。

因特网有两种传输层协议:

  • TCP(传输控制协议):可靠、面向连接
  • UDP(用户数据报协议)不可靠、无连接

二、多路复用与多路分解

一个进程有一个或多个套接字( socket),运输层并没有直接将数据交给进程,而是交给一个中间的套接字。接收主机上可能有不止一个套接字,所以每个套接字都有唯一的标识符。标识符的格式取决于它是UDP还是TCP套接字。那么运输层的数据是如何定向到具体进程的?即通过多路复用和分解

多路复用:源主机上,运输层从不同套接字中收集数据块,并为每个数据块封装上首部信息生成报文段,然后将报文段传递到网络层。

多路分解:接收主机上,运输层检查报文段的字段,标识出接收套接字,进而将报文段定向到该套接字。(将运输层报文段中的数据交付到正确的套接字)

多路复用的要求:

  • 套接字有唯一标识符
  • 每个报文段有特殊字段来指示该报文段所要交付到的套接字

上述特殊字段(32bit)的组成:源端口号(16bit))+目的端口号(16bit)

端口号是一个16比特的数,其大小在065535之间。01023范围的端口号称为周知端口号,是受限制的,这是指它们保留给诸如HTTP (80)和FTP(21)之类的周知应用层。1024-65535端口号给其他应用。

所以整个运输层传递过程是:传输层给主机上的每个套接字分配一个端口号,当报文段到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字。然后报文段中的数据通过套接字进入其所连接的进程。

源端口号在作为报文段返回发送时,将转化为新的目的端口号。

1. 无连接(UDP)的多路复用与多路分解

一个UDP套接字是由一个二元组标识的(本地IP地址,本地端口号)。注意与多路复用的报文段特殊字段区分开

如果两个UDP报文段有不同的源IP地址或者源端口号,但是有相同的目的IP和目的端口号,它们将通过同一个套接字到达同一个应用程序

2. 面向连接(TCP)的多路复用与多路分解

一个TCP套接字是由一个四元组标识的(源IP地址,源端口号,目的IP地址,目的端口号)。注意与UDP套接字区分开。主机使用全部4个值来将报文段定向到相应的套接字。TCP是面向连接的,它需要将源IP地址和和源端口号与目的IP地址和目的端口号绑定。

TCP和UDP的socket差别可以用快递来类比,TCP类比为你和一个人经常互寄快递(建立了连接),顺丰上已经保存了你和对方的姓名和地址,每次寄东西时候,选择这个信息就可以,对应到TCP socket则应该是一个代表了四元组的整数。而UDP可以类比为你寄件给一个陌生人(没有建立连接),顺丰上只有你自己的姓名和地址,对应到socket则是一个代表了二元组的整数但当你要寄给他时,必须要写上他的姓名和地址

如果两个TCP报文段有不同的源IP地址或者源端口号,但有相同的目的IP地址和目的端口号,将通过两个不同的套接字进入同一应用进程。即一个应用进程可以关联多个Socket,而一个Socket将只关联一个应用进程

往往这样的对应关系是通过线程来实现的:在高性能Web服务器中通常只使用一个进程,但是为每个连接创建了一个线程每个线程关联一个Socket,这样可以允许许多套接字连接到相同的进程,进而提高服务器性能

三、无连接运输:UDP

四、可靠数据传输原理

五、面向连接的运输:TCP

六、拥塞控制原理

七、TCP 拥塞控制


《计算机网络:自顶向下方法》笔记:03.运输层
http://jswanyu.github.io/2022/04/05/Network/《计算机网络:自顶向下方法》笔记:03.运输层/
作者
万宇
发布于
2022年4月5日
许可协议