| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 哈工大计算机网络第三章——传输层复习 -> 正文阅读 |
|
[网络协议]哈工大计算机网络第三章——传输层复习 |
目录 1. 传输层服务传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制。通过逻辑通信,不同进程好像直接相连一样。 传输层协议是在端系统中实现的(不是路由器)。 发送端将从发送应用程序进程结成到的报文分成一个或多个Segment(报文段),向下传给网络层。网络层将其封装为网络层分组(数据报)向目的地发送。接收端从数据报中提取传输层报文段,并将该报文段上交给传输层。接收方的传输层将接收到的segment组装成消息, 并向上交给应用层。 传输层与网络层的关系 网络层提供主机之间的逻辑通信机制,传输层提供应用进程之间的逻辑通信机制,位于网络层之上 ,同时依赖于网络层服务,对网络层服务进行(可能的)增强。 传输层协议 进程到进程的数据交付和差错检测是两种最低限度的传输层服务。 TCP:可靠的,面向连接的,提供拥塞控制和流量控制,可以进行连接的建立与删除 UDP:不可靠的,不能保证数据完整无缺地到达,基于“尽力而为(Best-effort)”的网络层(IP服务模型) 2. 多路复用与多路分用如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用。(不止传输层有) 在应用层中讲过,进程使用套接字作为与网络的接口。传输层在传输数据时,并没有将数据交付给进程,而是交付给了一个中间的套接字。主机上有多个进程,一个进程有一个或多个套接字,套接字有唯一的标识符。传输层的报文段需要定向地到适当的套接字,则传输层的报文段需要有几个字段。 多路分用:接收端传输层检查这些字段,将报文段定位到对应的套接字。(数据交付到正确的套接字) 多路复用:源主机从不同套接字收集数据块并为每个数据块封装首部信息生成报文段,然后将报文段传递到网络层。 工作原理 增加字段:源端口号和目的端口号(UDP、TCP还有其他字段,见下文)。在IP数据报中携带源IP地址、目的IP地址和传输层的数据段,在数据段中携带源端口号和目的端口号。 传输层的报文段字段如下: ?主机接收到报文段后,传输层协议检查报文段中的目的端口号,将其定位到对应的套接字。 无连接分用 UDP的Socket用二元组标识 ,二元组为(目的IP地址,目的端口号)。主机收到UDP段后,检查段中的目的端口号,将UDP段导向绑定在该端口号的 Socket 。只要目的IP地址,目的端口号相同,来自不同源IP地址或源端口号的 IP数据包均被导向同一个Socket。 ?面向连接的分用 TCP的Socket用四元组标识,为(源IP地址,源端口号,目的IP地址,目的端口号)。接收端使用四个字段来将报文段导向合适的套接字。与UDP不同,两个不同的源IP地址或源端口号的TCP报文段会被定向给不同的套接字。服务器主机可以同时支持多个并行的TCP套接字,Web服务器也为不同的客户端开不同的套接字。 3. UDP协议UDP做了传输层协议最少的工作。除了复用/分用以及少量的差错检测外,几乎没有对IP增加新的东西。选择使用UDP,差不多相当于直接使用IP。UDP从应用进程获取数据后,加上用于复用/分用的源和目的端口号和两个字段后,就将报文段给网络层了。 UDP采用“Best effort”服务,可能出现丢失与非按序到达。是一种无连接状态,UDP发送方与接收方之间不需要握手(建立连接),每个UDP处理都独立与其他段(互相独立)。 UDP的意义 ? 无需建立连接 (减少延迟) ? 实现简单:无需维护连接状态 ? 头部开销少(UDP8字节,TCP20字节) ? 没有拥塞控制: 应用可更好地控制发送时间和速率 UDP用处 ?常用于流媒体应用(容忍丢失,速率敏感) ?UDP还用于DNS 、SNMP 在UDP上实现可靠数据传输 ? 在应用层增加可靠性机制 ? 应用特定的错误恢复机制 UDP报文段结构 长度字段:UDP报文段中的字节数(首部+数据) 校验和:检查是否出现了差错。实际计算时,除了UDP报文段歪还包括IP首部的一些字段。 UDP校验和 目的:检测UDP段在传输中是否发生错误(如位翻转) ?发送方将段的内容视为16-bit整数。在计算校验和时,计算所有整数的和 ,进位加在和的后面,将得到的值按位求反,得到校验和。发送方将校验和放入校验和字段 ?接收方计算所收到段的校验和,将其与校验和字段进行对比。不相等,则检测出错误;相等,则没有检测出错误(但可能有错误)。在实际使用时,可采用所有字段相加的方式,与0xFFFF比较是否相等的方式(实验3使用) UDP校验和计算包括伪头、UDP头部和应用层数据。
17代表协议为UDP。最后8位用于补足、对齐。结构如下: 4. 可靠数据传输原理可靠数据传输对传输层、链路层和应用层都很重要,是网络Top-10问题。信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性。 可靠数据传输协议的基本结构——接口 上侧两个为单向箭头,发送方应用层数据交给TCP后由TCP全权处理。同样的,接收方的RDT需要将数据处理好后再上传给应用层。 下侧为双向箭头,代表着双向的控制信息流动。 我们仅考虑单向的数据传输,但是RDT的发送和接受方都要调用udt_send()发送分组,控制信息是双向的。使用FSM刻画传输层协议。 FSM:有限状态自动机,横线上为引起状态改变的数据,下面为对应的活动。 rdt 1.0 可靠信道上的可靠数据数据传输 假设底层信道完全可靠,不会发生错误,与不会丢失分组。发送方和接收方的FSM相互独立。 rdt 2.0 可能产生位错误的信道 底层信道可能翻转分组中的位,利用校验和检测位错误。引入确认机制,接收方显示地告知发送方分组被正确接收。当返回NAK时,意味着分组错误,发送方收到NAK后,重传分组。 相对1.0引入的新机制:1. 差错检测 2. 接收方反馈 3. 重传 对应的FSM 发送方: ? 接收方: rdt 2.1 应对ACK/NAK破坏 对ACK/NAK同样引入校验和机制。ACK/NAK被破坏,发送方不能简单重传,会产生重复分组。 解决重复分组问题:发送方给每个分组一个序列号,接收方丢弃重复分组。 发送方: ? 接收方: (接收方的右边rdt_rcv(rcvpkt) && (corrupt(rcvpkt)触发事件与左边一致,图中未标出) rdt 2.2 无NAK消息协议 只使用ACK,接收方通过ACK告知最后一个被正确接收的分组,ACK中显式地加入确认分组地序列号。收到重复ACK,重传当前分组。 ?rdt 3.0 丢失分组错误 发送方等待合理时间,如果没收到ACK,重传。如果分组或ACK只是延迟而不是丢了,重传会产生重复,序列号机制能够处理。接收方需在ACK中显式告知所确认的分组 需要定时器 发送方的FSM 停等操作能正确实现,但性能很差。发送方利用率为发送方发送时间百分比,计算如下(假设ACK很小): ?若考虑ACK的传输: 滑动窗口协议 引入流水线机制,提高资源利用率。允许发送方再收到ACK前连续发送多个分组。因此需要更大的序列号范围,接收方和发送方都需要更大的存储空间来缓存分组。 窗口为允许使用的序列号范围,窗口尺寸为N,意味着最多有N个等待确认的消息。滑动窗口是指随着协议的运行,窗口在序列号空间内向前滑动 滑动窗口协议的信道利用率:Ws为发送窗口大小 ? GBN 发送方采用累计确认的方式。收到ACK(n),意味着序列号n(包含n)的分组均已被正确接收。可能收到重复的ACK。引入超时事件。 接收方发送拥有最高序列号的、已被正确接收的分组的ACK,同样可能产生重复ACK。只需要记住唯一的expectedseqnum。对乱序到达的分组,直接丢弃(接收方没有缓存 )。重新确认序列号最大的、按序到达的分组。 SR 接收方对每个分组单独进行确认。设置缓存机制,缓存乱序到达的分组。 发送方只重传那些没收到ACK的分组,为每个分组设置定时器。 发送方窗口为N个连续的序列号,限制已发送且未确认的分组 SR的序列号空间大小与窗口尺寸需要满足一定关系 对GBN,Wr = 1,对?典型的SR,Wr = Ws, 对停等?Wr = Ws = 1, k>=1 5. TCP协议
TCP报文结构 序列号和ACK序列号:实现可靠数据传输 接收窗口号:流量控制 首部长度:通常,选项字段为空,TCP首部字段为20字节。 ACK:指示确认字段中值有效 RST、SYN、FIN:连接建立与拆除 序列号和ACK 序列号指的是segment中第一个字节的编号, 而不是segment的“连续”编号。建立TCP连接时,双方随机选择序列号 。ACKs为希望接收到的下一个字节的序列号。采用累计确认的方式,该序列号之前的所有字节均已被正确接收到。 可靠数据传输 TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务,引入流水线机制,采用累积确认 的方式。TCP使用单一重传定时器。 触发重传的事件 1. 超时 2. 收到重复ACK? 超时与RTT 超时时间需大于RTT,但是RTT是变化的。若设置过短,会导致不必要的重传。若设置过长,则对段丢失时间反应慢 估计RTT:首先计算SampleRTT,忽略段的重传,测量从段发出去到收到ACK的时间。 SampleRTT会有变化,在变化时采用测量多个SampleRTT,求平均值, 形成RTT的估计值EstimatedRTT的方式。 定时器超时时间设置为 EstimatedRTT + “安全边界”。在EstimatedRTT变化大时采用较大的边界。测量RTT的变化值来确定边界,即计算?SampleRTT与EstimatedRTT的差值。 定时器超时时间的设置:TimeoutInterval = EstimatedRTT + 4*DevRTT 超时事件:重传引起超时的Segment 并重启定时器 收到ACK:如果确认此前未确认的Segment,更新SendBase,如果窗口中还有未被确认的分组, 重新启动定时器 ? 快速重传机制 如果发送方收到对同一数据的3个ACK,则假定该数据之后的段已经丢失 快速重传:在定时器超时之前即进行重传 TCP流量控制 目的:发送方不会传输太多、太快以至于使接收方buffer溢出 接收方为TCP连接分配buffer。假设TCP接收方丢弃乱序到达分组,buffer中可用空间用RcvWindow表示。接收方在报文段的头部字段将RcvWindow告诉发送方。发送方限制自己已经发 送的但还未收到ACK的数据不超过接收方的空闲 RcvWindow尺寸。若Receiver告知Sender RcvWindow=0,则发送方也会发送很小的数据段。 TCP连接控制 连接建立:三次握手机制 1. 客户端向服务器发送一个特殊的TCP报文段,其中SYN段被置为1,同时随机选择一个初始序号,不包含任何应用层数据。 2. TCP SYN报文段达到服务器,服务器为TCP连接分配缓存和变量,并向客户端发送SYNACK报文段。报文段SYN字段为1, 确认号(ack_seq)为(1)的随机序号加一,服务器再选择自己的随机初始序号(seq) 3. 客户端收到SYNACK报文段,发送另外一个报文段。这个报文段SYN置为0,将服务器随机值加一作为首部的确认号,来实现对服务器允许连接报文段的确认。 ?连接拆除: Step 1: client向server发送TCP FIN 控制segment Step 2: server 收到FIN, 回复ACK. 关闭连接, 发送 FIN. Step 3: client 收到FIN, 回复ACK. ? 进入“等待” ,如果收到FIN,会重新发送ACK Step 4: server收到ACK. 连接关闭. 6. 拥塞控制拥塞控制方法 ?端到端拥塞控制: ? 网络层不需要显式的提供支持 ? 端系统通过观察loss,delay等网络行为判断是否发生拥塞 ? TCP采取这种方法 ?网络辅助的拥塞控制: ? 路由器向发送方显式地反馈网络拥塞信息 ? 简单的拥塞指示(1bit):SNA, DECbit, TCP/IP ECN, ATM) ? 指示发送方应该采取何种速率 ATM拥塞控制方法 ?ABR:available bit rate 使用“弹性服务”。如果发送方路径 “underloaded”,使用可用带宽。如果发送方路径拥塞,将发送速率降到最低保障速率 ?RM(resource management) cells 由发送方发送,交换机设置RM cell位(网络辅助):NI bit: 速率不许增长、 CI bit: 拥塞指示。 RM cell由接收方返回给发送方 ? ? 在RM cell中有显式的速率(ER)字段,由两个字节表示。拥塞的交换机可以将ER置为更低的值,发送方获知路径所能支持的最小速率 ? 数据cell中的EFCI位: 拥塞的交换机将其设为1 。如果RM cell前面的data cell的EFCI位被设为1,那么接收方在返回的RM cell中置 CI位 TCP拥塞控制方法 TCP发送方限制发送速率:跟踪一个额外的变量CongWin,LastByteSent-LastByteAcked <= CongWin。其中CongWin可以动态调整以改变发送速率,反映所感知到的网络拥塞 感知网络拥塞:Loss事件=timeout或3个重复 ACK 。发生loss事件后,发送方降低速率 合理地调整发送速率:加性增—乘性减: AIMD 和慢启动: SS AIMD: 原理:逐渐增加发送速率,谨慎探测可用带宽,直到发生loss 方法 ? Additive Increase: 每个RTT将CongWin增大一个MSS——拥塞避免 ? Multiplicative Decrease: 发生loss后将CongWin减半 SS:原理:连接建立后,指数级增长 Threshold变量:Loss事件发生时, Threshold 被设为Loss事件前CongWin 值的1/2。 3个重复ACKs表示网络还能够传输一些 segments,而timeout事件表明拥塞更为严重 当CongWin小于Threshold时,在慢启动阶段,指数级增长。 当CongWin大于Threshold时,进入拥塞避免阶段,线性增长。 当收到3个重复ACK时,进入快速恢复阶段,将Threshold更新为当前CongWin的一半,CongWin只下降一半,到Threshold 当发生超时时,将Threshold更新为当前CongWin的一半,并把CongWIn设置为1 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:32:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |