1- ## OSI与TCP/IP都有哪些协议(五层协议)?
1+ ## TCP/IP四层网络模型⭐
22
3- - ** 应用层** :为特定应用程序提供数据传输服务,例如 HTTP、DNS 等协议。数据单位为报文。
4- - ** 传输层** :为进程提供通用数据传输服务。由于应用层协议很多,定义通用的传输层协议就可以支持不断增多的应用层协议。运输层包括两种协议:传输控制协议 TCP,提供面向连接、可靠的数据传输服务,数据单位为报文段;用户数据报协议 UDP,提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。TCP 主要提供完整性服务,UDP 主要提供及时性服务。
5- - ** 网络层** :为主机提供数据传输服务。而传输层协议是为主机中的进程提供数据传输服务。网络层把传输层传递下来的报文段或者用户数据报封装成分组。
6- - ** 数据链路层** :网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的主机提供数据传输服务。数据链路层把网络层传下来的分组封装成帧。
7- - ** 物理层** :考虑的是怎样在传输媒体上传输数据比特流,而不是指具体的传输媒体。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
3+ ** 第一层 网络接口层**
84
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 的区别⭐
1062
1163- TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接。
1264- TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。
13- - Tcp通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输。如丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。
1465- UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性有较高的通信或广播通信。
1566- 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
1667- TCP对系统资源要求较多,UDP对系统资源要求较少。
17- ### tcp和udp的优点⭐
1868
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+ - 通过慢启动,拥塞避免,拥塞发生,快速恢复四个算法实现了拥塞控制
2176
77+ ** 选择**
2278
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 三次握手和四次挥手(重点)⭐
2482
2583先介绍各单词的含义:
2684
3088- ** ACK:确认序号标志**
3189- PSH:push标志
3290- RST:重置连接标志
33- - SYN:同步序列号,用于建立连接过程
91+ - SYN (Synchronize Sequence Numbers) :同步序列号,用于建立连接过程
3492- FIN:finish标志,用于释放链接
3593
3694 握手是为了建立连接,流程如下图 :
@@ -41,68 +99,68 @@ seq:为自己的标记缓存的初始序号
4199ack:确认号
42100
43101 ** 第一次握手** :
44- 一开始都是close状态,假设主动客户端主动打开 ,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN=1,seq为任意正整数 ,此时进入同步发送状态(SYN_SEND),等待服务器确认。
102+ 一开始都是close状态,客户端主动打开 ,服务端进入listen监听状态,等待请求,客户端发出连接请求报文(SYN包),报文头为SYN,seq为任意正整数x ,此时进入同步发送状态(SYN_SEND),等待服务器确认。
45103** 第二次握手:**
46- 如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数 ,ack为x+1,服务端进入同步收到的状态(SYN_RCVD);
104+ 如果服务端同意接收信息,会发出确认报文(SYN+ACK包 ),报文头seq为另外一个正整数y ,ack为x+1,服务端进入同步收到的状态(SYN_RCVD);
47105前两步都不携带数据,都需要消耗一个序列号。
48106** 第三次握手:**
49- 客户端接收到确认报文(SYN+ACK包 ),还要向服务端给出确认,发出确认报文(ACK包),两端都进入ESTABLISHED状态,完成三次握手。
107+ 客户端接收到确认报文(SYN+ACK包 ),进入ESTABLISHED状态, 还要向服务端给出确认,发出确认报文(ACK包 ack=y+1 ),两端都进入ESTABLISHED状态,完成三次握手。
50108** 此后,双方就建立了链接,可以开始通信了。**
51109
52- ## 为什么需要三次握手?
110+ ## 为什么需要三次握手?⭐
53111
54- 简单说就是: ** 为了双方确认自己与对方的发送与接收是正常的。**
112+ 简单说就是: ** 为了双方确认自己与对方的发送与接收是正常的。** 两次握手的话至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认,不能建立起双向通信。
55113
56114** 为了初始化Sequence Number 的初始值** : 为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。
57115
58116## 首次握手的隐患–SYN超时
59117
60118** 原因:**
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+ 所以黑客可能利用这个漏洞进行恶意攻击 。
64122
65123** 防护措施:**
66124SYN队列满后,通过tcp_ syncookies参数回发SYN Cookie
67- 若为正常连接则客户端会回发SYN Cookie 告诉服务端已经接收到请稍等,直接建立连接。
125+ 若为正常连接则客户端会回发 SYN Cookie 告诉服务端已经接收到请稍等,直接建立连接。
68126
69127## 建立连接后,Client出现故障怎么办
70128
71129保活机制
72130一直发送探测报文,直到达到设定次数还无响应就中断连接
73131
74- ## TCP四次挥手(重点)
132+ ## TCP四次挥手(重点)⭐
75133
76134 目的:为了中止连接
77135
78136 流程图:
79137<div align =" center " > <img src =" https://github.com/lvminghui/Java-Notes/blob/master/docs/imgs/4次握手.png " /> </div ><br >
80138
81-
82139 ** 第一次挥手:**
83- 最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq,然后进入** FINWAIT1** 状态。
140+ 最开始两方都处于ESTABLISHED状态,客户端主动关闭,发出连接释放报文(FIN)并且停止发送数据,报文头:FIN和seq =u(等于前面已经传送过来的数据的最后一个字节的序号加1) ,然后进入** FINWAIT1** 状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
84141** 第二次挥手:**
85- 服务器收到报文,发出确认报文(ACK),进入** CLOSEWAIT** 状态。
86- CLOSEWAIT状态:半关闭状态,客户端没有数据需要发送,服务器如果要发送数据客户端也可以接收 。
142+ 服务器收到报文,发出确认报文(ACK,ack=u+1,序列号seq=v ),进入** CLOSEWAIT** 状态。
143+ CLOSEWAIT状态:半关闭状态,服务器端不接收数据但可能还要发送数据 。
87144** 第三次挥手:**
88- 客户端收到报文进入** FINWAIT2** 状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文,然后进入 ** LASTACK** 状态。
145+ 客户端收到报文进入** FINWAIT2** 状态,等待服务器发送第三次挥手,这段时间可以接收数据。服务端数据发送完后,会发送释放报文(FIN),但服务器很可能又发送了一些数据,序列号会变化,假定此时的序列号为seq=w ,此时进入 ** LASTACK** 状态。
89146** 第四次挥手:**
90- 客户端收到报文后必须发送确认报文,进入** TIMEWAIT** ,但连接没有释放。
91- 服务端收到确认直接进入** CLOSED** 状态
147+ 客户端收到报文后必须发送确认报文(ACK,ack=w+1,seq=u+1),进入** TIMEWAIT** ,但连接没有释放,等待2MSL(2倍最大报文段寿命)来保证连接的可靠关闭才进入** CLOSED** 状态。服务端收到确认直接进入** CLOSED** 状态。
92148
93149** 为什么什么有TIME_WAIT状态**
94150
95- 确保有足够的时间让对方收到ACK包,所以才设置为2MS
96- 避免新旧连接混淆
151+ * 保证全双工链接可靠关闭
152+ * 保证重复的数据段消失,方式端口被重用时产生数据混淆
97153
98- #### 为什么需要四次握手才能断开连接
154+ ### 为什么连接的时候是三次握手,关闭的时候却是四次握手⭐
99155
100- 因为全双工,发送方和接收方都需要FIN报文和ACK报文
156+ 因为在连接时当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,因为可能还有数据需要传输回去,并不能立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了,但我还有一些数据没有发完"。只有等到我Server端所有的报文都发送完了,才会发送FIN报文,因此不能一起发送。所以需要四步握手。
101157
102158tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输
103159
104160#### 服务器出现大量CLOSE_ WAIT状态的原因
105161
162+ 被动关闭的一方可能存在代码问题没有正确关闭链接导致的
163+
106164对方关闭socket连接,我方忙于读或写,没有及时关闭连接
107165** 解决:**
108166检查代码,特别是释放资源的代码
@@ -117,7 +175,7 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
117175尽最大努力交付,不保证可靠交付,不需要维持复杂的链接状态表
118176面向报文,不对应用程序提交的报文信息进行拆分或者合并
119177
120- ## 在浏览器中输入url地址 ->> 显示主页的过程
178+ ## 在浏览器中输入url地址 ->> 显示主页的过程⭐
121179
122180总体来说分为以下几个过程:
123181
@@ -128,15 +186,15 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
1281865 . 浏览器解析渲染页面
1291876 . 连接结束,四次挥手
130188
131- ## HTTP状态码
189+ ## HTTP状态码⭐
132190
1331911xx :指示信息–表示请求已接收,继续处理
1341922xx :成功–表示请求已被成功接收、理解、接受
1351933xx :重定向–要完成请求必须进行更进一步的操作
1361944xx :** 客户端错误** –请求有语法错误或请求无法实现
1371955xx :** 服务器端错误** –服务器未能实现合法的请求
138196
139- ## ** get 和 post 请求有哪些区别?**
197+ ## ** get 和 post 请求有哪些区别?** ⭐
140198
141199- GET在浏览器回退时是无害的,而POST会再次提交请求。
142200- GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
@@ -147,7 +205,7 @@ tip: 全双工(Full Duplex)是通讯传输的一个术语。通信允许数
147205- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
148206- GET参数通过URL传递,POST放在Request body中。
149207
150- ## Cookie ,Session区别
208+ ## Cookie ,Session区别⭐
151209
152210Cookie数据存放在客户的浏览器上, Session数据放在服务器上
153211Session相对于Cookie更安全
0 commit comments