为面进腾讯我准备了3个月架构知识,然而却倒在了网络基础???
腾讯面试十分注重网络基础知识,问的几乎都是一些细节知识,所以你如果想进入腾讯的话,网络知识一定要扎实,文章是我总结的一些腾讯面试经常问到的一些细节知识,希望对你有帮助,觉得不错的,可以点赞收藏
TCP与UDP的区别
-
TCP面向连接的, 传输数据时,需先进行三次握手,建立连接,UDP是无连接的,发送数据之前不需要建立连接
-
TCP通过确认和重传机制,提供可靠的服务。即通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达,而UDP不保证可靠传输,只是尽可能得交付
-
TCP面向字节流,即将数据看成一连串无结构的字节流。UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
-
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
-
TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
TCP的三次握手和四次挥手
这个概念大家一定不陌生,我以前写过一篇详细关于TCP的三次握手和四次挥手的文章,可以参考,这里就不赘述
TCP流量控制
很多人会将流量控制和拥塞控制搞混,所以单独拎出来,考究细节
流量控制:如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。流量控制策略就是控制发送者的发送速度,使得接收者来得及接收,达到不丢失分组的目的。流量控制是构成TCP可靠性的一方面。
流量控制主要使用滑动窗口机制实现。下面以上图讲解滑动窗口(也叫接受窗口rwnd)的细节
主机A向主机B发送数据,开始双方确定的窗口值为400字节,这两个是前提条件。开始A发送了200字节,之后发生了分组丢失现象,B调整接受窗口大小为300字节。之后A又连续发送了300字节。此时A已经不能发送数据,需等待B的窗口信号。之后B调整窗口为100字节。接收到100字节数据后,调整窗口值为0,表示暂时不想接受数据。总共B调整了三次窗口大小,进行了三次流量控制
假如,B向A发送了零窗口的报文段后不久,B的接收缓存又有了一些存储空间。于是B向A发送了rwind=400的报文段,然而这个报文段在传送中丢失 了。A一直等待收到B发送的非零窗口的通知,而B也一直等待A发送的数据。这样就死锁了。为了解决这种死锁状态,TCP为每个连接设有一个持续计时器。只 要TCP连接的一方收到对方的零窗口通知,就启动持续计时器,若持续计时器设置的时间到期,就发送一个零窗口探测报文段(仅携带1字节的数据),而对方就在确认这个探测报文段时给出了现在的窗口值。
TCP拥塞控制
拥塞控制,大家都能背出来,什么慢开始、拥塞避免、快重传、快恢复,大家都耳熟能详,但是有些细节问题,可以大家没有留意,比如快重传阶段后,为什么不直接进入慢开始阶段,而是进入拥塞避免阶段?
拥塞的概念:在某段时间,对网络中的某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变化,这种情况叫拥塞。网络拥塞往往是由许多因素引起的,简单的提高节点处理机的速度或者扩大结点缓存的存储空间并不能解决拥塞问题。拥塞问题的是指往往是整个系统的各个部分不匹配,只有各个部分平衡了,问题才会得到解决。
拥塞控制:防止过多的数据注入到网络,导致网络中的路由器或链路过载。
流量控制和拥塞控制的区别:可以看出流量控制是一个端到端的问题,而拥塞控制是一个全局性问题,设计到所有的主机、所有的路由器。
慢开始:乘法增加
发送方维持一个拥塞窗口cwnd,大小取决于网络的拥塞程度,动态地在变化。发送窗口小于等于拥塞窗口,而发送窗口一定不能超过接收窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就增大一些,以便把更多的分组发送出去。但是只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络的分组数。
开始时,如果发送大量数据包,容易导致网络中路由器缓冲空间耗尽,从而发生拥塞。所以新建连接时,cwnd初始化为1个最大报文段(MSS)大小,每经过一个迭代,拥塞窗口就乘以2,所以也称为乘法增加阶段。拥塞窗口不可能一直增大,所以一般会设置一个慢开始门限ssthresh.
-
当cwnd<ssthresh时,使用慢开始算法。
-
当cwnd>ssthresh时,改用拥塞避免算法。
拥塞避免:加法增大
一旦达到慢开始的初始门限ssthresh,就进入了拥塞避免阶段。每一个迭代,拥塞窗口加1,而不是加一倍
快重传
快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。快重传策略是为了防止TCP连接因等待重传计时器超时而空闲较长的时间。
快恢复
快重传和快恢复是搭配使用的,快重传完成后,立即执行快恢复算法。将ssthresh门限设置为当前拥塞窗口的一半,之后将拥塞窗口设置为新的ssthresh门限(即减半), 进入拥塞避免阶段。
这里可能会有人有疑问,为什么不直接进入慢开始阶段,更彻底得避免拥塞。主要的原因是考虑到如果网络出现拥塞得话,就不会收到多次重复确认,所以发送方认为网络可能没有出现拥塞,所以不执行慢开始算法,而是将cwnd设置为新得ssthresh门限,执行拥塞避免算法
上面是本人总结的腾讯面试主要知识点,比较片面,如果你现在正在学习或者想再查漏补缺一下,推荐阅读华为18级大牛编写的这本网络协议;
华为大牛编写的网络协议
网络协议既是基础,又绕不过去,还这么难,但是趟过去之后又不怎么变,收益越来越大,那为什么不写一文档,给大家一点可借鉴的经验,帮助大家尽快掌握网络协议呢?
那么,今天咱们就从目录、主要包括的内容和总结三部分给大家进行网络协议的拓展学习,希望大家能够喜欢!!
目录
主要内容
主要把本文内容分为九章来给大家介绍:
第1章通信协议概述.
1.1为什么要学习网络协议
1.2网络分层的真实含义,总结一下本节的内容,理解网络协议的工作模式,有以下两个小窍门。
-
始终想象自己是一个处理网络包的程序:如何拿到网络包,如何根据规则进行处理,如何发出去。
-
始终牢记一个原则:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。
1.3 ifconfig:熟悉又陌生的命令行,通过本节的学习希望你能记住以下的知识点,后面都能用得上:
-
I地址有定位功能,MAC地址类似身份证号,无定位功能。
-
CIDR可以用来判断是不是本地地址。
-
IP地址分公网IP地址和私网IP地址。后面的章节中会谈到“出国门”,就与此有关。
1.4 DHCP与PXE:IP地址是怎么来的,又是怎么没的,本节内容总结如下:
-
DHCP主要租给客户端IP地址,这个过程和租房很像,要商谈、签约、续租,广播还不能“抢单”。
-
DHCP会给客户端推荐“装修队”PXE来安装操作系统,这在云计算领域大有用处。
第2章从二层到三层.
2.1从物理层到MAC层:如何在宿舍里自己组网玩联机游戏,本节有3个重点需要记住:
-
MAC层是用来解决多路访问的“堵车”问题的。
-
ARP是通过“吼”的方式来寻找目标MAC地址的,“吼”完之后会记住一段时间,这个叫作缓存。
-
交换机是有MAC地址学习能力的,学会了它就能知道谁在哪里,不用广播了。
2.2交换机与VLAN:办公室太复杂,我要回学校,本节总结如下:
-
·当交换机的数目越来越多时,会遭遇环路问题,让广播包迷路。这时就需要使用STP通过“比武论剑”的方式,将有环路的图变成没有环路的树,从而解决环路问题。
-
·交换机数目过多会导致隔离问题。可以通过VLAN形成虚拟局域网,从而解决广播问题和安全问题。
2.3ICMP与ping:投石问路的侦察兵,本节内容总结如下:
-
·ICMP 相当于网络世界的侦察兵。本节讲解了两种类型的ICMP报文,一种是主动探查的查询报文,一种异常报告的差错报文。
-
ping使用查询报文,Traceroute使用差错报文。
2.4世界这么大,我想出网关:欧洲十国游与玄奘西行,本节总结如下:
-
·如果离开局域网,就需要经过网关。
-
·路由器是一个三层设备,里面有如何寻找下一跳的规则。
-
·经过路由器之后MAC头要变,如果I地址不变,相当于不换护照的“欧洲十国游”,如果IP地址改变,相当于换护照的“玄奘西行”。
2.5路由协议:“西出网关无故人""敢问路在何方”,本节总结如下:
-
路由分静态路由和动态路由,静态路由可以配置复杂的策略路由,控制转发策略。
-
动态路由有两种主流协议,距离矢量路由协议和链路状态路由协议。分别对应BGP和OSPF 这两个实现。
第3章重要的传输层.
3.1 UDP:虽然简单但是可以定制化,本节总结如下:
-
如果将TCP比作成熟的社会人,UDP则是头脑简单的小朋友。TCP复杂,UDP简单。TCP维护连接,UDP谁都相信。TCP知进退,UDP愣头青一个,勇往直前。
-
·UDP虽然简单,但它有简单的用法。它可以用在环境简单、需要多播、应用层自己控制传输的地方,例如DHCP、VXLAN、QUIC等。
3.2 TCP(上):虽然复杂,使用起来却轻松,本节总结如下:
-
· TCP头很复杂,但是主要关注五个方面:顺序问题、丢包问题、连接维护、流量控制,以及拥塞控制。
-
连接的建立要经过三次握手,断开要经过四次挥手。
3.3 TCP (下):西行必定多妖孽,恒心智慧消磨难,总结如下:
-
顺序问题、丢包问题、流量控制都是通过滑动窗口来解决的,滑动窗口其实就相当于领导和下属的工作备忘录,布置过的工作要有编号,干完了有反馈,活儿不能派太多,也不能太少。
-
拥塞控制是通过拥塞窗口来解决的,相当于往管道里面倒水,快了容易溢出,慢了浪费带宽,要摸着石头过河,找到最优值。
3.4 socket: Talk is cheap, show me the code ,本节总结如下:
-
你需要记住在基于TCP和UDP的socket程序的函数调用过程中,客户端和服务端都需要调用哪些函数。
-
写一个能够支撑大量连接的高并发的服务端不容易,需要多进程、多线程,而 epoll能解决C10K问题。
由于此文档内容太多了,在这里简单介绍下这三章内容吧;
这份【趣谈网络协议】文档共有435页,需要完整版的朋友,可以点赞此文后添加↓↓↓来获取!!
当然,单单有文档看是远远不够的,还有视频和相匹配的课件进行学习提升,努力把计算机网络这一块儿给搞明白,相信一定会有不凡的人生!!
TCP/IP/网络IO学习视频
TCP/IP网络协议
网络IO
还有课件分享
IO课件
TCP/IP课件
TCP/IP/IO网络通信视频和课件获取,点赞此文后添加↓↓↓↓免费获取!
好了,今天就分享到这里了,希望大家能够好好学习,把计算机网络这一块儿给提升上来,也希望本文能够得到大家的喜欢!!