|
1 | 1 |
|
2 | 2 | * [<a href="#">UDP 和 TCP 的特点</a>](#udp-和-tcp-的特点) |
3 | | - * [<a href="#">UDP</a>](#udp) |
4 | | - * [<a href="#">TCP</a>](#tcp) |
| 3 | + * [<a href="#">UDP</a>](#udp) |
| 4 | + * [<a href="#">TCP</a>](#tcp) |
5 | 5 | * [<a href="#">三次握手</a>](#三次握手) |
6 | | - * [<a href="#">流程</a>](#流程) |
7 | | - * [<a href="#">为什么需要三次握手</a>](#为什么需要三次握手) |
| 6 | + * [<a href="#">流程</a>](#流程) |
| 7 | + * [<a href="#">为什么需要三次握手</a>](#为什么需要三次握手) |
8 | 8 | * [<a href="#">四次挥手</a>](#四次挥手) |
9 | | - * [<a href="#">流程</a>](#流程-1) |
| 9 | + * [<a href="#">流程</a>](#流程-1) |
10 | 10 | * [<a href="#">TCP怎么保障可靠传输</a>](#tcp怎么保障可靠传输) |
11 | | - * [<a href="#">数据合理分片和排序</a>](#数据合理分片和排序) |
12 | | - * [<a href="#">数据校验:校验和</a>](#数据校验校验和) |
13 | | - * [<a href="#">TCP 的接收端会丢弃重复的数据</a>](#tcp-的接收端会丢弃重复的数据) |
14 | | - * [<a href="#">超时重传</a>](#超时重传) |
15 | | - * [<a href="#">流量控制</a>](#流量控制) |
16 | | - * [<a href="#">拥塞控制</a>](#拥塞控制) |
17 | | - * [<a href="#">ARQ协议</a>](#arq协议) |
18 | | - |
| 11 | + * [<a href="#">数据合理分片和排序</a>](#数据合理分片和排序) |
| 12 | + * [<a href="#">数据校验:校验和</a>](#数据校验校验和) |
| 13 | + * [<a href="#">TCP 的接收端会丢弃重复的数据</a>](#tcp-的接收端会丢弃重复的数据) |
| 14 | + * [<a href="#">超时重传</a>](#超时重传) |
| 15 | + * [<a href="#">流量控制</a>](#流量控制) |
| 16 | + * [<a href="#">拥塞控制</a>](#拥塞控制) |
| 17 | + * [<a href="#">ARQ协议</a>](#arq协议) |
| 18 | +* [HTTP长连接还是短连接?](#http长连接还是短连接) |
| 19 | +* [参考文章](#参考文章) |
19 | 20 |
|
20 | 21 | ## [UDP 和 TCP 的特点](#) |
21 | | -- ### [UDP](#) |
22 | | - - 是无连接的,尽最大可能交付,没有拥塞控制,面向报文 (对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多 |
23 | | -的交互通信。 |
24 | | -- ### [TCP](#) |
25 | | - - 是面向连接的,提供可靠交付,有流量控制,拥塞控 制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据 |
26 | | -块),每一条 TCP 连接只能是点对点的(一对一)。 |
27 | | ---- |
| 22 | +### [UDP](#) |
| 23 | +是无连接的,尽最大可能交付,没有拥塞控制,面向报文 (对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多 的交互通信。 |
| 24 | +### [TCP](#) |
| 25 | +是面向连接的,提供可靠交付,有流量控制,拥塞控 制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据 块),每一条 TCP 连接只能是点对点的(一对一)。 |
28 | 26 | ## [三次握手](#) |
29 | | -- ### [流程](#) |
| 27 | +### [流程](#) |
30 | 28 |  |
31 | 29 |
|
32 | 30 | 1. 客户端–发送带有 SYN 标志的数据包–一次握手–服务端 |
|
41 | 39 |
|
42 | 40 | - 第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。 |
43 | 41 |
|
44 | | ---- |
45 | 42 | ## [四次挥手](#) |
46 | | -- ### [流程](#) |
| 43 | +### [流程](#) |
47 | 44 |  |
48 | 45 |
|
49 | 46 | 1. 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送 |
|
57 | 54 | - 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。 |
58 | 55 | - 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。 |
59 | 56 |
|
60 | | ---- |
61 | | - |
62 | 57 | ## [TCP怎么保障可靠传输](#) |
63 | 58 |
|
64 | 59 | ### [数据合理分片和排序](#) |
|
145 | 140 | - 优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。 |
146 | 141 | - 缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。 |
147 | 142 |
|
| 143 | +## HTTP长连接还是短连接? |
| 144 | +在HTTP/1.0中,默认使用的是短连接 |
| 145 | +- 也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。 |
148 | 146 |
|
| 147 | +HTTP/1.1起,默认使用长连接,用以保持连接特性 |
| 148 | +- Connection:keep-alive |
| 149 | +- 在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接 |
149 | 150 |
|
150 | | - |
| 151 | +# 参考文章 |
| 152 | +- https://www.cnblogs.com/0201zcr/p/4694945.html |
0 commit comments