Skip to content

Commit

Permalink
add more question
Browse files Browse the repository at this point in the history
  • Loading branch information
wolverinn committed Dec 29, 2019
1 parent 4bb3b7b commit ba90abc
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions Computer Network.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,9 +181,7 @@ UDP接收方收到报文后,不需要给出任何确认
<details>
<summary>展开</summary>

对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,直播;其它大部分情况下,HTTP都是用TCP

[什么时候选TCP、UDP?](https://blog.csdn.net/yjxsdzx/article/details/71937886)
对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,实时视频流(直播),即使出现传输错误也可以容忍;其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失
</details>

##### HTTP可以使用UDP吗?
Expand Down Expand Up @@ -218,6 +216,23 @@ UDP接收方收到报文后,不需要给出任何确认
6. 流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出

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

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

出现粘包的原因:

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

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

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

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

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

Expand Down Expand Up @@ -245,7 +260,7 @@ UDP接收方收到报文后,不需要给出任何确认
<details>
<summary>展开</summary>


[你访问的网站是如何自动切换到 HTTPS 的?](https://www.sohu.com/a/136637876_487516)
</details>

##### HTTPS连接的时候,怎么确定收到的包是服务器发来的(中间人攻击)?
Expand Down Expand Up @@ -361,6 +376,8 @@ Cookie保存在客户端本地,客户端请求服务器时会将Cookie一起

### 参考
- [面试/笔试第一弹 —— 计算机网络面试问题集锦](https://blog.csdn.net/justloveyou_/article/details/78303617)
- [什么时候选TCP、UDP?](https://blog.csdn.net/yjxsdzx/article/details/71937886)
- [什么是TCP粘包?怎么解决这个问题](https://blog.csdn.net/weixin_41047704/article/details/85340311)

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

0 comments on commit ba90abc

Please sign in to comment.