运输层解决的问题
运输层解决的问题是,数据传输的问题。数据传输分为不可靠传输和可靠数据传输,分别对应的是UDP协议和TCP协议。
每个层次的职责
看应用层的章节的时候,免不了要看到运输层;现在到了运输层这一章节,免不了要看到网络层。既然是分层架构了,应用层就讲解应用层,运输层就讲解运输层,干嘛总是要牵扯到下一层?分层之后,是需要把每个层粘合起来,构成一个完整的服务。网络的传输协议不是全局粘合,而是每一层负责粘合下一层。所以,每一层的协议除了指定的服务和操作界面之外,还要粘合下一层的服务。
多路复用,多路分解
在pc机器上,天然就会有运行多个应用程序,但是应用程序是使用的是同一个网络通道。应用程序发送信息的时候,对应的socket会按照报文段的大小拆分传输的信息,复用网络通道。一个数据报文是怎么路由到指定的应用程序的?当数据报文到达网卡,操作系统会根据数据报文携带的目标进程的端口,转发到端口对应的进程,实现了多路分解。
无链接运输UDP
UDP协议处理的数据结构可以抽象为(s_port, t_port, size, checksum, data)。s_port为源端口,t_port为目标端口,size为报文总长度, checksum为校验和,data为应用数据。对于应用数据来说,checksum为冗余数据,目的是对接收的报文做校验,如果校验和不通过,则丢弃报文。
可靠传输协议原理
运输层的是建立在网络层之上,网络层做的是尽力交付报文,网络层本身是不可靠的传输协议。运输层某种程度上,是异步发送数据包组。为了让发送数据包能够确认是否发送到达接收方,需要接收方发送确认信号ack到发送方确认。
正常流程是发送一个数据包,然后收到一个ack确认数据包。如果发送方ack确认报文丢失了,正常流程是走不下去的。所以需要做一个补偿机制,确认状态变更可以正常往下走。补偿机制是多了一个定时任务。定时任务定时处理正常流程出现异常的数据包。
数据包组中,每个数据包的状态已发送已确认,已发送未确认,未发送未确认。为了限制已发送未确认的数量,引入了滑动窗口的概念。其实就是设置一个阈值,让已发送未确认数量限制在阈值之内。设置一个阈值的好处是,可以节省带宽资源,让每个发送数据操作尽量有效。
TCP传输协议
tcp传输协议在可靠传输协议中已经解释得差不多了。特别的地方在于,建立tcp连接,是通过三次握手;断开tcp连接是四次挥手。tcp连接是逻辑意义上的,连接的状态信息是维护是由客户端和服务端各自维护,在ip层之下,是没有tcp连接这个概念。
额外的一些想法
虽然说计算机网络原理是基础课程,但是某种程度上就是一个产品说明书。这个和数据结构与算法等课程是完全不一样的。通过阅读产品说明书,是很难理解到产品的细节和精髓,因为我们都搞不清楚前辈们当初为什么这个设计。我们的应用系统都是架构在网络之上的,不理解计算机网络是完全不可以的。我们学计算机网络只能猜测当初架构网络的时候的需求,通过需求,自己构建出整个计算机网络的体系。有了大局观之后,再去学习一些细节,会好很多。
网友评论