Skip to content

Commit

Permalink
Update Computer Network.md
Browse files Browse the repository at this point in the history
  • Loading branch information
wolverinn authored Feb 26, 2020
1 parent 0d438f1 commit 2f3b637
Showing 1 changed file with 2 additions and 21 deletions.
23 changes: 2 additions & 21 deletions Computer Network.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
* [TCP的拥塞控制是怎么实现的?](#TCP的拥塞控制是怎么实现的)
* [TCP与UDP的区别](#TCP与UDP的区别)
* [TCP如何保证传输的可靠性](#TCP如何保证传输的可靠性)
* [什么是TCP粘包?](#什么是TCP粘包)
* [~~什么是TCP粘包?~~](#什么是TCP粘包)
* 应用层:HTTP和HTTPS
* [HTTP和HTTPS有什么区别?](#HTTP和HTTPS有什么区别)
* [GET与POST的区别?](#GET与POST的区别)
Expand Down Expand Up @@ -214,25 +214,6 @@ HTTP不可以使用UDP,HTTP需要基于可靠的传输协议,而UDP不可靠
5. 超时重发:发送方发出数据之后,启动一个定时器,超时未收到接收方的确认,则重新发送这个数据;
6. 流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出

### 什么是TCP粘包?
TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收端缓冲区来看,后一包数据的头紧接着前一包数据的尾。

如果发送方发送的多组数据本来就是同一块数据的不同部分,比如说一个文件被分成多个部分发送,这时当然不需要处理粘包现象;如果多个分组毫不相干,甚至是并列关系,那么这个时候就一定要处理粘包现象了

出现粘包的原因:

- 发送方:默认使用**Nagle算法**(主要作用:减少网络中报文段的数量),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,进行发送;
- 接收方:TCP将接收到的数据包保存在**接收缓存**里,然后应用程序主动从缓存读取收到的分组。如果TCP接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度,多个包就会被缓存,应用程序就有可能读取到多个首尾相接粘到一起的包。

##### 如何解决粘包问题?

<details>
<summary>展开</summary>

- 发送方:关闭Nagle算法;
- 接收方:在应用层进行处理。将所有数据全部读完之后,再进行分组。分组的方法可以通过规定开始符和结束符的方法;也可以在每组数据前加上数据长度。
</details>

### HTTP和HTTPS有什么区别?

1. 端口不同:HTTP使用的是80端口,HTTPS使用443端口;
Expand Down Expand Up @@ -382,4 +363,4 @@ Cookie保存在客户端本地,客户端请求服务器时会将Cookie一起
- [什么是TCP粘包?怎么解决这个问题](https://blog.csdn.net/weixin_41047704/article/details/85340311)

### 待完成
- [ ] 发送窗口的大小,如何最大利用带宽,假设延迟100ms,发送端10Mb/s,接收端100Mb/s. [reference](https://blog.csdn.net/bad_sheep/article/details/6158676)
- [ ] 发送窗口的大小,如何最大利用带宽,假设延迟100ms,发送端10Mb/s,接收端100Mb/s. [reference](https://blog.csdn.net/bad_sheep/article/details/6158676)

0 comments on commit 2f3b637

Please sign in to comment.