Skip to content

Commit 306fc60

Browse files
committed
更新TCP HTTP
1 parent eb78412 commit 306fc60

File tree

3 files changed

+45
-11
lines changed

3 files changed

+45
-11
lines changed

MD/TCP&HTTP.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
## 对 HTTP 的理解
2+
HTTP是基于TCP/IP协议的【应用层】协议。它不涉及数据包传输,主要规定了客户端和服务器之间的通信格式,是互联网信息交互中最常用的协议,用GET/POST/DELETE/PUT/PATCH来实现RESTFUL。
3+
4+
### 特点
5+
1. 简单快速。只需要传【请求方法】与【资源路径】就能确定资源
6+
2. 灵活,传输【任意类型】的数据
7+
3. 无连接,一般一次连接只处理一个请求,结束后主动释放连接,但可以使用keep-alive来复用相同的TCP连接发送多个请求
8+
4. 无状态,客户端向服务器发送HTTP请求之后,服务器会给我们发送数据过来,但不会记录任何信息。所以Cookie、Session产生了。
9+
10+
### 与WebSocket的区别
11+
1. 支持长连接。把WebSocket一个新协议,可以看成是在HTTP协议上打上一个【支持长连接】的补丁
12+
2. 支持服务器推送。HTTP协议是一个request只能有一个response。而且这个response也是被动的,不能主动发起。WebSocket可以让服务器主动推送
13+
3. 基于HTTP。WebSocket是基于HTTP协议的,或者说借用了HTTP的协议来完成一部分握手
14+
15+
## 对 TCP 的理解
16+
TCP是一种面向连接的、可靠的、基于字节流的【传输层】通信协议
17+
18+
### 面试题:三次握手、四次挥手
19+
[https://blog.csdn.net/qq_18425655/article/details/52163228](https://blog.csdn.net/qq_18425655/article/details/52163228)
20+
21+
### 滑动窗口协议
22+
滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。
23+
24+
ACK包含两个非常重要的信息:一是期望接收到的下一字节的序号n,该n代表接收方已经接收到了前n-1字节数据。二是当前的窗口大小m,如此发送方在接收到ACK包含的这两个数据后就可以计算出还可以发送多少字节的数据给对方,这就是滑动窗口控制流量的基本原理
25+
26+
TCP的滑动窗口是动态的,应用程序在需要(如内存不足)时,通过API通知TCP协议栈缩小TCP的接收窗口。然后TCP协议栈在下个段发送时包含新的窗口大小通知给对端,对端按通知的窗口来改变发送窗口,以此达到减缓发送速率的目的。
27+
### 与UDP区别
28+
* TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输,如QQ
29+
* TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般
30+
* TCP对应的协议(FTP/SMTP/HTTP),UDP(DNS)
31+
32+
### 与其他层级协议关系
33+
TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议
34+
35+
最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信。
36+
IP 协议定义了一套自己的地址规则,称为 IP 地址。它实现了路由功能,允许某个局域网的 A 主机,向另一个局域网的 B 主机发送消息。
37+
IP 协议只是一个地址协议,并不保证数据包的完整。如果路由器丢包(比如缓存满了,新进来的数据包就会丢失),就需要发现丢了哪一个包,以及如何重新发送这个包。这就要依靠 TCP 协议。简单说,TCP 协议的作用是,保证数据通信的完整性和可靠性,防止丢包。
38+
39+
### 参考
40+
http://www.ruanyifeng.com/blog/2017/06/tcp-protocol.html
41+
https://www.zhihu.com/question/20215561
42+
https://www.zhihu.com/question/32255109

MD/TCP.md

Lines changed: 0 additions & 8 deletions
This file was deleted.

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
有疑问欢迎提 Issues 让我们共同解决,有好的想法想加进来的请提 PR ~
44

55
PS:除开知识点,一定要准备好以下内容:
6-
1. **10分钟**左右的**个人介绍**(学习经历、工作经历、项目经历、能力不错的方面、一句话总结)一定要自己练得滚瓜烂熟,张口就来,也不难,比如本人先花两个小时准备,再重复练习三天就行了
6+
1. **5~10分钟的个人介绍**(学习经历、工作经历、项目经历、能力不错的方面、一句话总结)一定要自己练得滚瓜烂熟,张口就来
77
2. 对抽象概念的**套路**(当面试官问你是如何理解多线程的时候,你要知道从定义、来源、实现、问题、优化、应用方面系统性地回答)
8-
3. **项目所占的比重是非常大的**,至少与知识点的比例是五五开(纪念),所以必须针对简历中的两个或多个项目,按从业务到技术选型,从正常流程到异常处理,从实现到优化这几个方面来详细地准备一个项目
8+
3. **项目所占的比重是非常大的**,至少与知识点的比例是五五开(纪念),所以必须针对简历中的两个以上的项目,按从业务到技术选型,从实现到优化来详细地准备
99
4. **压力练习**,面试的时候难免紧张,可能会严重影响发挥,建议通过找人相互提问的方式来改善
1010
5. **表达练习**,表达能力非常影响在面试中的表现,能否简练地将答案告诉面试官,需要刻意的练习,可以通过给自己讲解的方式练习
1111

@@ -22,7 +22,7 @@ PS:除开知识点,一定要准备好以下内容:
2222
### 设计模式
2323
* [常用的几个设计模式](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/设计模式.md)
2424
### 网络协议
25-
* [TCP/IP](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/TCP.md)
25+
* [TCP & HTTP](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/TCP&HTTP.md)
2626
### 数据结构
2727
* [排序算法](https://github.com/xbox1994/2018-Java-Interview/blob/master/MD/排序算法.md)
2828
### 高并发

0 commit comments

Comments
 (0)