Download presentation
Presentation is loading. Please wait.
Published byAino Hyttinen Modified 5年之前
1
第8章 传输层 8.1传输层服务 8.2端口寻址 8.3建立连接 8.4Internet中的传输层协议 8.5Berkeley Socket
用户数据报协议UDP 传输控制协议TCP 8.5Berkeley Socket
2
logical end-end transport
8.1传输层服务 application transport network data link physical logical end-end transport 传输层是整个协议层次结构的核心,它为高层屏蔽任何与网络有关的操作,传输层是端到端协议,与使用的网络无关
3
为应用进程提供了逻辑通信信道 应用进程 应用进程 AP1 AP4 5 4 3 2 1 AP2 AP3 5 4 3 2 1 端口 端口
传输层提供应用进程间的逻辑通信 IP 层 主机 A 主机 B 路由器 1 路由器 2 AP1 AP3 LAN1 WAN LAN2 AP2 AP4 IP 协议的作用范围 传输层协议 TCP 和 UDP 的作用范围
4
向上层提供的服务 传输层服务有两类: 面向连接的传输服务 无连接的传输服务 TSAP NSAP
5
8.2端口寻址 由于传输层为上层提供复用机制,因此,当一个传输层进程希望与另一个进程建立连接时,必须指定对方传输层所对应的TSAP地址
Host2的时间服务进程运行在122号TSAP上,等待服务请求。 Host1应用进程发出连接请求,并指明源TSAP=6,目的TSAP=122。 网络层实体向Host2建立连接(对于非连接网络,仅向Host2发送分组) 问题:如何知道对方的TSAP?
6
TSAP的获取方法 服务进程固定在特定的TSAP上。
只适用于少数关键的服务 每个系统都有一个进程服务器,它连接在众所周知的一组TSAP上,用户为了与目标服务进程通信,首先必须与进程服务器通信,通过它启动目标服务进程。 采用名字服务器,当新的服务被创建时,必须向名字服务器注册,给出服务名和TSAP。用户在需要相应的服务前先查找名字服务器。
7
主机进程标识 网络服务访问点(NSAP)和传输服务访问点(TSAP)即{NSAP,TSAP}标识了一个主机上的进程,需要注意的是NSAP是ISO定义的概念,一般用于面向连接的网络,例如ATM、X.25、Frame Relay等。 在TCP/IP中,NSAP与IP地址对应,TSAP对应着端口号(port),再加上所采用的协议(TCP/UDP),即{IP地址,端口号,协议类型}唯一标识一个主机上传输服务的用户进程,而{源/目的IP地址,源/目的端口号,协议类型}五元组标识一个传输连接的数据流。
8
8.3建立连接 一般来说,一个连接从连接请求的发出到接收到连接证实消息就可以建立一个连接,但当网络丢失、存储,再重传重复分组时,一个连接也会被建立多次 三步握手 主机1选择一个序号x,并向主机2发送包含该序号的连接请求TPDU 主机2应答接受连接TPDU,TPDU中包含确认号x和序列号y 主机1在其发送的第一个数据中采用序列号为x,并确认主机2的序列号y
9
三步握手 CR-连接请求;ACK-接受连接 图a为正常操作时连接的建立;图b为重复的CR突然出现; 图c为重复的CR和重复的ACK
10
释放连接 非对称释放 连接的任何一方都可以断开整个连接 对称释放 把连接看作是由两个独立的单向连接,并要求单独释放每一个单向连接
11
非对称释放 CR-连接请求 ACK-接受连接 DR-连接断开请求
当连接建立以后,主机1发送一个TPDU,它正确地到达了主机2,然后,主机1又发送一个TPDU,但是由于主机2在第二个TPDU到达之前就已经发送了DISCONNECT TPDU,因此,该连接虽然被释放,但是数据却丢失了。
12
对称释放 DR-连接断开请求ACK-接受断开
释放连接再次用到三步握手,一方发出释放连接请求后不立即拆除连接,而要等待对方确认;对方收到请求后,发送确认报文,并拆除连接,发起方收到确认后最后拆除连接。
13
(a) Response lost and subsequent DRs lost
对称释放中的分组丢失 (a) final ACK lost (a) Response lost (a) Response lost and subsequent DRs lost DR-连接断开请求ACK-接受断开
14
8.4 流量控制和拥塞控制 面向连接的传输服务应该提供流量控制和拥塞控制功能,核心是滑动窗口算法
流量控制:根据接收方的缓存容量来动态地调整发送方的窗口大小,避免一个快速的发送方淹没一个慢速的接收方。 拥塞控制:根据网络的承载容量来动态地调整发送方的窗口大小,避免发送方同一时刻有太多未被确认接收的TPDU
15
8.4 Internet中的传输层协议 Internet中定义了两个不同的传输层协议
用户数据报协议(UDP:User Datagram Protocol) 传输控制协议(TCP:Transmission Control Protocol) 两个对等传输实体在通信时传送的数据单位称为传输协议数据单元(TPDU: Transport Protocol Data Unit) 在UDP中,TPDU称为数据报(datagram)TCP中,TPDU称为TCP数据段(segment)
16
UDP与TCP UDP提供无连接的服务,在传送数据之前不需要先建立连接。对方的传输层在收到 UDP数据报后,不需要给出任何确认。虽然 UDP 不提供可靠投递,但在某些情况下 UDP 是一种最简单有效的工作方式。例如视频点播等实时应用常使用UDP TCP 提供面向连接的服务。由于 TCP 要提供可靠的、面向连接的传输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的头标增加了更多的域,还要占用许多的处理机资源。
17
端口 端口就是传输服务访问点(TSAP)。
端口的作用就是让各种应用进程都能将其数据通过端口向下交付给传输层,以及让传输层知道应当将其数据段或者报文中的数据向上通过端口交付给应用层相应的进程。 从这个意义上讲,端口是用来标识应用进程。
18
基于端口的进程间通信 发送方 接收方 应用进程 应用进程 应 用 层 端口 端口 传 输 层
TCP 复用 UDP 复用 TCP 解复用 UDP 解复用 UDP 用户数据报 UDP 用户数据报 TCP 数据段 TCP 数据段 网 络 层 IP 复用 IP 解复用 IP 分组 IP 分组
19
端口号 端口用一个 16 bit 端口号进行标志,共64K个端口号对一台主机来说是足够的。
端口号只具有本地意义,即端口号只是为了标识本机上的各个应用进程。在Internet中不同主机的相同端口号是没有联系的。 端口号分为两类:一类是知名端口,其数值一般为 ,一般分配给一些常用的服务进程。另一类则是一般端口,用来随时分配给请求通信的客户进程。
20
8.4.1 用户数据报协议-UDP User datagram protocol,RFC 768 无连接的传输服务
不可靠(Unreliable) 高效率
21
UDP头标 字节 4 4 1 1 2 源 IP 地址 目的 IP 地址 17 UDP长度 字节 12 2 2 2 2 伪头标 源端口
协议 目的IP地址 源IP地址 IP伪头标 UDP头标 字节 4 4 1 1 2 源 IP 地址 目的 IP 地址 17 UDP长度 字节 12 2 2 2 2 伪头标 源端口 目的端口 长 度 检验和 UDP 用户数据报 UDP头标 数 据 发送在前 IP头标 数 据 IP 数据报
22
使用UDP协议传输消息
23
UDP应用 具有简单高效的特点 客户-服务器模式应用 话音、视频等实时多媒体应用 DNS:Domain Name System
RPC:Remote Procedure Call 话音、视频等实时多媒体应用
24
8.4.2 传输控制协议-TCP Transmission Control Protocol-RFC 793
TCP travels in IP datagrams Internet routers only look at IP header to forward datagrams TCP at destination interprets TCP messages
25
TCP连接 TCP 使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将 TCP 连接的端点称为套接口(socket),或套接字、插口。 套接口和端口、IP 地址的关系是: 端口号 1500 IP 地址 , 套接口(socket) 一条TCP连接是由发送方套接口和接收方套接口加上协议类型来唯一标识的,即TCP连接用五元组<源端IP地址、源端口号、目的IP地址、目的端口号、协议>来唯一标识。
26
TCP Features TCP具有以下特性 : 数据流传输(Stream Data Transfer) 可靠(Reliability)
全双工(Full Duplex) 复用(Multiplexing) 逻辑连接(Logical Connections) 流量控制(Flow Control) 拥塞控制(Congestion Control)
27
TCP Segment Format
28
TCP Segment Format 源端口/目的端口(Source/ Destination Port )
16位的端口号 序列号(Sequence Number ) 标识本数据段中第一个字节在数据流中的位置。 确认号(Acknowledgment Number) 标识本数据段的接收方下一个期待接收的字节编号。 头标长度(Header Length) 4bits 指明数据段的头标长度,单位是32位,随选项长度而定 保留(Reserved):6bits,置0
29
TCP Segment Format - 6 Flags
URG 指示紧急指针有效. ACK 指示确认段有效 PSH Push 操作,置1时,即将本段迅速发送 RST 重新连接. SYN 同步序列号,用于建立连接 FIN 发送方已发送完数据,用于释放连接
30
TCP Segment Format 窗口大小(Window size) 检验和(Checksum)
用于流量控制,窗口指示在对方确认了的字节之后还可发送的字节数。 检验和(Checksum) 用来检验TCP报头和数据的完整性,检验时,要加上伪IP头标 紧急指针(Urgent Pointer) 指向紧急数据的最后一个字节,该指针仅在URG置1时有效 选项(Options )
31
TCP在不可靠的IP上为应用进程提供可靠的数据传输服务
连接建立:在发送主机和接收主机之间协商初始序列号 连接管理:使用滑动窗口算法对数据传输进行管理,包括确认重发、流量控制和拥塞控制等 连接释放:数据传输结束后释放连接,发送主机和接收主机释放为该连接分配的资源
32
TCP采用三步握手的方法建立连接 客户请求连接TCP数据段:SYN置1,ACK置0,选择初始序列号SEQ=x
服务器响应连接TCP数据段:SYN置1,ACK置1,选择初始序列号SEQ=y,并且对x进行确认,设置ACK=x+1 客户响应连接TCP数据段: ACK置1,SEQ=x+1,对y进行确认,设置ACK=y+1 通过三步握手,host1和host2之间完成初始序列号、窗口大小、最大数据段尺寸等参数的协商,并且分配连接所需要的资源
33
TCP请求连接碰撞 使用三步握手,即使两台主机同时想在相同的套接口之间建立一个TCP连接而发生冲突,也可以正常工作。但此时只有一个TCP连接建立起来。因此TCP连接由五元组唯一标识。
34
TCP连接建立定时器 Connection Establishment Timer
当SYN数据段发出时,连接建立定时器就开始计时,如果在一定时间(例如65秒,可设置)内未收到响应,则连接建立失败。
35
TCP采用对称释放法释放连接 TCP的全双工连接可看成一个双单工的连接,每个单工连接都独立地释放。
通信双方必须都向对方发送FIN=1的TCP段并得到对方的应答,连接才能被释放,有四个阶段。 可以将第一个ACK数据段和第二个FIN数据段合并,从而变为三步握手。 为防止半连接,必须使用定时器计时,对FIN数据段的应答在两个最大分组生命期内未到达,就释放连接。对方也会超时释放。 FIN ACK of FIN Host1 Host2 Time
36
TCP释放连接相关定时器 保持存活定时器(Keep-Alive Timer):当一个连接长时间闲置时,保持存活定时器会超时而使一方去检测另一方是否仍然存在,如果它未得到响应,便终止该连接。 闲置定时器(Quiet Timer):当TCP连接断开后,为防止该连接上的数据段还在网络上,并被后续打开的相同五元组的连接接收,要设置闲置定时器以防止刚刚断开连接的端口号被立即重新使用。
37
TCP 滑动窗口(Sliding Window)
可靠有序的传输 使用发送缓存和接收缓存,只有被确认,窗口才滑动。 流量控制 接收方可根据可用剩余缓冲区来指定窗口大小,当缓冲区满,接收方可以发送一个窗口大小为0的数据段,指示发送方停止发送数据。但此时仍可以发送紧急数据 (如用户紧急停止进程)和一字节的通知对方更新窗口大小的数据段。
38
TCP滑动窗口举例 发送端要发送 900 字节长的数据,划分为 9 个 100 字节长的数据段,而发送窗口确定为 500 字节
发送端只要收到了对方的确认,发送窗口就可前移 发送 TCP 要维护一个指针。每发送一个数据段,指针就向前移动一个数据段的距离
39
发送端已发送了 400 字节的数据,但只收到对前 200 字节数据的确认,同时窗口大小不变。
现在发送端还可发送 300 字节
40
发送端收到了对方对前 400 字节数据的确认,但对方通知发送端必须把窗口减小到 400 字节。
现在发送端最多还可发送 400 字节的数据。
41
举例:利用可变窗口大小进行流量控制。设主机A向主机B发送数据,双方确定的窗口值是400字节。再设每一个数据段的长度是100字节,序号的初始值是1。
我们可以注意到,主机B进行了三次流量控制,第一将窗口减小为300字节,第二次又较少为200字节,最后减少到0,既不允许对方发送数据。直到主机B重新发出一个新的窗口值为止。 主机 A 主机 B SEQ = 1 A 还能发送 300 字节 SEQ = 101 A 还能发送 200 字节 SEQ = 201 丢失! ACK = 201, WIN = 300 允许 A 再发送 300 字节(序号 201 至 500) SEQ = 301 A 还能发送 200 字节(序号 301 至 500) SEQ = 401 A 还能发送 100 字节(序号 401 至 500) SEQ = 201 A 超时重发,但不能发送序号 500 以后的数据 ACK = 501, WIN = 200 允许 A 再发送 200 字节(序号 501 至 700) SEQ = 501 A 还能发送 100 字节(序号 601 至 700) ACK = 601, WIN = 0 不允许 A 再发送(到序号 600 的数据都已收到)
42
TCP滑动窗口管理
43
傻瓜窗口症状 Silly Window Syndrome
以下情况被称为傻瓜窗口症状: 当发送方的TCP每次接收到一字节的数据后就发送 当接收方的TCP缓冲区已满,接收方会向发送方发送窗口大小为0的数据,而此时接收方的应用进程以交互方式每次只读取一个字节,于是接收方又发送窗口大小为一个字节的更新数据段,发送方应邀发送一个字节的数据,于是窗口又满了,循环往复… 解决方法: 禁止发送方发送太小的数据段,而是等到有一定数量的数据后再发送,Nagle算法 禁止接收方发送1个字节大小的窗口更新信息,而是要等到有了一定数量的可用空间后再通知对方,Clark算法
44
TCP 重传定时器 TCP在发送数据的同时,启动一个重传定时器,如果在超时前该数据段被确认,就关闭该定时器,否则,一旦超时则重发该数据段。
45
问题:超时间隔( timeout )应设为多长呢?
解决的方法是对网络的性能不断测试,采用一种不断调整超时时间间隔的动态算法
46
Picking a Timeout Value
对每条连接,TCP均保存变量RTT,用于存放到目的端的往返时间的最接近估计值。 当一个数据发送时,同时启动定时器,如果时间超时就重发数据段,如果在超时之前得到确认,TCP就测量所花费的时间,记为M,并根据下面公式修正RTT RTT=RTT+(1- )M 是修正因子,一般为7/8 1988年Jacobson提出了另一个公式 D= D+(1- )|RTT-M| 这里的可能不同前面的 确定当前的超时间隔Timeout=RTT+4D 对已经重发的数据段无需修改RTT,而是在每次传输失败时将超时时间加倍,直到该数据段被成功传输——Karn算法。
47
ACK延时定时器 Delayed ACK Timer
当TCP实体收到数据段时它必须返回确认,但并不需要立即回复,它可以在(200ms?)内发送ACK数据段,如果在这段时间内它恰好有数据段要发送,它就可以在数据段内包含确认信息,因此需要ACK延时定时器。
48
持续定时器 The Persistence Timer
持续定时器管理的是一种较为少见的事件,即下面要介绍的死锁情况。为了让发送方暂停发送数据,接收方发送一个接收窗口为0的确认。后来,接收方又发送了一个更新了窗口大小的数据段,但该数据段丢失,于是,双方都处于等待。 为了防止上述事情发生,发送方在收到接收方发来一个窗口为0的数据段时,就启动持续定时器,等该定时器超时还没有收到对方修改窗口大小的数据段的话,发送方就发一个1字节的探测数据段,对该探测数据段的响应应包含了窗口大小,若仍为0,则定时器清0,否则则可以发送数据。
49
TCP流量控制与拥塞控制 发送端的主机在确定发送数据段的速率时,既要根据接收端的接收能力,又要从全局考虑不要使网络发生拥塞。
50
TCP拥塞控制 Congestion Control
什么是网络拥塞 当大量分组进入通信子网,超出了网络的处理能力时,就会引起网络局部或整体性能下降,这种现象称为拥塞。 拥塞表现为路由器的队列溢出,分组丢失 拥塞会导致什么后果 拥塞使许多分组重传 导致更多的业务量,直至崩溃 拥塞的原因 路由器的处理速度、存储空间、带宽不匹配 网络负载的不平衡
51
接收端窗口和拥塞窗口 每一个 TCP 连接需要维护两个窗口
接收端窗口 rwnd (receiver window) 又称为通知窗口(advertised window) 拥塞窗口 cwnd (congestion window) 接收端窗口 rwnd是接收端根据其目前的可用接收缓存大小所许诺的最新的窗口值,是来自接收端的流量控制。接收端将此窗口值放在 TCP 数据段头标中的窗口大小域传送给发送端。 拥塞窗口 cwnd 是发送端根据自己估计的网络拥塞程度而设置的窗口值
52
发送窗口 发送窗口的上限值: 发送窗口的上限值=Min[rwnd, cwnd]
当 cwnd < rwnd 时,则是网络的拥塞限制发送窗口的最大值。
53
TCP拥塞控制算法 慢启动(slow-start) 拥塞避免(congestion avoidance)
54
慢启动算法 在连接建立初期,拥塞窗口初始化为该连接最大数据段的长度
发送端发送一个最大数据段,得到确认后,其拥塞窗口大小加倍,依次类推,直到数据段传输超时或已达到接收端窗口大小(兼顾拥塞和流量控制)
55
for (each segment ACKed) Congwin += Congwin until (loss event OR
Host A Host B Slowstart algorithm one segment RTT initialize: Congwin = 1 for (each segment ACKed) Congwin += Congwin until (loss event OR CongWin > threshold) two segments four segments exponential increase in window size (not so slow!) loss event: timeout and/or three duplicate ACKs time
56
TCP拥塞控制算法过程 当一个连接初始化时,将拥塞窗口置为一个最大数据段长度,并设置慢启动阈值ssthresh。
发送端的发送窗口不能超过拥塞窗口和接收窗口中的最小值,并假定接收端不进行流量控制。 发送端若收到了对所有发出的数据段的确认,就在下一次发送时将拥塞窗口加倍。可见拥塞窗口从1开始按指数规律增长 拥塞窗口增长到ssthresh时,就每次将拥塞窗口加1,使拥塞窗口按线性规律增长 如果出现超时,就将当时拥塞窗口值减半,作为新的ssthresh,同时将拥塞窗口变为1 重复上述过程 慢启动 拥塞避免
57
TCP拥塞控制算法实例 慢启动 1
58
Summary TCP provides end-to-end reliable byte-stream delivery
IP used for delivery to destination host Protocol ports demultiplex to destination application Positive acknowledgement with retransmission Sequence numbers detect missing, duplicate and out-of-order data Sliding window flow control Three-way handshake Congestion control
59
8.5 Berkeley Socket Socket的产生和发展 Socket在各种平台下的发展
最初在70年代由加州大学Berkeley分校开发,其目的是为BSD(Berkeley Software Distribution) UNIX 4.1版操作系统提供网络通信接口。 Socket在各种平台下的发展 随着Berkeley Sockets的广泛应用,九十年代初,Sun、MS等公司共同制定了适应dos和win平台的windows sockets的规范(WinSock) Sun Microsystems为Java也制定了网络通信的API Linux下的socket继承了BSD sockets的风格,但有所改动
60
Socket原语 TCP UDP IP Application Sockets API Transport TCP套接字原语 My
含义 SOCKET 创建一个新的通信端点 BIND 将一个本地地址关联到一个套接字上 LISTEN 宣布愿意接收连接,给出队列大小 ACCEPT 阻塞调用方,直到有人企图连接上来 CONNECT 主动尝试建立一个连接 SEND 在指定的连接上发送数据 RECV 从指定的连接上接收数据 CLOSE 释放指定的连接 Application Transport Network (Internet) Data-link (Host-to-Network) Sockets API TCP UDP My Program IP TCP套接字原语
61
Socket到Socket的通信 Client Process socket Server Process socket ports TCP/UDP ports TCP/UDP IP IP 在TCP/IP网络应用中,两个进程间的Socket通信的主要采用客户/服务器(Client/Server,C/S)模式,即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务
62
客户需要知道服务器使用的IP地址、端口等信息
从上面所描述过程可知: 客户与服务器进程的作用是非对称的,因此编码不同。 服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。 客户需要知道服务器使用的IP地址、端口等信息
63
TCP Client-Server交互流程
TCP Server socket() bind() TCP Client listen() socket() accept() 建立连接 connect() 请求数据 recv() send() 响应数据 send() recv() 文件结束标识 recv() closesocket() closesocket()
64
UDP Client-Server交互流程
65
小结 掌握传输层基本功能,特别是Internet的传输层协议TCP和UDP,以及连接建立机制、流量控机制、拥塞控制机制。
基于Socket的客户/服务器编程 作业 请比较数据链路层和TCP的滑动窗口机制有什么不同,并说明为什么会有这些不同. 书:20, 23, 25, 28, 33
Similar presentations