自顶向下---运输层

同为端到端的通信,传输层与网络层的区别是什么?

任务:负责向两个主机中应用进程之间的通信提供服务(提供逻辑通信)。

区别:运输层为运行在不同主机上的进程之间提供端到端的逻辑通信,但网络层是提供主机之间的逻辑通信。

一、多路分解与多路复用

  每个运输层的报文段中设置了几个字段,包括源端口号和目的端口号等。多路分解就是,在接收端,运输层检查这些字段并标识出接收套接字,然后将该报文定向到该套接字。其工作方式可以简单地认为是这样的,主机上的每个套接字被分配一个端口号,当报文到达主机时,运输层检查报文段中的目的端口号,并将其定向到相应的套接字。多路复用就是从源主机的不同套接字中收集数据块,并为每个数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层中去。

1、无连接的多路复用和多路分解

  在运输层,无连接的网络传输是通过UDP来实现的。UDP报文中只有源端口号和目的端口号,一个UDP套接字是由一个含有目的IP地址和目的端口号的二元组来全面标识的。在客户端,源端口号是客户进程套接字的端口号,目的端口号是服务器的端口号。而在服务器端,源端口号是服务器的创建的套接字的端口号,而目的端口号是客户端的套接字的端口号。

  注意:使用UDP来传输报文段时,一个UDP套接字是由一个含有目的IP地址和目的端口号的二元组来全面标识的。因此,如果两个UDP报文段有不同的源IP地址和源端口,但具有相同的源IP地址和目的端口号,那么这两个报文段将通过相同的目的端口号定向到相同的目的进程。这里没有过多地说明IP地址,是因为IP地址是网络层的知识,所以没有提及,我们现在只须知道,IP地址对应着一台主机,而端口号对应着一台主机上的一个进程(或套接字)。

2、面向连接的多路复用和多路分解

  网络上主机间的进程间通信,实质上是通过套接字来实现的。在运输层中面向连接的网络传输多使用TCP,而TCP套接字和UDP套接字之间有一个细微的差别,就是,TCP套接字是由一个四元组(源IP地址、源端口号,目的IP地址,目的端口号)来标识的。这样,当一个TCP报文段从网络到达一台主机时,主机会使用全部4个值来将报文段定向,即多路分解到相应的套接字。

  与UDP不同的是,两个具有不同源IP或源端口号的到达的TCP报文段将被重定向到两个不同的套接字。

  尽管如此,而TCP的多路利用和多路分解的工作原理与无连接的UDP的多路复用和多路分解的原理还是大致一样的。

  

  想想为什么TCP的多路复用和多路分解要这样设计呢?

  这是因为TCP和UDP对待接收到的数据的处理方式不同所致的。我们以服务器上的TCP套接字和UDP套接字为例,假定服务器接收客户端的数据,并把数据发送回客户端。当一个UDP服务器接收到一个UDP报文段时,它会根据收到的UDP报文段的源IP和源端口号,把数据发送回客户端,它并不需要创建一个新的套接字来处理该报文段;而对于一个TCP服务器,当它接受一个连接时,它会产生一个新的套接字,然后通过新的套接字来与客户端通信,也就是通过新的套接字来把数据发送回给客户端。由于每一个连接都会产生一个新的套接字,所以具有不同的源IP或源端口号的连接就是一个不同的连接,对应着产生的新的不同的套接字。

二、UDP

  UDP(用户数据报协议,User Datagram Protocol),它只是做了运输层协议能够做的最少工作,除了多路复用和多路分解及一些差错检测外,它几乎没有做任何东西。如果应用程序使用的运输层协议是UDP,则应用程序几乎是直接与IP打交道的。

  同时,UDP也是一种无连接的运输层协议,因为在使用UDP时,在发送报文段之前,发送方和接收方的运输层实体之间没有进行握手,所谓的握手,就是发送方和接收方通过发送一些特定的报文段来互相确认,从而为发送做准备。

  UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠传递,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP是不可靠的数据报协议),也不要求接收方回复接收成功确认,也不会重发数据,不提供流量控制,更不提供拥塞控制。UDP在IP数据报的头部仅仅加入了复用和数据校验(字段)。

UDP报文段结构

  从上图可以看出,UDP首部只有4个字段,每个字段由两个字节组成。

  源端口号:本机(客户端)的应用程序的套接字所对应的端口号,服务器端可利用此端口号向客户端发送数据。

  目的端口号:服务端上的应用进程的套接字所对应的端口号,例如HTTP服务器的80端口。

  长度:指明了首部和数据部分的UDP报文段的总长度,单位为字节,即首部+数据。

  检验和:提供了差错检测功能,即检验和用于确定当UDP报文段从源到达目的时,其中的比特是否发生了改变。事实上,计算检验和时,除了UDP报文段以外还使用了IP首部的一些字段。注意,它只能检测到一个报文段发生了错误,但并不能纠正这个错误。  

UDP的优势

  从UDP的概述中,我们可以看到,UDP其实并不提供什么服务,而TCP则为我们提供了非常吸引的服务(如数据备份、重发机制、流量控制、接收确认、拥塞控制等等),实现的是一个可靠的传输。为什么还在存在UDP这个东西呢?每一样事物都有它的优点,而且很多时候,事物的缺点恰恰就是它的优点。我为何这么说,下面就来看看它的优势吧!

  1、应用层能更好发控制要发送的数据和发送时间。

  为什么采用UDP的应用层能更好地控制发送的数据和时间呢?因为UDP只提供最简单、服务最少的服务,所以当网络应用进程有数据传递给UDP时,UDP马上就会将此数据打包成UDP报文段,并把它交付给网络层,从而把数据发送出去。相反,由于TCP提供了各种的机制,特别是拥塞控制,以便让源和目的主机间的一条或多条链路变得非常拥塞时,遏制运输层TCP发送方,从而让因特网电话、视频会议之类的实时应用性能变得很差。再者,TCP还会继续重发数据报文段直到目的主机收到此报文并加以确认,点面结合 不管可靠的交付需要多少时间。TCP的这些特性,对于一些实时应用来说通常是不适合的,因为它们通常要求以最快的发送速率发送数据,而不想过分地延迟报文的传送,而且它还能容忍一些数据丢失,所以没用必要使用TCP,使用TCP还会增加额外的负担。

  2、无需连接建立

  如上述的那样,UDP是一个无连接的运输层协议,而TCP在开始数据传输之前要经过三次握手。UDP由于它是一个无连接的协议,所以可以不需要任何准备即可进行数据传输,因此它不会引入建立连接的时延。所以DNS运行在UDP之上而不是TCP之上,因为如果DNS运行在TCP之上,则会由于要建立过多的连接而产生过长连接延时,从而让DNS运行得很慢。

  3、无连接状态

  TCP由于在提供各种可靠传输的服务,需要在端系统中维护连接状态。此连接状态包括接收和发送缓存、拥塞控制参数、序号与确认序号等参数。而UDP不维护连接状态,也不跟踪这些参数。因此,使用UDP的服务器能支持更多的活动客户机。

  4、分组首部开销小

  由于UDP提供的服务少,只提供多路分解和多路复用和校验功能,所以其首部字段少,只有8个字节,而TCP的首部有20个字节。

三、TCP

  TCP作为一个可靠的连接协议最大的特点就是面向连接的,即在发送数据之间要建立连接,数据传输过程中要维护连接,数据发送完毕之后要释放连接。在此基础上TCP提供可靠的传输:

  1. 可靠交付:TCP传递的数据无差错、无丢失、无重复、且按序到达;
  2. 全双工通信:TCP通信的每一段都维护着一个发送缓存和接收缓存;
  3. 面向字节流:TCP协议把上层交付的应用层数据单纯地看成是一系列无结构的字节流;

TCP连接的端点不是主机中的应用进程,而是应用进程维护的套接字接口(socket),其基本的结构包含【IP:Port】;

TCP报文格式如下:

  • 源端口或目的端口(分别2个字节):略。
  • 序号(4个字节):TCP连接中传送的字节流中的每一个字节都按顺序编号。传送的字节流的起始序号必须在连接建立时设置。报文段中的序号值是本报文段所发送的数据的第一个字节的编号。例如一报文段序号值为101,数据共有100字节,那么下一报文段序号值就为201。因为序号的大小是[0,2^32 -1],超出了循环从0开始,所以序号是使用mod2^32运算的。
  • 确认号(4个字节):期望收到对方下一个报文段的第一个数据字节的序号。
  • 数据偏移(又称首部长度)(4位):指出TCP报文段的数据起始处距离TCP首部的起始处有多远。实际上就是指出TCP首部长度。该字段指示了以32bit的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部的长度是可变的。因此,数据偏移的单位是4个字节,而4位二进制的最大值是15,则说明首部最大只能是15*4=60字节。其实选项字段最大只能为40字节。
  • 保留(6位):略。
  • 紧急URG:表明紧急指针子字段有效。
  • 确认ACK:等于1时确认号字段才有效。TCP规定连接建立后所有传送报文度必须把ACK置1。
  • 推送PUSH:表明需要尽快地交付接收应用进程,不再等整个缓存都填满后再向上交付。
  • 复位RST:等于1时表明TCP连接中出现严重差错,必须释放连接再重新建立。
  • 同步SYN:用于连接建立时同步序号的。
  • 终止FIN:用来释放一个连接。
  • 窗口(2个字节):该字段用于流量控制,指示接收方愿意接收的字节数量。因为接收方的接收缓存有限。窗口值是动态变化的。
  • 检验和(2个字节):检验和检查的范围包括首部和数据。
  • 紧急指针(2个字节):指出紧急数据的末尾在报文段中的位置。即使窗口值为零也可以发送紧急数据。
  • 选项(最大可达40个字节):略。

未完待续。。。。。

计算机网络笔记-TCP层 - macdroid的专栏 - 博客频道 - CSDN.NET http://blog.csdn.net/macdroid/article/details/49070185

计算机网络【六】:传输层-TCP概述-windhawkgyang-ChinaUnix博客 http://blog.chinaunix.net/uid-26275986-id-4109209.html

计算机网络复习笔记五之运输层_红孩儿_新浪博客 http://blog.sina.com.cn/s/blog_a7f4cc6101015c32.html

时间: 2024-12-17 01:03:02

自顶向下---运输层的相关文章

计算机网络自顶向下 —— 运输层

前言 第三章运输层了啊 运输层位于应用层与网络层之间,是分层的网络体系结构的重要部分. 应用层  运输层(学到这里啦) 网络层 数据链路层 物理层 零散的笔记昂 运输层协议为运行在不同主机上的应用进程之间提供了逻辑通信 运输层协议是在端系统中而不是在路由器中实现的 因特网有两种协议TCP协议和UDP协议 我们将运输层分组称为报文段 网络层协议,有一个叫IP,由于它不确保报文的交付,也称之为 不可靠服务 每一台主机都有一个IP地址 TCP协议 提供可靠数据传输,也提供拥塞控制 可靠数据传输原理:数

计算机网络自顶向下方法:第三章 运输层

先根据书中的复习题巩固一遍, 最后回答常见问题TCP三次握手和四次挥手, 如有错误, 欢迎指出~ 点击下面跳过复习题 TCP3次握手: 为什么需要初始序号? 为什么需要3次握手, 而不是两次握手 TCP4次挥手 ? 第二章: 运输层 3.1~3.3节 R1. 假定网络层提供了下列服务. 在源主机中的网络层接收最大长度1200字节和来自运输层的目的主机地址的报文段. 网络层则保证将该报文段交付给位于目的主机的运输层. 假定在目的主机上能够运行许多网络应用进程. a. 设计可能最简单的运输层协议,

《计算机网络 自顶向下方法》 第3章 运输层 Part1

由于个人精力和智商有限,又喜欢想太多.钻牛角尖,导致学习系统性知识很痛苦,尝试改变学习方式,慢慢摸索 现在看到 rdt2.0,又有点看不下去 现在的想法: 要有个目标,且有截止时间(作业模式.考试模式),在过程中,如果遇到对整体没有致命影响的难点,可以暂时跳过,在特定时间内把目标内的其他地方解决即可(即先解决简单的其他部分,在考虑进攻难点,这样的话,前期心态不会太焦灼,而且等回过头进攻难点的时候,有一种从四面八方将难点包围的感觉) 写博客也换个思路: 边写博客,边摸索写博客的方式,而且可以把摸索

运输层

博主留言:博客内容纯属自己总结,包含个人感悟,方便学习.要系统的学习计算机网络建议去看书. 第三章 运输层 运输层位于自顶向下五层协议中的第二层——运输层,是位于应用层和网络层之间,是分层的网络体系结构的重要部分. (点击下面链接) 3.1概述和运输层的服务 3.2 多路复用与多路分解 3.3 无连接运输:UDP 3.4可靠数据传输的原理 3.5  面向连接的运输:TCP 3.6 拥塞控制原理 3.7 TCP拥塞控制 原文地址:https://www.cnblogs.com/wuwangchux

《计算机网络 自顶向下方法》 第2章 应用层

常见应用层协议有哪些? HTTP(HyperText Transfer  Protocol):超文本传输协议 FTP(File Transfer Protocol):文件传输协议 SMTP(Simple Mail Transfer Protocol): Telnet:远程终端访问 有哪些可供选择的运输层协议? TCP(Transmission Control Protocol):传输控制协议 可靠数据传输.面向连接.拥塞控制UDP(User Datagram Protocol):用户数据报协议

《计算机网络·自顶向下方法》第七版 第三章 课后习题与问题 答案

非官方答案,本人已尽最大努力(包括参考官方答案),使结果正确,如有错误,请大佬指出 正文: 3.1~3.3节 R1 a.如果只是简单想把信件送到,那么所有的头部信息只需要一个目的地址就够了,题目给出端口号四个字节,所有分组的头部那就只需四个字节 此协议规定,运输层的全部任务就是,将应用层的数据,切成最大1196字节的块,把每一块加上目的主机对应程序的端口号,并将得到的分组交付给网络层 在接收方,运输层将网络层报文取回,去掉头部信息,将数据拼接成应用层需要的信息,根据端口号交付给应用层即可 不过话

自顶向下 | 带你遨游网络层

前言 网络层的知识点非常繁多,本文仅是基于<计算机网络 自顶向下>而总结的一些重点知识点,如果想要详细了解网络层的知识,可以看下<自顶向下> 本文已经收录到我的Github个人博客,欢迎大佬们光临寒舍:我的GIthub博客 对于互联网的网络层来说,其提供的服务非常简单,包括: 转发 路由选择 网络层可能提供的服务 网络服务模型: 确保交付 保证延迟的确保交付 有序交付 确保最小带宽 确保最大时延抖动 安全性服务 那么 IP 协议提供以上哪些服务呢? 答案就是:一个也不提供 不 确保

自顶向下归并排序和自底向上的归并排序

欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 归并排序算法的使用情景 归并排序算法和快速排序算法是java.util.Arrays中使用的排序算.对于一般的基本数据类型,Arrays.sort函数使用双轴快速排序算法,而对于对象类型使用归并排序(准确的说使用的是TimSort排序算法,它是归并排序的优化版本).这样做的原因有两点,第一个原因,归并排序是稳定的,而快速排序不是稳定的.第二个原因,对于基本数据类型,排序的稳定性意义

【Algorithm】自顶向下的归并排序

一. 算法描述 自顶向下的归并排序:采用分治法进行自顶向下的程序设计方式,分治法的核心思想就是分解.求解.合并. 先将长度为N的无序序列分割平均分割为两段 然后分别对前半段进行归并排序.后半段进行归并排序 最后再将排序好的前半段和后半段归并 过程(2)中进行递归求解,最终下图详细的分解了自顶向下的合并算法的实现过程: 二. 算法实现 /*============================================================================= #