tcp提供有确认,有连接的数据流服务,udp提供无确认,无连接的数据报服务。
为什么说tcp提供数据流服务而udp提供数据报服务呢?这其实与这两个协议本身的传输机制有关,tcp提供可靠的传输机制,也就是说只要是被发送的数据都会被接收方接收到,并且双方也知道被正确接收了,这就有一种现象:一段比较大的数据被分段传送出去,对于接收方而言,就像一股水流一样不断地并且一滴不漏的被接收(这个过程中有确认机制,更加形象地类似水流),非常类似于水流。而udp不负责可靠传输,他只知道尽最大的努力把数据发送出去,并不关心数据是否被接收方实际接收,对于接收方而言,他接收数据的情形是:来一个我接受一个,并不关心中间是否有丢失的数据报,就像飞机空头物资一样,并不是投一包东西,然后地面确认一下,再投第二包东西(这种方式在无形中使得物资之间有了一种默契),而是多架飞机一起往下投物资,没有顺序可言,哪个先下来我先接那个,并且投下的物资是否在半空被老鹰叼走了地面并不关心(这种方式下,不同物资之间似乎相互独立,从传输层理解的话就是每个udp报文独立存在,他们的联系是发生在他的高层应用层)。再结合到数据的发送和接收上,对于接收端而言并无顺序可言,数据报之间没有约定的连接格式,每个udp数据报之间就像独立的个体一样。
1.进程间通信概念 B
一台主机的一个进程和另一台主机的一个进程进行数据交换。
运输层的复用和分用:
复用:在发送方不同的应用进程中都可以使用同一个运输层协议传送数据。(重复使用)
分用:接受方的运输层在剥去报文的部首后能够把这些数据正确交付目的应用进程。(分别交付)
2.TCP,UDP 协议概念 A
两个通信实体在通信时传送的数据单位,按照OSI的标准,称为运输协议数据单元TPDU,但在TCP/IP体系中,则根据所使用的协议是TCP或UDP,分别称为TCP报文段和UDP用户数据报。
运输层的两个主要协议:
(1)用户数据报协议UDP:
传送数据前不需要先建立连接。远地主机的运输层在收到UDP报文后,不需要给出任何确认。
这时的逻辑信道是一条不可靠信道。
(2)传输控制协议TCP:
提供可靠的、面向连接的服务。传送数据前需要先建立连接,数据传送结束后要释放连接。这时尽管下面的网络层是不可靠的(只提供尽最大努力服务),但这种逻辑信道就相当于一条全双工的可靠通道。
3.运输层的端口 A
运行在计算机中的进程是用进程标识符来标志的。但运行在应用层的各种应用进程却不应当让计算机操作系统指派它的进程标识符。这是因为在因特网上使用的计算机的操作系统种类很多,而不同的操作系统又使用不同格式的进程标识符,因此发送方非常可能无法识别其他机器上的进程。为了使运行不同操作系统的计算机的应用进程能够互相通信,就必须用统一的方法对 TCP/IP体系的应用进程进行标志。解决这个问题的方法就是在运输层使用协议端口号(protocolport number),或通常简称为端口(port),端口用一个16位端口号进行标志。端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。虽然通信的终点是应用进程,但我们可以把端口想象是通信的终点,因为我们只要把要传送的报文交到目的主机的某一个合适的目的端口,剩下的工作(即最后交付目的进程)就由TCP来完成。
服务端使用的端口号:又可分为熟知端口号/系统端口号和登记端口号
客户端使用的端口号(短暂端口号):仅在客服进程运行时动态选择
4.常用应用的熟知端口号 B
5.UDP 基本概念 A
用户数据报协议 (User Datagram Protocol, UDP)是一个简单的面向无连接的,不可靠的数据报的传输层协议。 在TCP/IP模型中,UDP为网络层以上和应用层以下提供了一个简单的接口。UDP只提供数据的不可靠交付,它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份(所以UDP有时候也被认为是不可靠的数据报协议)。
UDP的主要特点:
1、UDP 是无连接的,即发送数据之前不需要建立连接,发送数据之后也没有连接可释放,因此减小了开销和发送数据之前的时延。
2、UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表
3、UDP是面向报文的,发送方UDP对应用程序交下来的报文,在添加首部后直接向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。也就是说,应用层交付给UDP的报文,UDP就照样发送,即一次发送一个报文。在接收方的UDP,对IP层交上来的UDP用户数据报,在去除首部后就原封不动的交付上层的应用进程。也就是说,UDP一次交付一个完整的报文。
应用程序必须选择合适大小的报文,若报文太长,UDP将其交给IP层后,IP层在传送时可能要进行分片,这回降低IP层的效率,反之,若报文太短,UDP将其交给IP层后,会使IP数据报的首部相对长度太大,这也降低了IP层的效率。
(4)、UDP没有拥塞控制,因此网络出现的拥塞不会使源主机的发送效率降低,这对某些实时应用是很重要的,很多实时应用(IP电话、视频会议)要求源主机以恒定速率发送数据,并且允许在网络发生拥塞时丢失一些数据,但不允许数据有太大的时延。
当很多源主机同时都向网络中发送高速率的实时视频流时,网络就可能发生拥塞,导致大家都无法正常接收,因此,不适用拥塞控制的UDP有可能引起网络严重拥塞。
(5)、UDP支持一对一、一对多、多对一和多对多的交互通信
(6)、UDP首部开销小,只有8个字节,比TCP的20个字节首部要短。
6.UDP 首部格式 图 5-5 B
用户数据报UDP有两个字段:数据字段和首部字段。首部字段只有8个字节,由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:
(1)源端口:源端口号,在需要对方回信时选用,不需要时可用全0
(2)目的端口:目的端口号,这在终点交付报文时必须要用到
(3)长度: UDP用户数据报的长度,其最小值为8(此时仅有首部)
(4)检验和:检测UDP用户数据报在传输中是否有错,有错就丢弃
7.UDP 端口分用 图 5-6 A
当运输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交最后的终点——应用进程。图2是UDP基于端口分用的示意图。
如果接收方UDP发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由网际控制报文协议ICMP发送“端口不可达”差错报文给发送方。
8. 传输控制协议 TCP 基本概念 A
TCP提供了完善的错误控制和流控制,能够确保数据正确传输,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
9.TCP 的最主要特点 A
- TCP是面向连接的运输层协议。这就是说应用程序在使用TCP协议之前,必须先建立连接。在传送完数据之后,必须释放已经建立的链接。
- 每一条TCP链接只能有两个端点,每一条TCP链接只能是点对点的。
- TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按需到达。
- TCP提供全双工的通信。
- 面向字节流。TCP中的“流”指的流入到进程或者从进程流出的字节序列。虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据块看成仅仅是一连串的无结构的字节流。
10.TCP 的连接 A
TCP 把连接作为最基本的抽象。每一条TCP连接有两个端点。TCP连接的端点不是主机,不是主机的IP地址,不是应用进程,也不是运输层的协议端口。TCP连接的端点叫做套接字(socket)或插口。端口号拼接到IP地址即构成了套接字。
套接字(socket) = (IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。即:
TCP 连接 = {socket1, socket2} = {(IP1: port1), (IP2: port2)}
11.可靠传输的工作原理 停止等待协议 A P214
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。缺点是信道利用率太低。
三种情况:无差错情况、出现差错、确认丢失和确认迟到。
12.可靠传输的工作原理 连续 ARQ 协议 B P216
13. TCP 报文首部格式 A
TCP虽然是面向字节流的,但是TCP传送的数据单元却是报文段。一个TCP报文段分为首部和数据两部分,而TCP的全部功能则体现在它首部中的各字段的作用。TCP报文段的前20个字节是固定的(如下图所示),后面有4N个字节是根据需要添加的选项。因此,TCP首部的最小长度是20个字节。
- 源端口和目的端口:各占两个字节,分别写入源端口号和目的端口号。TCP的分用功能就是通过端口号去实现的。
- 序号:序号占4个字节。序号的范围是
,共
个序号。序号增加到
后,下一个序号又返回0。也就是
运算。TCP里面是面向字节流的。在一个TCP连接中传送的字节流中的每一个字节都得按照顺序编号,整个要传送的字节流的起始位置要在一开始就要确定。首部中的序号字段的值指的是本报文段发送的第一个字节的序号。比如说,一个报文段序号字段的值为101,而携带的数据有200个字节。这就表明这个报文段的最后一个字节的序号是300.当传送下一个报文段的时候,其序号字段的值就应该为301.这个字段的名称也叫作报文段序号。
- 确认号:占4个字节。是希望收到对方下一个报文段的第一个数据字节的序号。如果说确认号等于N,那么就说明到序号N - 1的所有数据都已经正确收到。
- 数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上就是TCP报文段的首部长度,但是需要注意的是这里“数据偏移”的单位是32位字,即以4字节长的字为计算单位。所以它能表示的最大长度就是60个字节,也就是说TCP首部的最大值是60字节。
- 保留位:占6位,保留为今后使用,故应该置为0。
- 编码位:占6位。分别是URG、ACK、PSH、SYN、FIN。 当URG=1时表明紧急字段有效,数据的传送不按照原来的排队顺序而是把紧急数据插入到本报文段的最前面,其他的数据部分仍然按照原来的排队顺序传送。 确认ACK:仅当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在链接建立后所有的传送的报文段都必须把ACK置1。推送PSH:当两个应用进程进行交互式的通信时,有时一端键入一个命令时希望立即受到对方的响应,此时就可以把PSH置1,并立即创建一个报文段发送出去,接受方TCP受到PSH=1的报文后会立即或者尽快的交付给应用进程,而不是等到整个缓存都填满了之后再向上交付。复位RST:当RST=1时,表明TCP连接中出现严重错误,必须释放链接并且重新建立运输连接。RST也称为重建位或者重置位。 同步SYN:在连接建立时用来同步序号。当SYN = 1而ACK = 0时表明这是一个连接请求报文段。对方若同意连接,则应在响应报文中使SYN = 1且 ACK = 1。因此SYN置1表示这是一个连接请求或者连接接受报文。 终止FIN:当FIN = 1时,表明此报文段的发送方已发送完数据,并且要求释放连接。
- 窗口:占2字节。窗口值是
之间的整数。窗口指的是发送本报文段的一方的接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以有这个限制是因为接收方的数据缓存空间是有限的。窗口值是作为接收方让发送方设置其发送窗口的依据。窗口值是经常动态变化的。例如:发送了一个报文段,其确认号为701,窗口字段是1000,这就是告诉对方:从701号算起,我的接收缓存空间还可接收1000个字节数据。
- 检验和:占两个字节。检验和字段检验的范围包括首部和数据部分。
- 紧急指针:占2字节。紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完毕时,TCP就告诉应用程序恢复到正常操作。值得注意的是,即使窗口为0时也可发送紧急数据。
- 选项字段:长度可变,最多40字节,没有使用选项时,TCP首部长度20字节。最后的填充字段仅仅是为了让整个首部长度是4的倍数。
TCP最初只有一种选项:最大报文段长度MSS。MSS是每一个TCP报文段中的数据字段的最大长度(报文段长度减去首部长度)。数据字段加上TCP首部才等于整个的TCP报文段,
14. TCP 可靠传输的实现——滑动窗口机制 A
15.TCP 可靠传输的实现——超时重传时间的选择 B
16.TCP 流量控制 C
17. TCP 拥塞控制 C
18. TCP 的运输连接管理——TCP 连接建立过程(三次握手协议) A
TCP连接的建立采用客户服务器方式。主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。
TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。
19. TCP 的运输连接管理——TCP 连接释放过程 A