• (王道考研计算机网络)第五章传输层-第一节:传输层概述、功能和端口


    一:传输层

    (1)传输层概述

    传输层位于网络层之上,主要功能是为运行在不同主机上的进程之间提供逻辑通信,同时传输层向它上面的应用层提供通信服务。不管是考试还是面试,传输层历来都是整个计算机网络中核心中的核心,所以对于传输层的学习大家一定要上心。同时传输层还会涉及套接字(socket)编程(网络编程),所以大家可以结合下面的专栏进行学习

    在这里插入图片描述

    如下,两台主机使用网络核心部分的功能进行端到端通信,只有主机的协议栈才有传输层和应用层,而像路由器等只会用到下三层

    在这里插入图片描述

    (2)传输层功能

    ①:提供进程与进程之间的逻辑通信(即端到端):与网络层的区别是,网络层提供的是主机之间的逻辑通信

    • 从网络层来说,通信的双方是两台主机,IP 数据报的首部给出了这两台主机的IP地址。但“两台主机之间的通信”实际上是两台主机中的应用进程之间的通信,应用进程之间的通信又称端到端的逻辑通信
    • 这里“逻辑通信”的意思是:传输层之间的通信好像是沿水平方向传送数据,但事实上这两个传输层之间并没有一条水平方向的物理连接

    ②:复用和分用

    • 复用:发送方不同的应用进程都可使用同一个传输层协议传送数据
    • 分用接收方的传输层在剥去报文的首部后能够把这些数据正确交付到目的应用进程

    ③:差错检测

    • 传输层还要对收到的报文进行差错检测(首部和数据部分)
    • 而网络层只检查数据报的首部,不检验数据部分是否出错

    ④:传输层两大协议

    • 面向连接的传输控制协议TCP:传送数据之前必须建立连接,数据传送结束后要释放连接不提供广播或多播服务。由于TCP要提供可靠的面向连接的传输服务,因此不可避免增加了许多开销,例如确认、流量控制、计时器及连接管理等;特点是可靠,面向连接,时延大,适用于大文件

    • 无连接的用户数据报协议UDP :传送数据之前不需要建立连接,收到UDP报文后也不需要给出任何确认;特点是不可靠,无连接,时延小,适用于小文件

    二:传输层的寻址与端口

    (1)端口的作用

    端口:够让应用层的各种应用进程将其数据通过端口向下交付给传输层,以及让传输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。端口是传输层服务访问点(TSAP),其在传输层的作用类似于IP地址在网络层的作用或MAC地址在数据链路层的作用,区别在于IP地址和MAC地址标识的是主机,而端口标识的是主机中的应用进程

    (2)端口号

    端口号:应用进程通过端口号进行标识,端口号长度为16bit,能够表示65536(216)个不同的端口号。端口号只具有本地意义,即端口号只标识本计算机应用层中的各进程,在因特网中不同计算机的相同端口号是没有联系的。根据端口号范围可将端口分为两类:

    • 服务端端口号:分为熟知端口号(0~1023)登记端口号(1024~49151)
      在这里插入图片描述
    • 客户端使用端口号:数值为49152~65535;这类端口号仅在客户进程运行时才动态选择,通信结束后,刚用过的客户端口号就
      不复存在,从而这个端口号就可供其他客户进程使用。

    (3)套接字(Socket)

    套接字英文愿意为插座,孔的意思,但是这里却把它翻译为“套接字”,是在让人不太理解。

    在Linux系统编程中我们知道,如果想要把内容打印到屏幕上,或者写入到硬盘中,就必然要借助系统调用接口,或者称其为“陷入内核
    在这里插入图片描述
    那么现在到了网络了,我们要借助网络实现不同主机的进程相互通信,根据TCP/IP分层模型,可以看到我们绝大部分能做的操作都在应用层,传输层开始以下均属于操作系统。
    在这里插入图片描述
    当网卡收到数据后,不断向上分用,最后通过应用层拿到自己的数据,其中传输层属于操作系统,这也就意味着想要处理数据就必须要明白TCP/IP的协议操作和相关复杂的系统调用接口,这很显然使很繁琐的。

    同时前文说过,IP地址+端口号可以标识全网唯一的一个进程,所在在标识好进程后,我们熟知的socket就是把TCP/IP层复杂的操作抽象为了几个简单的接口以供应用层调用,以此来实现进程通信。
    在这里插入图片描述

    因此socket是介于应用层和传输层之间的一个抽象层,或者称他为一种通信机制。套接字以上的进程是受应用程序控制的,其以下的传输层协议则是受操作系统控制。因此,只要应用程序使用TCP/IP协议进行通信,它就必须要通过套接字与操作系统进行交互。所以对于开发者来说,他只需要关心这层抽象层,不需要关系传输层复杂的操作,当然它所能操作的权限或者范围就没有TCP/IP直接操作的范围大了。如socket不可以选择某些传输层的参数(比如最大缓存空间和最大报文长度等等)
    在这里插入图片描述

    所以服务器就像一个大插排,包含很多插座,客户端就是像一个插头,每一个进程代表一条电线,客户端将电线的插头插到服务器插排上对应的插座上,就可以开始通信了。
    在这里插入图片描述
    套接字是应用程序为了获得网络通信服务而与操作系统进行交互时使用的一种机制: 当应用程序需要使用网络进行通信时,必须首先发出socket系统调用,请求操作系统为其创建一个套接字。此调用的实际效果是请求操作系统把网络通信中所需的一些系统资源(比如CPU时间,网络带宽等),分配给该程序。操作系统用套接字描述符(实则是一个小的整数)来表示这些资源的总和,然后该套接字描述符会返回给该进程,此后应用程序所有的网络操作(比如收发数据)都要使用这个套接字描述符(就像用open打开文件获得的一个文件描述符,然后writeread都要使用到这个描述符)。在处理系统调用的时候,通过套接字描述符,操作系统就可以识别出应该使用哪些资源来完成应用程序所请求的服务。通信结束后,会调用close系统调用让操作系统回收与该套接字相关的所有资源。在这里插入图片描述

  • 相关阅读:
    kafka安装部署详解
    事件修饰符
    230908-MetaGPT构建专属AI Agent的技术实践-视频笔记
    【Leetcode】题目解析索引表
    Docker的自定义镜像
    Java#16(包装类和集合练习)
    sass和scss 有何区别?
    使用xmake配合arm-none-eabi-gcc构建stm32工程
    网络安全(黑客)自学
    mybatis-plus的多数据源sql拦截&动态表名
  • 原文地址:https://blog.csdn.net/qq_39183034/article/details/125520783