1
- ## OSI与TCP/IP都有哪些协议(五层协议)?
1
+ ## TCP/IP四层网络模型⭐
2
2
3
- - ** 应用层** :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
4
- - ** 传输层** :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
5
- - ** 网络层** :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
6
- - ** 数据链路层** :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
7
- - ** 物理层** :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
3
+ ** 第一层 网络接口层**
8
4
9
- ## 简述 tcp 和 udp的区别⭐
5
+ 网络接口层包括用于协作IP数据在已有网络介质上传输的协议。
6
+
7
+ 协议:ARP,RARP
8
+ ** 第二层 网间层**
9
+
10
+ 网间层对应于OSI七层参考模型的网络层。负责数据的包装、寻址和路由。同时还包含网间控制报文协议(Internet Control Message Protocol,ICMP)用来提供网络诊断信息。
11
+
12
+ 协议:本层包含IP协议、RIP协议(Routing Information Protocol,路由信息协议),ICMP协议。
13
+ ** 第三层 传输层**
14
+
15
+ 传输层对应于OSI七层参考模型的传输层,它提供两种端到端的通信服务。
16
+
17
+ 其中TCP协议(Transmission Control Protocol)提供可靠的数据流运输服务,UDP协议(Use Datagram Protocol)提供不可靠的用户数据报服务。
18
+ ** 第四层 应用层**
19
+
20
+ 应用层对应于OSI七层参考模型的应用层和表达层。
21
+
22
+ 因特网的应用层协议包括Finger、Whois、FTP(文件传输协议)、Gopher、HTTP(超文本传输协议)、Telent(远程终端协议)、SMTP(简单邮件传送协议)、IRC(因特网中继会话)、NNTP(网络新闻传输协议)等。
23
+
24
+ ## OSI七层网络模型⭐
25
+
26
+ ** 第一层 物理层**
27
+
28
+ 作用:负责最后将信息编码成电流脉冲或其它信号用于网上传输。它由计算机和网络介质之间的实际界面组成,可定义电气信号、符号、线的状态和时钟要求、数据编码和数据传输用的连接器。所有比物理层高的层都通过事先定义好的接口而与它通话。
29
+
30
+ 协议:如最常用的RS-232规范、10BASE-T的曼彻斯特编码以及RJ-45就属于第一层。
31
+ ** 第二层 数据链路层**
32
+
33
+ 作用:数据链路层通过物理网络链路提供可靠的数据传输。
34
+
35
+ 协议:ATM,FDDI等。
36
+ ** 第三层 网络层**
37
+
38
+ 作用:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式。为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。
39
+
40
+ 协议:IP,IPX等
41
+ ** 第四层 传输层**
42
+
43
+ 作用:传输层向高层提供可靠的端到端的网络数据流服务。传输层的功能一般包括流控、多路传输、虚电路管理及差错校验和恢复。流控管理设备之间的数据传输,确保传输设备不发送比接收设备处理能力大的数据;多路传输使得多个应用程序的数据可以传输到一个物理链路上;虚电路由传输层建立、维护和终止;差错校验包括为检测传输错误而建立的各种不同结构;而差错恢复包括所采取的行动(如请求数据重发),以便解决发生的任何错误。
44
+
45
+ 协议:TCP,UDP,SPX。
46
+ ** 第五层 会话层**
47
+
48
+ 作用:会话层建立、管理和终止表示层与实体之间的通信会话。通信会话包括发生在不同网络应用层之间的服务请求和服务应答,这些请求与应答通过会话层的协议实现。它还包括创建检查点,使通信发生中断的时候可以返回到以前的一个状态。
49
+
50
+ 协议:RPC,SQL等
51
+ ** 第六层 表示层**
52
+
53
+ 作用:这一层的主要功能是定义数据格式及加密。
54
+
55
+ 协议:FTP,加密
56
+ ** 第七层 应用层**
57
+
58
+ 作用:应用层是最接近终端用户的OSI层,这就意味着OSI应用层与用户之间是通过应用软件直接相互作用的。应用层的功能一般包括标识通信伙伴、定义资源的可用性和同步通信。
59
+ 协议:telnet,HTTP,FTP,WWW,NFS,SMTP等。
60
+
61
+ ## 简述 TCP 和 UDP 的区别⭐
10
62
11
63
- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
12
64
- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
13
- - Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
14
65
- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
15
66
- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
16
67
- TCP对系统资源要求较多,UDP对系统资源要求较少。
17
- ### tcp和udp的优点⭐
18
68
19
- - TCP的优点: 可靠,稳定 TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。 TCP的缺点: 慢,效率低,占用系统资源高,易被攻击 TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。 而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
20
- - UDP的优点: 快,比TCP稍安全 UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击…… UDP的缺点: 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。 基于上面的优缺点,那么: 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输。什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP。
69
+ ### TCP 特点⭐
70
+
71
+ - 基于链接,点对点传输,在传输数据前要先建立好连接,再进行传输。
72
+ - 一旦建立连接就可以是双向通信
73
+ - 传输是基于字节流而不是报文,将数据根据大小进行变好,接收端通过 ack 大小进行编号,从而保证接收数据的有序性和完整性。
74
+ - TCP 还可提供流量控制能力,通过滑动窗口来控制数据的发送速率,滑动窗口的本质就是动态缓冲区
75
+ - 通过慢启动,拥塞避免,拥塞发生,快速恢复四个算法实现了拥塞控制
21
76
77
+ ** 选择**
22
78
23
- ## TCP 三次握手和四次挥手(重点)
79
+ 什么时候应该使用TCP: 当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 在日常生活中,常见使用TCP协议的应用如下: 浏览器,用的HTTP FlashFXP,用的FTP Outlook,用的POP、SMTP Putty,用的Telnet、SSH QQ文件传输。什么时候应该使用UDP: 当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。 比如,日常生活中,常见使用UDP协议的应用如下: QQ语音 QQ视频 TFTP。
80
+
81
+ ## TCP 三次握手和四次挥手(重点)⭐
24
82
25
83
先介绍各单词的含义:
26
84
30
88
- ** ACK:确认序号标志**
31
89
- PSH:push标志
32
90
- RST:重置连接标志
33
- - SYN:同步序列号,用于建立连接过程
91
+ - SYN (Synchronize Sequence Numbers) :同步序列号,用于建立连接过程
34
92
- FIN:finish标志,用于释放链接
35
93
36
94
握手是为了建立连接,流程如下图 :
@@ -41,68 +99,68 @@ seq:为自己的标记缓存的初始序号
41
99
ack:确认号
42
100
43
101
** 第一次握手** :
44
- 一开始都是close状态,假设主动客户端主动打开 ,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN=1,seq为任意正整数 ,此时进入同步发送状态(SYN_SEND),等待服务器确认。
102
+ 一开始都是close状态,客户端主动打开 ,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN,seq为任意正整数x ,此时进入同步发送状态(SYN_SEND),等待服务器确认。
45
103
** 第二次握手:**
46
- 如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数 ,ack为x+1,服务端进入同步收到的状态(SYN_RCVD);
104
+ 如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数y ,ack为x+1,服务端进入同步收到的状态(SYN_RCVD);
47
105
前两步都不携带数据,都需要消耗一个序列号。
48
106
** 第三次握手:**
49
- 客户端接收到确认报文(SYN+ACK包 ),还要向服务端给出确认,发出确认报文(ACK包),两端都进入ESTABLISHED状态,完成三次握手。
107
+ 客户端接收到确认报文(SYN+ACK包 ),进入ESTABLISHED状态, 还要向服务端给出确认,发出确认报文(ACK包 ack=y+1 ),两端都进入ESTABLISHED状态,完成三次握手。
50
108
** 此后,双方就建立了链接,可以开始通信了。**
51
109
52
- ## 为什么需要三次握手?
110
+ ## 为什么需要三次握手?⭐
53
111
54
- 简单说就是: ** 为了双方确认自己与对方的发送与接收是正常的。**
112
+ 简单说就是: ** 为了双方确认自己与对方的发送与接收是正常的。** 两次握手的话至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认,不能建立起双向通信。
55
113
56
114
** 为了初始化Sequence Number 的初始值** : 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。
57
115
58
116
## 首次握手的隐患–SYN超时
59
117
60
118
** 原因:**
61
- Server收到Client的SYN ,回复SYN- ACK的时候未收到ACK确认
62
- Server不断重试直至超时, Linux默认等待63秒才断开连接
63
- 黑客可能利用这个漏洞进行恶意攻击 。
119
+ Server收到Client的SYN ,回复SYN- ACK的时候未收到ACK确认,导致 Server 一直在 SYN_RCVD 状态,
120
+ Server不断重试直至超时, 影响正常数据发送,但 Linux 默认等待63秒才断开连接
121
+ 所以黑客可能利用这个漏洞进行恶意攻击 。
64
122
65
123
** 防护措施:**
66
124
SYN队列满后,通过tcp_ syncookies参数回发SYN Cookie
67
- 若为正常连接则客户端会回发SYN Cookie 告诉服务端已经接收到请稍等,直接建立连接。
125
+ 若为正常连接则客户端会回发 SYN Cookie 告诉服务端已经接收到请稍等,直接建立连接。
68
126
69
127
## 建立连接后,Client出现故障怎么办
70
128
71
129
保活机制
72
130
一直发送探测报文,直到达到设定次数还无响应就中断连接
73
131
74
- ## TCP四次挥手(重点)
132
+ ## TCP四次挥手(重点)⭐
75
133
76
134
目的:为了中止连接
77
135
78
136
流程图:
79
137
<div align =" center " > <img src =" https://github.com/lvminghui/Java-Notes/blob/master/docs/imgs/4次握手.png " /> </div ><br >
80
138
81
-
82
139
** 第一次挥手:**
83
- 最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq,然后进入** FINWAIT1** 状态。
140
+ 最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq =u(等于前面已经传送过来的数据的最后一个字节的序号加1) ,然后进入** FINWAIT1** 状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
84
141
** 第二次挥手:**
85
- 服务器收到报文,发出确认报文(ACK),进入** CLOSEWAIT** 状态。
86
- CLOSEWAIT状态:半关闭状态,客户端没有数据需要发送,服务器如果要发送数据客户端也可以接收 。
142
+ 服务器收到报文,发出确认报文(ACK,ack=u+1,序列号seq=v ),进入** CLOSEWAIT** 状态。
143
+ CLOSEWAIT状态:半关闭状态,服务器端不接收数据但可能还要发送数据 。
87
144
** 第三次挥手:**
88
- 客户端收到报文进入** FINWAIT2** 状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文,然后进入 ** LASTACK** 状态。
145
+ 客户端收到报文进入** FINWAIT2** 状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文(FIN),但服务器很可能又发送了一些数据,序列号会变化,假定此时的序列号为seq=w ,此时进入 ** LASTACK** 状态。
89
146
** 第四次挥手:**
90
- 客户端收到报文后必须发送确认报文,进入** TIMEWAIT** ,但连接没有释放。
91
- 服务端收到确认直接进入** CLOSED** 状态
147
+ 客户端收到报文后必须发送确认报文(ACK,ack=w+1,seq=u+1),进入** TIMEWAIT** ,但连接没有释放,等待2MSL(2倍最大报文段寿命)来保证连接的可靠关闭才进入** CLOSED** 状态。服务端收到确认直接进入** CLOSED** 状态。
92
148
93
149
** 为什么什么有TIME_WAIT状态**
94
150
95
- 确保有足够的时间让对方收到ACK包,所以才设置为2MS
96
- 避免新旧连接混淆
151
+ * 保证全双工链接可靠关闭
152
+ * 保证重复的数据段消失,方式端口被重用时产生数据混淆
97
153
98
- #### 为什么需要四次握手才能断开连接
154
+ ### 为什么连接的时候是三次握手,关闭的时候却是四次握手⭐
99
155
100
- 因为全双工,发送方和接收方都需要FIN报文和ACK报文
156
+ 因为在连接时当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,因为可能还有数据需要传输回去,并不能立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了,但我还有一些数据没有发完"。只有等到我Server端所有的报文都发送完了,才会发送FIN报文,因此不能一起发送。所以需要四步握手。
101
157
102
158
tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输
103
159
104
160
#### 服务器出现大量CLOSE_ WAIT状态的原因
105
161
162
+ 被动关闭的一方可能存在代码问题没有正确关闭链接导致的
163
+
106
164
对方关闭socket连接,我方忙于读或写,没有及时关闭连接
107
165
** 解决:**
108
166
检查代码,特别是释放资源的代码
@@ -117,7 +175,7 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
117
175
尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
118
176
面向报文,不对应用程序提交的报文信息进行拆分或者合并
119
177
120
- ## 在浏览器中输入url地址 ->> 显示主页的过程
178
+ ## 在浏览器中输入url地址 ->> 显示主页的过程⭐
121
179
122
180
总体来说分为以下几个过程:
123
181
@@ -128,15 +186,15 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
128
186
5 . 浏览器解析渲染页面
129
187
6 . 连接结束,四次挥手
130
188
131
- ## HTTP状态码
189
+ ## HTTP状态码⭐
132
190
133
191
1xx :指示信息–表示请求已接收,继续处理
134
192
2xx :成功–表示请求已被成功接收、理解、接受
135
193
3xx :重定向–要完成请求必须进行更进一步的操作
136
194
4xx :** 客户端错误** –请求有语法错误或请求无法实现
137
195
5xx :** 服务器端错误** –服务器未能实现合法的请求
138
196
139
- ## ** get 和 post 请求有哪些区别?**
197
+ ## ** get 和 post 请求有哪些区别?** ⭐
140
198
141
199
- GET在浏览器回退时是无害的,而POST会再次提交请求。
142
200
- GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
@@ -147,7 +205,7 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
147
205
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
148
206
- GET参数通过URL传递,POST放在Request body中。
149
207
150
- ## Cookie ,Session区别
208
+ ## Cookie ,Session区别⭐
151
209
152
210
Cookie数据存放在客户的浏览器上, Session数据放在服务器上
153
211
Session相对于Cookie更安全
0 commit comments