上一节讲述了应用层的DNS相关内容,接下来进入运输层及相关的协议内容。

1 运输层的作用

我们知道主机之间通信的话可以通过分层中的网络层即可实现(网络层添加目标IP和源IP),那么为什么还需要运输层,因为我们需要实现不同主机上的进程间的通讯。通过引入运输层从而实现了不同主机上进程间的通讯。
在了解运输层之前我们先来了解下网络层。网络层有一个协议为IP(Internet Protocol),即网际协议。IP为主机之间提供了逻辑通信,但是其是尽最大可能交付,也就是说IP是不可靠的服务。
在简单了解了IP服务后,我们来讨论下运输层的两大协议UDP和TCP,UDP和TCP将主机间的通讯扩展到了主机上进程间的通讯。将主机间通讯扩展到主机上进程间通讯称为运输层的多路复用多路分解。UDP提供了进程间数据交付和差错检查两种最低限度的运输层服务,UDP是无连接的,不可靠数据传输的运输层服务。相反的TCP是一种全双工面向连接的服务,它通过序列号、确认号、校验和及定时器实现了进程间的可靠数据传输。

2 多路复用和多路分解

在上面提到通过运输层的多路复用和多路分解从而实现了将IP提供的主机间通讯扩展到进程间的通讯。那么多路复用和多路分解究竟是如何运作的。
假设你的PC上运行着微信、QQ和网易云音乐,这个三个应用(进程)都会与对应的服务器进程数据的交互,当其他主机的数据传输到你的PC后,均通过物理层、链路层、网络层及运输层,然后分发到对应的应用程序(进程),那么运输层是如何做到的?那么要实现这个功能,那么每个应用(进程)都需要一个唯一的标识,而这个唯一的标识统称之为套接字,我们都知道套接字是运输层提供给运输层的接口,而每个套接字实例均有一个唯一的标识,而每个套接字又与应用(进程)绑定,那么运输层就可将数据通过套接字将数据正确分发给不同的进程。如下图:

其他主机的数据到达你的PC均通过物理层、链路层、网络层,到达运输层后通过套接字将数据分发到每个进程中,这个过程就叫做多路分解。相应的运输层也将主机上的每个进程的数据组装成报文段交付给网络层从而将数据发送给目的主机,这个过程称之为多路复用

3 无连接传输UDP

前面我们已经提到UDP是无连接的,提供了不可靠数据传输服务及差错校验。其作用只是在网络层添加了多路分解和多路复用,从而实现了进程间的通讯,那么UDP如此不可靠是否就一无用处呢?不是的,使用UDP协议作为数据传输可能基于以下几点考虑:

  1. 关于发送什么数据以及何时发送的应用层控制更为精细。采用UDP进行数据发送时,应用层将数据传递给UDP后,UDP会当即将数据发送。对于TCP由于流量控制及拥塞控制的原因,同时确保数据的准确传输,所以TCP会忽略时延从而保证数据正确被交付,这就会导致有些数据时延特别大,对于有最小发送速率有要求的应用,很明显使用UDP更能保证数据被即时发送,所以说如何需要控制发送什么数据同时控制何时发送,应用层使用UDP更能把控发送的时间点(因为TCP由于缓存和流量控制原因,即使应用层将数据交付给TCP,TCP也不能保证数据当即会发送)。
  2. 无须建立连接。UDP在数据发送时不像TCP的三次握手一样,所以UDP会省去三次握手的时延。
  3. 无状态连接。我们知道对于TCP为了提供可靠数据传输服务,TCP会维护确认号、序列号以及流量控制状态,但是UDP是无状态的,UDP不需要维护过多的状态信息。
  4. 分组首部开销小。UDP只需要维护源和目标端口以及校验和和数据长度信息,而TCP是有状态的,所以首部需要维护序列号、确认号和流量窗口等信息,所以TCP首部要比UDP首部大的多,UDP报文段首部只有8字节的开销,而TCP每个报文段首部至少20字节。

UDP报文段结构

接下来我们来了解每个UDP报文段的结构,如下图:

如图所示,UDP报文段只有四个部分,每个部分占两个字节,源端口号和目的端口号用于运输层实现进程间通讯标识(多路复用和堵路分解)。长度是指UDP数据报的长度(包括首部和应用数据)。校验和用于运输层对应用数据进行校验是否出了差错。

UDP校验和
UDP的校验和提供了差错检测功能。也就是说,检验和用于确定UDP报文段从源到目的地移动时,其中的比特是否发生改变。发送方的UDP对报文段中的所有16比特字的和进行反码运算,求和时遇到的任何溢出将会被回卷。得到的结果被放到UDP报文段的校验和字段
接下来我们来看一个有3个16比特字例子:

这三个16比特字的前两个之和为:

将前两者之和与第三个相加如下:

最后的一个加法是有溢出的,所以发生了回卷。反码的运算规则就是将所有的0换成1,所有的1换成0。因此,该和0100101011000010的反码就是1011010100111101,这就是校验和。在接收方,数据的三个16比特字和校验和加在一起结果为1111111111111111。如果这些比特值为0的则代表UDP的报文段数据在传输过程中发生差错。
UDP提供的服务很少,所以关于其报文格式没有那么复杂也容易理解,其应用的话,DNS就是基于UDP进行数据传输的。因为DNS使用TCP的话,由于流量控制、拥塞控制以及可靠传输的原因,会导致获取主机名称对应的IP地址时延会较高,影响了应用层的一次请求响应速度,所以DNS在UDP上进行数据的传输。接下来来了解TCP相关的知识,但是在了解TCP之前我们先来了解下可靠数据传输的原理。

本节学习了运输层的作用和UDP不可靠数据传输的相关内容,下节进入可靠数据传输的相关原理和协议的内容:可靠数据传输原理

章节四:运输层介绍和UDP相关推荐

  1. 温州大学计算机网络,数据通信与计算机网络(温州大学)实验四 - 运输层TCP和UDP协议分析.doc...

    温州大学 WENZHOU UNIVERSITY 实 验 报 告 学 期2016-2017学年第一学期课 程数据通信与计算机网络专 业电子信息科学与技术班 级14电科1学生姓名徐炜学 号14211111 ...

  2. #章节四:input()函数

    章节四:input()函数 目录 章节四:input()函数 1. input()函数 1.1 input()函数的使用 1.2 input()函数结果的赋值 1.3 input()函数的数据类型 1 ...

  3. 章节四:BeautifulSoup实践

    章节四:BeautifulSoup实践 目录 章节四:BeautifulSoup实践 1. 复习 2. 项目:解密吴氏私厨 3. 分析过程 4. 代码实现(一) 4.1 获取与解析 4.2 提取最小父 ...

  4. TCP三次握手四次挥手 TCP/UDP区别

    三次握手 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认:  SYN:同步序列编号(Synchronize Sequence Numbe ...

  5. WPF入门教程系列四——Dispatcher介绍

    WPF入门教程系列四--Dispatcher介绍 一.Dispatcher介绍 微软在WPF引入了Dispatcher,那么这个Dispatcher的主要作用是什么呢? 不管是WinForm应用程序还 ...

  6. BEGINNING SHAREPOINT#174; 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 SharePoint 2013 平台...

    BEGINNING SHAREPOINT® 2013 DEVELOPMENT 第1章节--SharePoint 2013 介绍 SharePoint 2013 平台 SharePoint保持了一个高级 ...

  7. 章节四:RASA 训练数据介绍

    一.前言 一般来说,机器人可以跟人对话,机器人说什么是最难的,顶多是人工编写几种规则和模版来回复即可.但是要让机器人理解人的意图,确实非常难的事情.因为语言具有多样性,多义词,一语双关,长短句等,尤其 ...

  8. 【网络】运输层介绍以及主要协议(一)TCP

    写在前面: 上一次的介绍是关于网络层中的IP协议:从网络层来说,通信的两端是两台主机.IP数据报明确的表明了两端的两台主机的IP地址,这样看起来这两台主机就可以直接进行通信.但是这种说法是不完全正确的 ...

  9. 计算机网络(四)运输层(TCP/IP)

    进程间的通信 运输层向它上面的应用层提供通信服务:通信的实体是两台主机的进程之间在数据交换 网络层为主机之间提供逻辑通信,而运输层为应用进程间提供端到端的逻辑通信 运输层还要对收到的报文进行差错检测( ...

最新文章

  1. 安徽省计算机一级文化基础,计算机一级文化基础选择题
  2. Salesforce 用机器学习来自动总结文本,AI+SaaS 是未来吗?
  3. python软件怎么用-用Python如何打出你的第一个程序
  4. c语言影碟出租程序设计总结,vc++影碟出租系统的设计与开发
  5. Must be between v0 and v15, inclusive解决办法
  6. java利用递归解决汉诺塔问题
  7. mysql xml字段转json格式_mysql将xml数据或者json数据转换为表格。
  8. tomcat 6.0配置
  9. EP100的局部地址、逻辑地址和全局地址
  10. C语言的酒店客房管理系统
  11. PowerBuilder 生成条形码
  12. Goole helper使用
  13. 理解PHP网页运行原理
  14. CF1526C2 Potions (Hard Version) (贪心 + 线段树)
  15. 通过javascript获取sharepoint数据,使用JS导出Excel
  16. 华为手机如何连接到电脑
  17. java图形化界面编程之Swing
  18. WebBrowser 显示Html内容3点细节技巧
  19. 世界最大射电望远镜(Arecibo)用于探测地外文明
  20. uniapp生成canvas商品海报

热门文章

  1. 理论:第十三章:堆溢出,栈溢出的出现场景以及解决方案
  2. 修改CentOS锁屏时间
  3. 完美解决 Treating Unicode character as whitespace的问题
  4. 【北京化工大学主办】第四届计算机科学及通讯技术国际会议(ICCSCT2023)征稿中
  5. 适配iPad和iPhone
  6. Li‘s 影像组学视频学习笔记(16)-pyradiomics里的yaml文件
  7. 柯里化的两种实现方式(定参和不定参)
  8. about android source code
  9. Mac端WPS打开文件,左侧目录消失的处理办法
  10. Android FloatingActionButton(浮动动作按钮的动画 ) 使用详情