计算机网络 – 运输层
文章目录
运输层协议概述
进程之间的通信
-
什么是运输层?
网络层是解决主机与主机之间的通信,例如我的手机和你的手机之间的数据连通。但是手机中有微信,qq,王者荣耀,你一边更新王者荣耀一遍发微信,你的手机同时接收的数据包,怎么知道这些包是微信的还是王者的呢?这就是运输层做的事情:提供进程之间的通信。
-
和网络层以及应用层的关系?
运输层是提供一条进程之间的逻辑线路,让进程之间去通信,是比网络层更上层的协议。在路由转发中只涉及到网络层。同时运输层也是用户感知的最底层,他是直接和应用层进行连接。
运输层两个重要协议
-
概述
两个比较重要的协议。但是要注意和网络层的协议区分开。这里的协议指的是端对端的,是应用和主机端口之间的通信协议,而不是在路由转发中的协议。
-
UDP
用户数据报协议。无连接而且不可靠,因为受到数据报不需要回复。但是优点是开销小。
-
TCP
传输控制协议。面向连接且可靠的,但是缺点是开销比较大。而且连接的特性决定了不能进行广播和多播。
运输层的端口
-
什么是端口?
这个其实很好理解。因为运输层是应用程序和主机之间的逻辑通信,所以每个应用程序应该有一个标识,就像IP地址一样,不然怎么知道数据报给哪个应用呢。所以主机拿到数据报,解析一下端口号,例如80,然后就把数据给80这个端口,然后使用这个端口的应用程序就可以拿到数据了。但是有一个点是要注意的:端口是固定的但是应用程序是动态的,所以也就保证了应用程序不断切换,例如后台杀死重建啊什么的,但是依然可以接收到数据。只要使用同一个端口即可。
-
运输层端口和链路层的端口有什么区别?
运输层的端口是只有本都意义的,在互联网上没有任何意义。而链路层的路由器上面的端口是硬件端口,是不同设备之间的连接。而运输层的端口只是为了标识应用程序。
-
两大类端口
- 服务端使用的端口:服务端嘛,就是要稳定,不然一直换端口别人就受不了了。所以服务端的端口特点就是稳定,数值也比较少。
- 客户端的端口:数值比较大,但是不稳定,所以数量多。
用户数据报协议UDP
概述
-
UDP有什么作用:
UDP十分简单。我们知道,应用程序把数据报给到传输层,而UDP只是吧应用程序给的数据报加个头部就给网络层去转发了。头部主要是标记源端口和目的端口,以及检验正确性。
-
UDP的特点:
- 他是不可靠的。因为只是把数据加个头就发过去,也没有错误重发什么的。所以只是尽量交付,而不是可靠交付。
- UDP是无连接的。这个从他的工作原理可以看出来。
- UDP是面向报文的。UDP主要就是处理报文然后给网络层去转发。
- UDP没有拥塞控制。因为没有重发,也就不需要拥塞控制了。
但是
- UDP开销比较小。因为没有花里胡哨的工作。
- UDP的速度比较快,不用去创建连接直接就可以用了。
- UDP支持一对多或者多对多。
UDP头部
- 组成:三部分:源端口目的端口,长度和校验码
- 伪头部:用于创建检验码用的,伪头部主要是源IP地址,目的IP地址,协议字段值以及UDP的长度。
传输控制协议TCP概述
什么是TCP
这里只简单讲一下关于TCP的一些特点,具体的实现原理后面还有好多好多节去学习。简单来说,TCP是一个运输层的协议,他是面向连接的,和UDP不一样。TCP是建立一个连接,然后源源不断地发送数据过去。要注意的是这个连接是虚拟的,不是真实的物理连接。
TCP的特点
- 他是面向连接的
- 他是点对点的,不能一对多或者多对多等
- 他可以提供可靠交付
- 提供全双工通信(两边都可以互发信息)
- 面向字节流
什么是面向字节流
这个是TCP工作原理的重点,虽然不难,但是一定要懂。
TCP不是像UDP那样从用户那里拿数据报然后一个个发送,TCP是把这些数据看成流,在缓冲区合成一整块,然后根据网络状况,分割后加上TCP头部发送。所以说TCP是面向字节流的,因为他没有数据包的概念,用户的数据都看成流。这样的好处是TCP可以根据网络情况进行恰当地切割,防止拥塞。
TCP的连接
- TCP不是和UDP一样用端口作为点对象,而是使用socket也就是套接字为端点。套接字是什么?这个也很好理解,就是 IP+端口号。这个就可以唯一标识一个TCP连接了。
- TCP的连接是由软件所提供的一种抽象,不是真正真正真正的连接。
可靠传输的工作原理
怎样才是可靠的?
前面讲到TCP是可靠的,但是为什么TCP是可靠的?原理是什么?这一小节就比较详细地展开。这里要讲一个点,都说可靠可靠,那到底满足什么样的条件才是可靠的?
- 在网络传输的过程中不会出现数据的损坏或者丢失。
- 无论发送方用怎么样的速率去传输,接收方始终可以一直接受。
满足上述两个条件就可以实现可靠运输了。但是这两个条件和让你拿着一把刀去抢劫银行一样,看似好像很微妙,事实上就是吃太多作业太少成天幻想。所以我们要做的就是如何用协议去实现这样的特性,把不可靠的网络环境,实现可靠的数据传输。
停止等待协议
是什么?
- TCP对应用程序来的数据缓存后进行切割后,分成一个个数据报进行转发,每一个数据报转发给对方后就停下来,对方收到后就发送ACK告诉自己收到了,这个时候就可以发送第二个了。
- 如果发送的数据损坏了,或者数据在传输的时候人间蒸发了,这个时候对方什么也不做。自己就会等,等到一点时间没回复再继续发送一次,这就是超时重传。
- 如果对方给自己的确认ACK丢失或者迟到了了怎么办?自己还是按照超时重传再发一份,如果收到重复的数据就丢弃就行。对方收到重复的数据包也是直接丢弃。
- 当网络情况不好的时候,那么就会一直重发,达到一定的次数就说明当前网络不可用,停止发送。
自动重传请求:上述步骤自动完成就是ARQ自动重传请求。ARQ实现了在不可靠的网络上进行可靠的数据传输。
缺点
信道利用率很低。每次都要等,特别是网络状况不好的时候,效率会变得极低。
连续ARQ协议
为什么有这个协议?
我们可以发现就是前面的停止等待协议效率太慢了,傻傻的。一个发送出去了,没收到回复就是什么都不做,干等,所以我们可以改善这个情况。这里就要