从零开始的计算机网络基础(图文并茂,1.8w字,面试复习必备) (5)

根据之前的知识我们知道路由器中最顶层的是网络层,也就是说分组交换中根本用不到传输层,那么费尽周折地弄一个传输层有什么意义呢?我们知道微信可以视频聊天,可以语音聊天,可以文字聊天。那么假如夏尔和慕恩有特殊癖好(视频聊天的同时打字聊天),夏尔和慕恩的ip地址都是暂时固定的,那么文字流和视频流都会在这两个ip地址间进行传递。那么问题来了,我们知道视频聊天服务和文字聊天服务肯定是两个会话服务,那么怎么将文字流交给文字会话,视频流交给视频会话呢?本着遇事不决量子力学的态度,我们大胆猜想可以在报文上加标记,这就是传输层所着手解决的一个问题,当然传输层的作用还不止这些。

传输层怎么实现端到端会话传输的呢 多路分解和多路复用

image.png

不知道大家对这张图还没有印象,之前提到过报文由应用程序进程通过socket呈递给传输层到站后再通过传输层分发到相应socket由另一个终端的应用程序接收。我们可以近似地把进程理解为会话,而socket是进程与传输层之间的桥梁。

多路分解:将运输层报文段中的数据交付到正确的套接字(socket)。

多路复用:在源主机从不同套接字中收集数据块,并未每个数据块装上首部信息(标记)从而生成报文段,然后将报文段传递到网络层。

值得一提的是多路分解和多路复用并不是传输层所特有的,它们是所有计算机网络都需要的。

端口

了解了多路分解和多路复用后,我们知道套接字应该是具有唯一标识的桥梁,同时它还要告知行人这座桥通向何处。这就引申出了端口这个概念,端口分为源端口号(从哪来)和目的端口号(到哪里去)。报文分别用了16个比特位标识源端口和目的端口,也就是说端口的范围在0-65535之间。同时0-1023端口是受限制的(被一些很重要的诸如http协议等使用了)。之前提到过http协议默认占用80端口,你可以试试下面链接跟你平时看到的度娘相比有什么不同。:80

传输层双雄 UDP和TCP的区别

tcp是面向连接的,udp是无连接的

tcp提供可靠交互,报文传输无差错,不丢失,不重复地按序到达,而udp是尽可能地实现交互,即提供不可靠交互

tcp是面向字节流,udp面向报文。应用层一次发送给tcp一个数据块,tcp将其视为无结构字节流,tcp中有一个缓存,当应用程序数据块太长tcp会将其划分为更小的块传输。而udp则无论应用层发送多大的报文都会照样直接发送,因此应用层必须选择合适的报文大小,太长ip层需要分片,降低效率;太短,ip太小。

tcp支持1对1的交互,udp支持1对1,1对多,多对多的交互

tcp首部为20个字节,udp首部只占8字节

文件,邮件用tcp,视频用udp

因为双雄各有千秋,所以有各自适应的场景。总的来说udp无论是首部开销还是无连接的特点都使得其速度比tcp快,但在可靠交互,流量控制和拥塞处理这方面tcp显然是更好的一方。

UDP 报文结构

udp.png

源端口号,目的端口号

目的端口号是为了报文到站后寻找合适的socket,那么为什么要把源端口号也带上呢?因为连接是全双工模式,也就是说接收方既是发送方也是接收方,当接收方想反馈信息给发送方时只需要从报文中获取源端口号作为反馈报文的目的端口号即可。

长度

一组报文的长度,用于分割报文组同时检测是否出现丢包现象。

校验和

16比特位,用于检验报文是否在发送过程中受外界干扰出现了比特改变的情况。(我们知道数据最终是由电缆或光缆或电磁波传递的,物理学上外界环境可能会影响这些信号,比如使得高电平变为低电平对应到比特位就是将1变为了0)

校验原理:

将udp报文中的所有16位比特字进行相加

将比特字相加的结果转换为其反码(如果有溢出,它要被回卷),作为其检验和

接收方将所有16位比特字相加(包括检验和),查看结果是否为1111111111111111

//假定,udp首部有这三个16位比特 0110011001100000 0101010101010101 1000111100001100 0110011001100000 + 0101010101010101 = 1000111100001100 + 1000111100001100 = 0100101011000010 (这里产生了溢出将进行回卷,所谓回卷是指舍弃高位进位而在最低位+1) 反码运算是将0 => 1; 1 => 0。 0100101011000010 => 1011010100111101 //接收方 之前三个16比特 + 检验和 原码 + 补码 = 1111(源码位数个1) 所以如果不为1111111111111111,那么数据在传输过程中一定发送了比特变化。

udp的特性 1. udp是无连接的。也就是说使用udp协议传输报文,不需要事先建立一条信息通道,而是添加首部后直接交给网络层 2. udp提供不可靠交互。之前讲解udp报文字段时我们看到了虽然udp提供了差错检测的功能,但它却对差错回复无能为力。也就是说当udp接收到受损的报文时,只能将其丢弃。(也就是视频中存在的丢帧现象) 3. 面向报文。为报文添加首部后,直接交给网络层进行传递。 4. 1对1,1对多。因为不需要建立信道,所以可以实现类似网络层广播的一个效果。 TCP 报文结构

tcp.png

序号和确认号

用于建立连接(创建传输信道),断开连接。同时也是实现可靠数据传输的关键,之后会更多地讨论。

首部长度和保留未用

TCP首部的长度是可变的,首部长度字段用于将首部与数据字段区分开。保留未用如其名,为保留字段。

URG,ACK,PSH,RST,SYN,FIN

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zywwpy.html