前言
在这篇文章中,荔枝主要梳理了运输层与网络层之间的关系,以及报文段如何定向到对应的套接字上的。其实这本书叫自顶向下确实很贴切,从几个层级之间的关系来开讲,虽然有些地方写的比较模糊,但入门计算机网络还是远远足够的哈哈哈。
目录
1. 运输层与网络层的关系
运输层协议为运行在不同主机上的进程之间提供了逻辑通信服务;而网络层则是提供了主机之间的逻辑通信服务。我们在前面的学习中可以知道,运输层在协议栈中处于网络层的上方,其实两个主机之间进程上的应用程序之间的通信是基于网络层协议模型的服务来实现的。
运输层协议分类:
- TCP协议(传输控制协议)
为应用程序提供一种可靠的,面向连接的服务。TCP连接在开始数据传输之前需要进行握手,即在两个套接字之间建立一个TCP连接。通信进程可以依赖该TCP连接无差错、按次序交付所有的报文数据,同时TCP还提供了一种拥塞控制机制,既可以根据双方的网络拥塞程度来限制TCP连接。
- UDP协议(数据报协议)
为应用程序提供一种不可靠的,无连接的服务。UDP不提供不必要服务,仅提供最小服务,他不能保证报文的内容完整、次序一致,甚至可能会出现报文丢失。
两个端系统之间实现通信过程:
发送端:
运输层从发送应用程序进程接收到的报文转换成运输层分组,也可称为运输层报文段。运输层将这些报文段下发到给网络层,网络层将其封装成网络层分组(即数据报)并向目的端发送。
接收端:
网络层从接收到的网络层数据报中提取出运输层报文段并将其传递给运输层,运输层再将得到的报文段中的数据传递给应用进程使用。
需要注意的是:网络路由器仅作用于网络层分组,不会检查封装在数据报里面的运输层字段。
上述过程我们可以看一下这张图:
也就是说,其实运输层协议提供的服务受制于底层网络协议的服务模型。 这亦是协议栈中运输层和网络层之间的依赖关系。
2. 多路复用和多路分解
在前面的学习中,我们已经了解套接字接口是运输层和应用层之间的门户,一个进程有一个或者是多个套接字。也就是说,运输层会将接收到的运输层报文段中的数据通过套接字上发到该主机的应用层应用里面,那么如何把报文段定向到特定的套接字上呢?为此我们引入两个名词:多路分解和多路复用。
- 多路分解:将运输层报文段的数据交付到正确的套接字的过程
- 多路复用:从不同的套接字中获取数据块,并将其封装成报文段传递到网络层的过程
其实,运输层的报文段中有着特殊字段来定向到不同的套接字中——源端口字段和目的端口字段,同时,该特殊字段里面还有一种特殊的端口号:周知端口号。它们主要是保留该HTTP和FTP之类的周知应用层协议来使用。
无连接和有连接的多路分解和多路复用
无连接的多路分解和多路复用指的是创建了UDP套接字;而有连接的多路分解和多路复用则指的是创建了TCP套接字。其中UDP套接字是由一个二元组(目的IP地址、目的端口)来全面标识的,而TCP套接字则是用一个四元组(源IP、源端口、目的IP地址、目的端口)来全面标识的。其中TCP连接的多路分解可以实现通过不同的源IP、源端口、目的端口来对相同主机的不同进程或者是不同主机之间的进程进行区分,即使用四个值来将报文段定向到对应的套接字上,使得连接更为可靠。
总结
运输层其实挺好理解的,它的作用就像是班级里收作业的小组长,负责把作业收到讲台上给课代表,作业的具体内容就是应用数据咯,小组长的登记本就是运输层报文段,课代表就是网络层,课代表对老师说的话就是数据报,这样讲是不是很贴切嘻嘻嘻~~~在这篇文章中呢,荔枝个人主要还是得弄懂这三个层级之间的关系吧,多路复用和多路分解还是比较好理解的,前面应用层些TCP套接字的时候就基本弄清楚了对吧小伙伴们。
今朝已然成为过去,明日依然向往未来!我是小荔枝,在技术成长的路上与你相伴,码文不易,麻烦举起小爪爪点个赞吧哈哈哈。
谢谢大家的支持嘻嘻嘻~~~
比心心♥~~~