传输层协议——TCP、UDP
最佳答案 问答题库598位专家为你答疑解惑
目录
1、UDP 协议(用户数据报协议)
协议特点
报文首部格式
2、TCP 协议(传输控制协议)
协议特点
报文首部格式
TCP连接建立时的三次握手
TCP拆除连接的四次挥手
TCP的流量控制
TCP的拥塞控制
3、传输层端口号
三类端口号
一些熟知端口号
协议类型是否面向连接是否可靠传输效率开销通信方式UDP否否高小单点/多点 到 单点/多点TCP是是低大点到点
1、UDP 协议(用户数据报协议)
协议特点
- 无连接
- 面向报文
- 首部开销小(8字节)
- 尽最大努力交付,不保证可靠,不提供拥塞控制
- 支持 一 or 多 对 一 or 多 通信
报文首部格式
2、TCP 协议(传输控制协议)
协议特点
- 面向字节流(将应用层交下来的数据当成字节来处理,并对其进行相应的编号)
- 面向连接
- 每一条 TCP 连接只有两个端点(一对一的连接)
- 保证可靠交付
- 可以全双工通信
报文首部格式
源端口和目的端口的取值为0~65535;
序号(seq)表示本报文段的数据的第一个字节的序号,取值为 0 ~ - 1;
确认号(ack)表示期望收到对方下一个报文段的第一个数据字节的序号,取值为 0 ~ - 1;
数据偏移 表示TCP首部的长度,可以方便地识别出数据段的起始位置,最小长度为5(0101),单位是字节,则首部的最小长度为20字节;
紧急指针 当 URG 位为 1 时,此字段有效,并会指出需要紧急发送的数据;
填充字段 长度可变,用于确保TCP报文的首部长度为 4 字节的整数倍;
字段占位说明控制字段URG(1bit)紧急位;当为1时表示有数据要紧急发送ACK(1bit)确认位;这里是大写,与确认号(小写ack)区分开来;当为1时确认字段有效,表示肯定应答PSH(1bit)推送位;置为1时,立即发送TCP报文RST(1bit)复位位;置为1时表示TCP连接有严重错误,需要重新建立连接;也可以用于拒绝一个连接SYN(1bit)同步位;置为1时,表示正在建立一个TCP连接FIN(1bit)终止位;置为1时,表示正在释放一个TCP连接窗口16 bit接收空闲窗口值,用于实现TCP流量控制TCP连接建立时的三次握手
三次握手的作用是为了避免产生错误的连接
主机 A 向服务器 B 发送 SYN 表示请求建立一个 TCP 连接,即便是没有数据,也要消耗一个 seq。此时直到没有收到目标服务器第一次回应前,主机 A 处于SYN-SENT 状态。
服务器 B 在没有接收到TCP连接请求前,属于 LISTEN 的监听状态。
服务器响应给主机 A SYN,表示也向主机 A 请求建立一个连接,ACK=1 表示同意了刚才主机 A 的连接请求,服务器 B 也要消耗一个 seq,seq = y,ack = x + 1,表示确认了刚刚主机发送过来的数据内容,并且提出期望,希望主机 A 下次发送消息给服务器 B 时的 seq 为 x + 1。此时服务器 B 需要等待主机 A 的响应,此时也转变到 SYN-SENT 状态。
主机 A 接收到服务器B的回应,再回应服务器 B ,ACK=1 表示确认了服务器 B 的TCP建立请求,响应服务B的期望,即便展示还没有数据,也发送一个seq,seq = x + 1,同时 ack = y + 1,也是对刚刚服务器 B 发送过来的内容的一个确认,同时也提出期望,希望服务型下次发送消息时的 seq 为 y + 1。同时将状态设置为 ESTABLISHED,表示已经建立起连接。
服务器 B ,收到主机 A 的响应,确认无误后也将状态设置为 ESTABLISHED,表示TCP连接成功建立。
此时主机 A 和服务器 B 已经建立起了一条TCP连接,双方可以正常进行数据传送。
状态说明SYN-SENT发送了SYN请求,请求建立TCP连接的第一步LISTEN监听SYN报文的状态SYN-RCVD接收到SYN请求报文后的状态ESTABLISHEDTCP连接建立成功的状态TCP拆除连接的四次挥手
当主机 A 发送 FIN = 1 (断开连接)标志后,它会进入 FIN-WAIT-1 状态,等待对方确认关闭。当主机收到对方的 ACK = 1(确认)标志后,主机 A 会进入 FIN-WAIT-2 状态。此时,主机 A 已经断开了到对方的连接,但尚未完全断开TCP连接,仍等待对方发送 FIN 标志以确认对方的关闭。
只有在主机 A 收到对方的 FIN 标志并发送 ACK 标志确认后,才会进入 TIME-WAIT 状态,此时主机才真正关闭了TCP连接。
状态说明FIN-WAIT-1发送了第一个 FIN 请求,等待对方确认FIN-WAIT-2等待对方的 FIN 请求CLOSE-WAIT等待自己进程发出断开连接的命令LAST-ACK等待对方最后一次确认TIME-WAIT等待足够的时间,以确保对方接收到了确认CLOSED关闭状态TCP的流量控制
流量控制是针对两端之间的通信的。考虑的是发送方和接收方之间的数据传输速率之间的差异。
TCP流量控制是通过可变大小的滑动窗口机制实现的。即 让数据发送端传输的速率不要太快,让数据接收端来得及接收。
数据传输窗口 win 在连接建立时由双方商定。但在通信的过程中,数据接收端可根据自己的资源情况,随时动态地调整对方的传输窗口大小。(上面经过协商后,窗口大小为3)
接收端将此窗口值放在 TCP 报文的首部中的窗口字段,传送给发送端。
接收方通常会在接收到数据后立即发送一个 ACK 报文,确认收到数据并通知发送方此时窗口的大小。如果接收方的缓冲区已满,它会将窗口大小设置为0,发送方就会停止发送数据。当接收方处理完数据后,它会将窗口大小设置为一个大于 0 的值,并发送 ACK 报文通知发送方,以便发送方继续发送数据。
TCP的拥塞控制
拥塞控制是针对整个网络的通信而言的,考虑的是网络中的各个路由器和线路的资源利用情况,以避免因过多的数据流量导致网络拥塞。
四种常见的拥塞控制方法:
- 慢开始
- 拥塞避免
- 快重传
- 快恢复
拥塞窗口(cwnd):是发送方维护的一个状态变量,其大小取决于网络的拥塞程度,并且会动态变化;
慢开始门限(ssthresh):为了防止拥塞窗口 cwnd 的增长过大而引起网络拥塞所设置的一个门限值;
cwnd < ssthresh执行慢开始算法cwnd = ssthresh可以使用慢开始算法,也可以使用拥塞避免算法cwnd > ssthresh使用拥塞避免算法慢开始:每经过一个传输轮次,cwnd 的值都会加倍,从小到大增大 cwnd;
拥塞避免:每经过一个传输轮次,cwnd 的值都会加 1,从小到大缓慢增大 cwnd;
快重传:接收方每收到一个失序报文段后就会立即发出重复确认 ACK,若发送方一连收到三个重复确认,就会立即重传对方尚未收到的报文段。因此能尽早重传未被确认的报文,而不是等待超时;
快恢复:当发送方连续收到三个重传确认 ACK 时,就执行乘法减小算法,把门限值减半(当前 cwnd值的一半),同时把 cwnd 值设置为减半后的门限值,并执行拥塞避免算法;
乘法减小:出现超时(可能是拥塞时),则 ssthresh 减半(当前 cwnd 值的一半),同时执行慢开始算法;
加法增大:执行拥塞避免算法,使 cwnd 增大;
如上图,初始慢开始门限为16,cwnd 从 1 开始,每当发送方接收到一个 ACK 确认报文时,都会使 cwnd 增大(在达到门限值前使用慢开始算法增大)。
[① ~ ②] 当到达门限值后,改用避免拥塞算法来缓慢增大 cwnd;
[② ~ ③] cwnd = 24 时发生超时,则门限减半,即 ssthresh = 12,然后下一次接收到 ACK 确认报文时,cwnd 从 1 开始,使用慢开始算法来递增;
[③ ~ ④] cwnd = 12 时,到达了门限,则改用拥塞避免算法缓慢递增;
[④ ~ ⑤] 到 ④ 时,cwnd = 16,发送方一连收到三个重复确认,则门限减为当前 cwnd 的一半,即 ssthresh = 8,而 cwnd 变为与门限值一致;
[⑤ ~] 由于cwnd = ssthresh,开始采用避免拥塞算法来进行增加;
3、传输层端口号
三类端口号
- 熟知端口 0 ~ 1023
- 登记端口 1024 ~ 49151
- 客户端口号 49152 ~ 65535
一些熟知端口号
端口号服务类型TCP 20文件传输协议(数据)TCP 21文件传输协议(控制)TCP 22SSH 远程登录与会话TCP 23Telnet 终端仿真协议TCP 25SMTP 简单邮件发送协议TCP 80超文本传输协议(HTTP)TCP 110POP3 服务器(邮箱接收服务器)TCP 443安全超文本传输协议(HTTPS) 端口号服务类型UDP 53域名服务器(DNS)UDP 67DHCP(服务端)UDP 68DHCP(客户端)UDP 69简单超文本传输协议(TFTP)UDP 161SNMP(轮询)UDP 162SNMP(陷阱)UDP 520RIP 路由协议99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"传输层协议——TCP、UDP":http://eshow365.cn/6-15956-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: Docker---cgroups资源限制
- 下一篇: 数据结构和算法——数据结构