计算机网络3——传输层(上)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yaocong1993/article/details/82947337

一、概述

传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制(端到端,不需要关心媒介等)。发送方,将应用递交的消息分成一个或多个的Segment,并向下传给网络层。接收方,将接收到的segment组装成消息,并向上交给应用层。

网络层提供主机之间的逻辑通信机制。传输层提供应用进程之间的逻辑通信机制,位于网络层之上,依赖于网络层服务,对网络层服务进行(可能的)增强。家庭类比,12个孩子给12个孩子发信,应用进程=孩子,应用消息=信封里的信,主机=房子,传输层协议=李雷和韩梅梅(把信收集),网络层协议=邮政服务。

Internet传输层协议。TCP,可靠、按序的交付服务,拥塞控制,流量控制,连接建立。UDP,不可靠的交付服务,基于“尽力而为(Best-effort)”的网络层,没有做(可靠性方面的)扩展。两种服务均不保证延迟和带宽。

二、多路复用和多路分用

如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用。接收端进行多路分用,传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程。发送端进行多路复用,从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层。

分用如何工作?主机接收到IP数据报(datagram),每个数据报携带源IP地址、目的IP地址和一个传输层的段(Segment),每个段携带源端口号和目的端口号。主机收到Segment之后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket。TCP做更多处理。

1、无连接分用

利用端口号创建Socket。

DatagramSocket mySocket1=new DatagramSocket(99111);

DatagramSocket mySocket2=new DatagramSocket(99222);

UDP的Socket用二元组标识(目的IP地址,目的端口号)。

主机收到UDP段后,检查段中的目的端口号,将UDP段导向绑定在该端口号的Socket。

来自不同源IP地址和/或源端口号的IP数据报被导向同一个Socket。

2、面向连接的分用

TCP的Socket用四元组标识(源IP地址、源端口号、目的IP地址、目的端口号)。

接收端利用所有的四个值将Segment导向合适的Socket。

服务器可能同时支持多个TCP Socket,每个Socket用自己的四元组标识。

Web服务器为每个客户端开不同的Socket。

      

三、UDP

用户数据报协议(User Datagram Protocol,UDP,RFC 768),基于Internet IP协议,增加复用/分用、简单的错误校验(端到端原则),相当于把IP层服务暴露给应用层。

“Best effort”服务,UDP段可能丢失、非按序到达,IP也是这样。无连接,UDP发送方和接收方之间不需要握手,每个UDP段的处理独立于其它段。(在UDP上实现可靠数据传输?在应用层增加可靠性机制,应用特定的错误恢复机制。)

UDP为什么存在?无需建立连接(减少延迟);实现简单,无需维护连接状态;头部开销少;没有拥塞控制,应用可更好地控制发送时间和速率。

常用于流媒体应用,容忍丢失,速率敏感。还用于DNS和SNMP

UDP协议报文段格式:源端口号、目的端口号、UDP段的长度(包括头部)、UDP校验和、应用数据(报文)。

UDP校验和(checksum):检测UDP段在传输中是否发生错误(如位翻转)。发送方,  将段的内容视为16-bit整数;计算所有整数的和,进位加在和的后面(最高位进位必须被加进去),将得到的值按位求反,得到校验和;发送方将校验和放入校验和字段。接收方,计算所收到段的校验和;将其与校验和字段进行对比,不相等则检测出错误,相等则没有检测出错误(但可能有错误)。

四、可靠数据传输原理

可靠是不错、不丢、不乱。可靠数据传输对应用层、传输层、链路层都很重要,是网络Top-10问题,信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性。

渐进地设计可靠数据传输协议的发送方和接收方。只考虑单向数据传输,但控制信息双向流动。利用状态机(Finite State Machine, FSM)刻画传输协议。

猜你喜欢

转载自blog.csdn.net/yaocong1993/article/details/82947337