梳理一下计算机网络

引言

​ 感觉自己在这块内容里学了很多,也了解了很多,有了大概的知识框架。虽然这篇文章说是讲传输层TCP和UDP相关的东西,但是后面可能还会涉及到一些HTTP相关的内容,其他的也说不定,看面试会问什么就写什么好了。文风极其随意。

什么是传输层

​ 传统的TCP/IP五层模型将网络传输划分为五个层次(阶段),分别是:

应用层:供程序设计者使用,提供一系列抽象好的用于网络传输的功能,如HTTP(HyperText Transport Protocol 超文本传输协议)、FTP(File Transport Protocol 文件传输协议)等。

传输层:连接网络层和应用层,使用来自网络层的服务对应用层的数据进行打包,一般常见的主流协议就两种,UDP(User Datagram Protocol 用户数据报协议)和TCP(Transport Control Protocol 传输控制协议),这里主要讲的就是传输层

网络层:负责路由以及把分组报文发送给目标网络或主机。

数据链路层和物理层:把报文发送出去的)

这里重点讲的是传输层,因为面试出现的次数会很多,是重点考察内容,相对而言,从网络层到物理层这些我们都不考虑讲的原因也是因为不考。

传输层的作用

​ 传输层作为利用网络层为应用层提供服务的层次,它提供了一种进程到进程的逻辑连接。

​ 虽然一个实际的数据包传输要经过TCP/IP模型的五层,跋山涉水之后才能到达目标计算机上;但是这种物理链接是被屏蔽的,用户需要关注的只是由传输层所提供的抽象出来的逻辑连接。它假设源主机和目标主机的传输层之间存在有一条直连的逻辑连接,两台主机之间可以通过这条逻辑连接直接向对方交换数据,不需要自己动手考虑数据包是如何被路由、被编解码的,省心很多。

传输层基础知识扫盲

​ 为了了解传输层两大传输协议TCP和UDP是如何工作的,我们需要先了解一些基本的概念,为接下来详细铺开了解TCP和UDP奠定基础。

套接字

​ 传输层是为应用层提供服务的,应用层在计算机上的具体实现即是一个程序,也是一条进程。我们要为应用层提供服务,首先就要知道我们是为谁提供服务。基于以上的目的,我们使用套接字(Socket)来定义一台主机上的某个应用程序或进程。例如下面这个指向本地计算机8080进程的套接字

localhost:8080

一段套接字可以根据半角的冒号分为前后两段。前面一段定义了主机在网络中的地址,可以用域名经DNS解析为地址,也可以直接写IP地址;后面一段定义了主机中的进程的端口号,是一个0~ 2 16 2^{16} 216的整数,根据你的实际需要填写对应进程的端口号。有了这些,我们就可以定位网络中任意两个正在运行的进程并且连接他们进行数据传输了。

封装和解封装

​ 传输层为了实现自己的功能,包括但不限于指定源主机和目标主机、流量控制、差错控制、拥塞控制等,会将一些必要的信息添加在用户数据的头部。添加信息的过程我们称之为封装,通常发生在信息将被发送前;删除信息的过程我们称之为解封装,通常发生在将用户数据转发给用户进程前。

多路复用和多路分解

​ 一台电脑可以同时运行多个程序,也必然会存在多个需要网络通信的进程,但是我们的传输层只有一个。为了同时为多个应用层服务提供传输层的服务,传输层可以同时接收来自多个数据源的数据,并且将它们打包发送给网络层,我们称之为多路复用;反之,从网络层接收数据并且将它们分发给多个不同的应用层服务我们称之为多路分解。

流量控制

​ 现实总是很残酷,计算机的处理速度不可能是光速,总会存在一个速度的上限,网络传输也是如此。由于源主机数据生产速率和目标主机数据消耗速率的差异,在网络传输中会出现两种情况:

  1. 源主机数据发送速率跟不上目标主机数据消耗速率,导致目标主机出现空载的情况
  2. 目标主机数据消耗速率跟不上源主机数据发送速率,导致目标主机出现过载的情况

​ 对于第一种情况我们其实不需要担心,顶多只是网络利用率不高而已,没有什么实际上的影响,但是第二种情况导致的目标主机满载可能会严重影响任务处理的速率。为了解决第二种情况,我们需要实现流量控制来控制源主机的数据发送速率,以期望匹配上目标主机的数据消耗速率从而达到供需平衡。流量控制的实现粗略包含了以下几个方面。

推或拉

​ 在数据传输的过程中,接收方和发送方之间的数据交换方式类型可以大致分为推和拉两种。推即是接收方没有请求的情况下发送数据,而拉则是接收方在请求之后发送数据,前者是我们需要进行流量控制的对象

缓冲区

​ 实现缓冲区是我们进行流量控制的一种基本手段。数据在被生产或者接受之后并不会立刻发送到它的目的地(源主机传输层和目标主机传输层或应用层应用),而是会被先存放在缓冲区中,默默等待轮到自己被拉取。期间缓冲区的可用大小会随着数据的存取而变化,当缓冲区满了之后,接收方便不会再接收新的数据,直到一定量的数据(可能是一个单位或者是好几个单位,取决于具体的实现)被拉取出去留出一定的空间后,接收方才会再重新接收新的数据。

差错控制

​ 不光数据处理速度没那么理想,就连传输质量都和阿尔法罗密欧的品控一样不靠谱。在互联网中,数据的传输总是会因为这样那样的原因,要么可能丢了,要么来晚了导致数据的顺序颠倒了,要么原有数据变了,总之会出千奇百怪的幺蛾子。为了处理这些错误的情况,我们提出了差错控制的思想。差错控制所负责的内容主要包括了以下几个方面

  • 找出并丢弃损坏的分组

  • 记录丢弃和丢失的分组并等待重传

  • 识别重复的分组

  • 缓冲失序的分组,等待丢失的分组被重传

以上内容构成了差错控制的主体,为了实现它,我们需要提出一些新的概念

序号

​ 为了得知分组是否失序、丢失,我们需要对我们需要发送的分组进行编号,有了序号之后,接收方就可以知道以上情况的发生,从而做出相应的反应来进行处理。

序号的范围取决于具体实现所分配给序号的二进制位数,处于0~ 2 m 2^{m} 2m之间(m为序号在传输层分组头部所占用的位数&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值