计算机网络
- 1.OSI与TCP/IP各层的结构与功能,都有哪些协议
- 2.TCP三次握⼿和四次挥⼿
- 3.TCP ,UDP 协议的区别
- 4.TCP协议如何保证可靠传输
- 5.ARQ协议
- 6.滑动窗⼝和流量控制
- 7.拥塞控制
- 8.在浏览器中输⼊url地址->>显示主⻚的过程
- 9.状态码
- 10.各种协议与HTTP协议之间的关系
- 11.HTTP⻓连接,短连接
- 12.HTTP是不保存状态的协议,如何保存⽤户状态
- 13.Cookie的作⽤是什么?和Session有什么区别?
- 14.HTTP 1.0和HTTP 1.1
- 15.URI和URL
- 16.HTTP 和 HTTPS
1.OSI与TCP/IP各层的结构与功能,都有哪些协议
1.1 应用层
域名系统
HTTP协议
1.2 运输层
运输层主要使⽤以下两种协议:
- 传输控制协议TCP(TransmissionControlProtocol):提供⾯向连接的,可靠的数据传输服务。
- ⽤户数据协议UDP(UserDatagramProtocol):提供⽆连接的,尽最⼤努⼒的数据传输服务(不保证数据传输的可靠性)。
1.3 网络层
注意: 不要把运输层的“⽤户数据报UDP”和⽹络层的“IP数据报”弄混。另外,⽆论是哪⼀层的数据单元,都可笼统地⽤“分组”来表示。
⽹络层中的“⽹络”⼆字已经不是我们通常谈到的具体⽹络,⽽是指计算机⽹络体系结构模型中第三层的名称.互联⽹是由⼤量的异构(heterogeneous)⽹络通过路由器(router)相互连接起来的。
互联⽹使⽤的⽹络层协议是⽆连接的⽹际协议(IntertProtocol)和许多路由选择协议,因此互联⽹的⽹络层也叫做⽹际层或IP层。
1.4 数据链路层
在接收数据时,控制信息使接收端能够知道⼀个帧从哪个⽐特开始和到哪个⽐特结束。这样,数据链路层在收到⼀个帧后,就可从中提出数据部分,上交给⽹络层。控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在⽹络中传送下去⽩⽩浪费⽹络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,⽽且还要纠错),那么就要采⽤可靠性传输协议来纠正出现的差错。这种⽅法会使链路层的协议复杂些。
1.5 物理层
在互联⽹使⽤的各种协中最重要和最著名的就是TCP/IP两个协议。现在⼈们经常提到的TCP/IP并不⼀定单指TCP和IP这两个具体的协议,⽽往往表示互联⽹所使⽤的整个TCP/IP协议族。
2.TCP三次握⼿和四次挥⼿
2.1 三次握手
- 客户端–发送带有SYN标志的数据包–⼀次握⼿–服务端
- 服务端–发送带有SYN/ACK标志的数据包–⼆次握⼿–客户端
- 客户端–发送带有带有ACK标志的数据包–三次握⼿–服务端
2.2 为什么要三次握⼿
三次握⼿的⽬的是建⽴可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,⽽三次握⼿最主要的⽬的就是双⽅确认⾃⼰与对⽅的发送与接收是正常的。
- 第⼀次握⼿:Client什么都不能确认;Server确认了对⽅发送正常,⾃⼰接收正常
- 第⼆次握⼿:Client确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server确认了:对⽅发送正常,⾃⼰接收正常
- 第三次握⼿:Client确认了:⾃⼰发送、接收正常,对⽅发送、接收正常;Server确认了:⾃⼰发送、接收正常,对⽅发送、接收正常
所以三次握⼿就能确认双发收发功能都正常,缺⼀不可。
2.3 为什么要传回SYN
SYN是TCP/IP建⽴连接时使⽤的握⼿信号。在客户机和服务器之间建⽴正常的TCP⽹络连接时,客户机⾸先发出⼀个SYN消息,服务器使⽤SYN-ACK应答表示接收到了这个消息,最后客户机再以ACK(Acknowledgement[汉译:确认字符,在数据通信传输中,接收站发给发送站的⼀种传输控制字符。它表示确认发来的数据已经接受⽆误。])消息响应。这样在客户机和服务器之间才能建⽴起可靠的TCP连接,数据才可以在客户机和服务器之间传递。
2.4 传了SYN,为啥还要传ACK
2.5 四次挥手
断开⼀个TCP连接则需要“四次挥⼿”:
- 客户端-发送⼀个FIN,⽤来关闭客户端到服务器的数据传送
- 服务器-收到这个FIN,它发回⼀个ACK,确认序号为收到的序号加1。和SYN⼀样,⼀个FIN将占⽤⼀个序号
- 服务器-关闭与客户端的连接,发送⼀个FIN给客户端
- 客户端-发回ACK报⽂确认,并将确认序号设置为收到序号加1
2.6 为什么要四次挥⼿
举个例⼦:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着⾃⼰的节奏结束通话,于是B可能⼜巴拉巴拉说了⼀通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。
3.TCP ,UDP 协议的区别
4.TCP协议如何保证可靠传输
5.ARQ协议
5.1 停⽌等待ARQ协议
优点:简单
缺点:信道利⽤率低,等待时间⻓
1)⽆差错情况:
发送⽅发送分组,接收⽅在规定时间内收到,并且回复确认.发送⽅再次发送。
2)出现差错情况(超时重传):
停⽌等待协议中超时重传是指只要超过⼀段时间仍然没有收到确认,就重传前⾯发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完⼀个分组需要设置⼀个超时计时器,其重传时间应⽐数据在分组传输的平均往返时间更⻓⼀些。这种⾃动重传⽅式常称为⾃动重传请求ARQ。另外在停⽌等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续ARQ协议可提⾼信道利⽤率。发送维持⼀个发送窗⼝,凡位于发送窗⼝内的分组可连续发送出去,⽽不需要等待对⽅确认。接收⽅⼀般采⽤累积确认,对按序到达的最后⼀个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。
3)确认丢失和确认迟到
确认丢失:
确认消息在传输过程丢失。当A发送M1消息,B收到后,B向A发送了⼀个M1确认消息,但却在传输过程中丢失。⽽A并不知道,在超时计时过后,A重传M1消息,B再次收到该消息后采取以下两点措施:1.丢弃这个重复的M1消息,不向上层交付。2.向A发送确认消息。(不会认为已经发送过了,就不再发送。A能重传,就证明B的确认消息丢失)。
确认迟到:
确认消息在传输过程中迟到。A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时A收到了B第⼆次发送的确认消息。接着发送其他数据。过了⼀会,A收到了B第⼀次发送的对M1的确认消息(A也收到了2份确认消息)。处理如下:1.A收到重复的确认后,直接丢弃。2.B收到重复的M1后,也直接丢弃重复的M1。
5.2 连续ARQ协议连续
优点:信道利⽤率⾼,容易实现,即使确认丢失,也不必重传。
缺点:不能向发送⽅反映出接收⽅已经正确收到的所有分组的信息。⽐如:发送⽅发送了5条消息,中间第三条丢失(3号),这时接收⽅只能对前两个发送确认。发送⽅⽆法知道后三个分组的下落,⽽只好把后三个全部重传⼀次。这也叫Go-Back-N(回退N),表示需要退回来重传已经发送过的N个消息。
6.滑动窗⼝和流量控制
7.拥塞控制
为了进⾏拥塞控制,TCP发送⽅要维持⼀个拥塞窗⼝(cwnd)的状态变量。拥塞控制窗⼝的⼤⼩取决于⽹络的拥塞程度,并且动态变化。发送⽅让⾃⼰的发送窗⼝取为拥塞窗⼝和接收⽅的接受窗⼝中较⼩的⼀个。
TCP的拥塞控制采⽤了四种算法,即慢开始、拥塞避免、快重传和快恢复。在⽹络层也可以使路由器采⽤适当的分组丢弃策略(如主动队列管理AQM),以减少⽹络拥塞的发⽣。
- 慢开始:慢开始算法的思路是当主机开始发送数据时,如果⽴即把⼤量数据字节注⼊到⽹络,那么可能会引起⽹络阻塞,因为现在还不知道⽹络的符合情况。经验表明,较好的⽅法是先探测⼀下,即由⼩到⼤逐渐增⼤发送窗⼝,也就是由⼩到⼤逐渐增⼤拥塞窗⼝数值。cwnd初始值为1,每经过⼀个传播轮次,cwnd加倍。
- 拥塞避免:拥塞避免算法的思路是让拥塞窗⼝cwnd缓慢增⼤,即每经过⼀个往返时间RTT就把发送放的cwnd加1.
- 快重传与快恢复:在TCP/IP中,快速重传和恢复(fastretransmitandrecovery,FRR)是⼀种拥塞控制算法,它能快速恢复丢失的数据包。没有FRR,如果数据包丢失了,TCP将会使⽤定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了FRR,如果接收机接收到⼀个不按顺序的数据段,它会⽴即给发送机发送⼀个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并⽴即重传这些丢失的数据段。有了FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地⼯作。当有多个数据信息包在某⼀段很短的时间内丢失时,它则不能很有效地⼯作。
8.在浏览器中输⼊url地址->>显示主⻚的过程
总体来说分为以下⼏个过程:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报⽂
- 浏览器解析渲染⻚⾯
- 连接结束
9.状态码
10.各种协议与HTTP协议之间的关系
11.HTTP⻓连接,短连接
在使⽤⻓连接的情况下,当⼀个⽹⻚打开完成后,客户端和服务器之间⽤于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使⽤这⼀条已经建⽴的连接。KeepAlive不会永久保持连接,它有⼀个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现⻓连接需要客户端和服务端都⽀持⻓连接。
HTTP协议的⻓连接和短连接,实质上是TCP协议的⻓连接和短连接。
12.HTTP是不保存状态的协议,如何保存⽤户状态
在服务端保存Session的⽅法很多,最常⽤的就是内存和数据库(⽐如是使⽤内存数据库redis保存)。
既然Session存放在服务器端,那么我们如何实现Session跟踪呢?⼤部分情况下,我们都是通过在Cookie中附加⼀个SessionID来⽅式来跟踪。
Cookie 被禁⽤怎么办?
最常⽤的就是利⽤ URL 重写把 Session ID 直接附加在URL路径的后⾯。
13.Cookie的作⽤是什么?和Session有什么区别?
Cookie和Session都是⽤来跟踪浏览器⽤户身份的会话⽅式,但是两者的应⽤场景不太⼀样。
14.HTTP 1.0和HTTP 1.1
HTTP1.1也是当前使⽤最为⼴泛的HTTP协议。
15.URI和URL
URI的作⽤像身份证号⼀样,URL的作⽤更像家庭住址⼀样。