@@ -115,37 +115,42 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中
115115** 假设 A 为客户端,B 为服务器端。**
116116
117117- 首先 B 处于 LISTEN(监听)状态,等待客户的连接请求。
118- - A 向 B 发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号 x。
119- - B 收到连接请求报文段,如果同意建立连接,则向 A 发送连接确认报文段,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 y。
120- - A 收到 B 的连接确认报文段后,还要向 B 发出确认,确认号为 y+1,序号为 x+1。
121- - A 的 TCP 通知上层应用进程,连接已经建立。
118+ - A 向 B 发送连接请求报文段,SYN=1,ACK=0,选择一个初始的序号 seq = x。
119+ - B 收到连接请求报文段,如果同意建立连接,则向 A 发送连接确认报文段,SYN=1,ACK=1,确认号为 x+1,同时也选择一个初始的序号 seq = y。
120+ - A 收到 B 的连接确认报文段后,还要向 B 发出确认,确认号为 ack = y+1,序号为 seq = x+1。
121+ - A 的 TCP 通知上层应用进程,连接已经建立。
122122- B 收到 A 的确认后,连接建立。
123- - B 的 TCP 收到主机 A 的确认后,也通知其上层 应用进程 :TCP 连接已经建立。
123+ - B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程 :TCP 连接已经建立。
124124
125125
126126
127- ### (2)三次握手的原因
127+ ### (2)为什么TCP连接需要三次握手,两次不可以吗,为什么?
128128
129- 第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
129+ ** 为了防止已失效的连接请求报文段突然又传送到了服务端,占用服务器资源。 (假设主机A为客户端,主机B为服务器端)**
130+
131+ 现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到B。本来这是一个已失效的报文段。但是B收到此失效的连接请求报文段后,就误认为是A有发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。
132+
133+ 由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。
130134
131- 失效的连接请求是指:客户端发送的连接请求在网络中滞留,客户端因为没及时收到服务器端发送的连接确认,因此就重新发送了连接请求。滞留的连接请求并不是丢失,之后还是会到达服务器。如果不进行第三次握手,那么服务器会误认为客户端重新请求连接,然后打开了连接。但是并不是客户端真正打开这个连接,因此客户端不会给服务器发送数据,这个连接就白白浪费了 。
135+ 采用三次握手的办法可以防止上述现象的发生。例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接 。
132136
133137
134138
135139### (3)四次挥手
136140
137141<div align =" center " > <img src =" pics/tcp-4.png " width =" " /> </div ><br >
138142
143+ 数据传输结束后,通信的双方都可释放连接。现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP连接。
139144
140-
141- 以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。
142-
143- - A 发送连接释放报文段,FIN=1。
144- - B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
145+ - A 把连接释放报文段首部的 FIN = 1,其序号 seq = u,等待 B 的确认。
146+ - B 发出确认,确认号 ack = u+1,而这个报文段自己的序号 seq = v。(TCP 服务器进程通知高层应用进程)
147+ - 从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 能向 A 发送数据但是 A 不能向 B 发送数据。
145148- 当 B 不再需要连接时,发送连接释放请求报文段,FIN=1。
146149- A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL 时间后释放连接。
147150- B 收到 A 的确认后释放连接。
148151
152+
153+
149154### (4)四次挥手的原因
150155
151156客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
@@ -161,37 +166,22 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中
161166- 确保最后一个确认报文段能够到达。如果 B 没收到 A 发送来的确认报文段,那么就会重新发送连接释放请求报文段,A 等待一段时间就是为了处理这种情况的发生。
162167- 等待一段时间是为了让本连接持续时间内所产生的所有报文段都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文段。
163168
164-
169+
170+
165171
166172### (6)如何保证可靠传输
167173
168174- 应用数据被分割成TCP认为最适合发送的数据块。
169- - 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
175+ - ** 超时重传** :当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
170176- TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
171- - 校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
177+ - ** 校验和** :TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
172178- TCP的接收端会丢弃重复的数据。
173- - 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
174- - 拥塞控制:当网络拥塞时,减少数据的发送。
175-
176-
179+ - ** 流量控制** :TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
180+ - ** 拥塞控制** :当网络拥塞时,减少数据的发送。
177181
178182
179183
180- ### (7)为什么TCP连接需要三次握手,两次不可以吗,为什么?【阿里面经OneNote】
181-
182- ** 为了防止已失效的连接请求报文段突然又传送到了服务端,占用服务器资源。 (假设主机A为客户端,主机B为服务器端)**
183-
184- 现假定出现一种异常情况,即A发出的第一个连接请求报文段并没有丢失,而是在某些网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到B。本来这是一个已失效的报文段。但是B收到此失效的连接请求报文段后,就误认为是A有发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。假定不采用三次握手,那么只要B发出确认,新的连接就建立了。
185-
186- 由于现在A并没有发出建立连接的请求,因此不会理睬B的确认,也不会向B发送数据。但B却以为新的运输连接已经建立了,并一直等待A发来数据。B的许多资源就这样白白浪费了。
187-
188- 采用三次握手的办法可以防止上述现象的发生。例如在刚才的情况下,A不会向B的确认发出确认。B由于收不到确认,就知道A并没有要求建立连接。
189-
190-
191-
192-
193-
194- ### (8)TCP连接状态?
184+ ### (7)TCP连接状态?
195185
196186- CLOSED:初始状态。
197187- LISTEN:服务器处于监听状态。
@@ -206,9 +196,14 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中
206196
207197
208198
199+ ## 4. TCP连接中如果断电怎么办
200+
201+ TCP新手误区--心跳的意义 - CSDN博客
202+ https://blog.csdn.net/bjrxyz/article/details/71076442
203+
209204
210205
211- ## 4 . TCP和UDP区别?如何改进TCP【阿里面经OneNote】
206+ ## 5 . TCP和UDP区别?如何改进TCP
212207
213208- TCP和UDP区别
214209 - UDP 是无连接的,即发送数据之前不需要建立连接。
@@ -227,9 +222,9 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中
227222
228223
229224
230- ## 5 . TCP滑动窗口?【阿里面经OneNote】
225+ ## 6 . TCP滑动窗口
231226
232- <div align =" center " > <img src =" pics/sliding_win.jpg " width =" 700 " /> </div ><br >
227+ <div align =" center " > <img src =" pics/sliding_win.png " width =" 650 " /> </div ><br >
233228
234229窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。
235230
@@ -243,7 +238,7 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中
243238
244239在 TCP 中,** 滑动窗口是为了实现流量控制** 。如果对方发送数据过快,接收方就来不及接收,接收方就需要通告对方,减慢数据的发送。
245240
246- ![ ] ( pics/sliding_windows.png )
241+ < div align = " center " > < img src = " pics/sliding_windows.png " width = " " /></ div >< br />
247242
248243
249244
@@ -265,15 +260,15 @@ TCP/IP 协议族是一种沙漏形状,中间小两边大,IP 协议在其中
265260
266261
267262
268- ## 6 . TCP流量控制
263+ ## 7 . TCP流量控制
269264
270265流量控制是为了控制发送方发送速率,保证接收方来得及接收。
271266
272267接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
273268
274269
275270
276- ## 7 . TCP的拥塞处理(Congestion Handling)【阿里面经OneNote】
271+ ## 8 . TCP的拥塞处理(Congestion Handling)
277272
278273如果网络出现拥塞,分组将会丢失,此时发送方会继续重传,从而导致网络拥塞程度更高。因此当出现拥塞时,应当控制发送方的速率。这一点和流量控制很像,但是出发点不同。流量控制是为了让接收方能来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
279274
@@ -317,7 +312,7 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、
317312
318313
319314
320- ## 8 . 如何区分流量控制和拥塞控制?
315+ ## 9 . 如何区分流量控制和拥塞控制?
321316
322317- 流量控制属于通信双方协商;拥塞控制涉及通信链路全局。
323318
@@ -327,7 +322,7 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、
327322
328323
329324
330- ## 9 . 解释RTO,RTT和超时重传?
325+ ## 10 . 解释RTO,RTT和超时重传?
331326
332327- 超时重传:发送端发送报文后若长时间未收到确认的报文则需要重发该报文。可能有以下几种情况:
333328 - 发送的数据没能到达接收端,所以对方没有响应。
@@ -342,7 +337,7 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、
342337
343338
344339
345- ## 10 . 从输入网址到获得页面的网络请求过程【阿里面经OneNote】
340+ ## 11 . 从输入网址到获得页面的网络请求过程
346341
347342- 查询DNS,获取域名对应的IP地址
348343 - 浏览器搜索自身的DNS缓存
@@ -367,7 +362,7 @@ TCP 主要通过四种算法来进行拥塞控制:慢开始、拥塞避免、
367362
368363
369364
370- ## 11 . 什么是短连接和长连接
365+ ## 12 . 什么是短连接和长连接
371366
372367在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
373368
0 commit comments