字节后端面经汇总(计网部分)
字节跳动后端开发面经汇总(Python)
- 字节后端面经汇总(计网部分)
- 一. 计算机网络
-
- ①计算机网络模型
- ②TCP 与 UDP
-
- 用UDP设计可靠传输
- TCP怎么保证数据包有序
- 100Mbps的带宽三个人使用,每人50Mbps,TCP怎么保证速度的
- TCP与UDP的异同(什么时候选择TCP/UDP)
- TCP怎么保证可靠性
- TCP中拥塞避免和流量控制机制
- TCP的接收窗口
- TCP的三次握手与四次挥手
- TCP慢启动(客户端服务端滑动窗口大小如何协商)
- TCP丢包重发了收到重复的包怎么办
- 三次握手时产生的序列号干什么用的
- 为什么要三次握手?两次?四次?
- 四次挥手之后为什么还要等2msl
- 四次挥手中,time_wait和close_wait的状态
- 描述一下向socket传值的流程
- Tcp: 拔网线之后连接是否存在 为什么 (记得Tcp的长连接是有一个类似心跳检测的机制,忘了叫啥了,面试官问我心跳检测是在传输层吗还是应用层 ,我说应用层有心跳检测,但tcp那层也有类似的,后来回来看了下tcp的保活,跟我当时说的差不多,就是名词没想起来)
- ③HTTP 和 HTTPS
-
- HTTPS的原理和实现
- HTTPS的连接过程
- HTTPS怎么确认收到的包是服务器发来的
- HTTP跟HTTPS的区别(get跟post在HTTPS里面是加密的吗)
- 输入 www.baidu.com,怎么变成 https://www.baidu.com 的,怎么确定用HTTP还是HTTPS
- HTTP 1.0,1.1,2,3区别 ( 帧,流,推送,头部压缩,安全性等等)
- HTTP为什么是TCP,HTTP可以使用UDP吗
- HTTP keep-alive,管道化
- HTTP和RPC的区别
- HTTP请求响应的过程,HTTP请求包含的部分,HTTP请求头包含哪些部分
- HTTP的常见方法,post与get差别,常见的请求头key-val对
- HTTP中put delete,put和post区别(安全,幂等,长度,状态等)
- http的501,502,503,504什么意思
- 介绍http报文结构,以及常用的首部有哪些
- ④cookie 与 session
- ⑤加解密
- ⑥设计题
- ⑦其他
- ②其他
-
- SSO原理
- 按ctrl+C发生了什么
- docker的隔离和底层实现
- JAVA GC机制
- C++虚函数表,只有虚函数表的对象占据多少内存
- C++内存分布
- C++虚函数
- const 与 #define
- 使用Django时觉得他有哪些好的特性
- Tornado 为什么那么快 (雾)
- Git 切换分支,提交,具体如何合并分支
- 项目版本控制使用什么方案
- 怎么解决项目部署中跨域的问题
- 如何解决下订单时有库存付钱时没有库存的情况
- 虫子在正负无限的任意点开始爬,速度是固定的,但你不知道速度和方向。你可以每秒check一个点,怎么找到虫子(如果从原点出发呢)
- 需求:谁关注了我,我关注了谁,谁与我互相关注。表该如何设计,索引怎么建,查询语句怎么写
一. 计算机网络
①计算机网络模型
路由器/交换机是哪一层
①路由器工作在网络层,可以在多个网络上交换路由数据包。它提供了路由与转发两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如IP协议。
②交换机工作在数据链路层,采用存储转发的形式来交换报文,交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。
DNS及查询过程
DNS(域名系统)负责解析域名。该系统用于命名组织到域层次结构中的计算机和网络服务,可以简单地理解为将URL转换为IP地址。域名是由圆点分开一串单词或缩写组成的,每一个域名都对应一个唯一的IP地址,在Internet上域名与IP地址之间是一一对应的,DNS就是进行域名解析的服务器。DNS命名用于Internet等TCP/IP网络中,通过用户友好的名称查找计算机和服务。
交换机是如何工作的
见题一
网络层和传输层的作用
①网络层:路径选择、路由及逻辑寻址。网络层中IP协议:提供不可靠、无连接的传送服务。IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。与IP协议配套使用实现其功能的还有地址解析协议ARP、逆地址解析协议RARP、因特网报文协议ICMP、因特网组管理协议IGMP。
②传输层:传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。
网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口
数据链路层详细介绍
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。为达到这一目的,数据链路必须具备一系列相应的功能,主要有:如何将数据组合成数据块,在数据链路层中称这种数据块为帧(frame),帧是数据链路层的传送单位;如何控制帧在物理信道上的传输,包括如何处理传输差错,如何调节发送速率以使与接收方相匹配;以及在两个网络实体之间提供数据链路通路的建立、维持和释放的管理。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
OSI七层模型和TCP/IP四层模型
I/O多路复用与其他网络I/O模型的区别
最大传输单元(MTU)
最大传输单元( MTU)是指在数据链路层上面所能通过的最大数据包大小(以字节为单位)。
如果在IP层要传输一个数据报比链路层的MTU还大,那么IP层就会对这个数据报进行分片。一个数据报会被分为若干片,每个分片的大小都小于或者等于链路层的MTU值。当同一网络上的主机互相进行通信时,该网络的MTU对通信双方非常重要。但当主机间要通过很多网络才能通信时,对通信双方最重要的是通信路径中最小的MTU,因为在通信路径上不同网络的链路层MTU不同。通信路径中最小的MTU被称为路径MTU(类似木桶原理)。
WebSocket
WebSocket是一种在单个TCP连接上进行全双工通信的协议,因为HTTP 协议有一个缺陷:通信只能由客户端发起,这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息,最典型的场景就是聊天室。WebSocket的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
②TCP 与 UDP
用UDP设计可靠传输
传输层使用UDP协议无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照TCP可靠性传输的方式,只是实现不在传输层,实现转移到了应用层:
1、添加seq/ack机制,确保数据发送到对端
2、添加发送和接收缓冲区
3、添加超时重传机制
发送端发送数据时,生成一个随机seq=x,然后每一片按照数据大小分配seq。数据到达接收端后接收端放入缓存,并发送一个ack=x的包,表示对方已经收到了数据。发送端收到了ack包后,删除缓冲区对应的数据。时间到后,定时任务检查是否需要重传数据。
利用UDP实现的开源程序:RUDP、RTP、UDT
TCP怎么保证数据包有序
- 主机每次发送数据时,TCP就给每个数据包分配一个序列号并且在一个特定的时间内等待接收主机对分配的这个序列号进行确认
- 如果发送主机在一个特定时间内没有收到接收主机的确认,则发送主机会重传此数据包
- 接收主机利用序列号对接收的数据进行确认,以便检测对方发送的数据是否有丢失或者乱序等
- 接收主机一旦收到已经顺序化的数据,它就将这些数据按正确的顺序重组成数据流并传递到高层进行处理
具体实现步骤:
① 为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区
② 为每个已发送的数据包启动一个超时定时器
③如在定时器超时之前收到了对方发来的应答信息,则释放该数据包占用的缓冲区
④否则,重传该数据包,直到收到应答或重传次数超过规定的最大次数为止
⑤接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包,表明该数据已收到
100Mbps的带宽三个人使用,每人50Mbps,TCP怎么保证速度的
TCP与UDP的异同(什么时候选择TCP/UDP)
TCP | UDP |
---|---|
可靠传输 | 不可靠传输 |
TCP是基于连接的协议,在正式收发数据前,必须和对方建立可靠的连接。 | UDP是面向非连接的协议,它不与对方建立连接,而是直接把数据包发送出去 |
TCP是一种可靠的通信服务,负载相对而言比较大,TCP采用套接字(socket)或者端口(port)来建立通信。 | UDP是一种不可靠的网络服务,负载比较小。 |
TCP包括序号、确认信号、数据偏移、控制标志(URG、ACK、PSH、RST、SYN、FIN等)、窗口、校验和、紧急指针、选项等信息 | UDP包含长度和校验和信息 |
TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端 | UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地 |
TCP在发送数据包前在通信双方有一个三次握手机制,确保双方准备好,在传输数据包期间,TCP会根据链路中数据流量的大小来调节传送的速率,传输时如果发现有丢包,会有严格的重传机制,故而传输速度很慢 | UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快 |
对某些实时性要求比较高的情况,选择UDP,比如游戏,媒体通信,实时视频流(直播),即使出现传输错误也可以容忍;其它大部分情况下,HTTP都是用TCP,因为要求传输的内容可靠,不出现丢失
TCP怎么保证可靠性
- 数据包校验
- 对失序数据包重新排序(TCP报文具有序列号)
- 丢弃重复数据
- 应答机制:接收方收到数据之后,会发送一个确认(通常延迟几分之一秒)
- 超时重发:发送方发出数据之后,启动定时器,超时未收到接收方的确认,则重新发送数据
- 流量控制:确保接收端能够接收发送方的数据而不会缓冲区溢出
TCP中拥塞避免和流量控制机制
一 . 拥塞控制:
拥塞控制主要由四个算法组成:慢启动、拥塞避免、快重传 、快恢复
- 慢启动:刚开始发送数据时,先把拥塞窗口设置为一个最大报文段MSS的数值,每收到一个新的确认报文之后,就把拥塞窗口加1个MSS,每经过一个传输轮次(或者说是每经过一个往返时间RTT),拥塞窗口的大小就会加倍
- 拥塞避免:当拥塞窗口的大小达到慢开始门限(slow start threshold)时,开始执行拥塞避免算法,拥塞窗口大小不再指数增加,而是线性增加,即每经过一个传输轮次只增加1MSS.、
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。(这是不使用快重传的情况)
- 快重传:要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期
- 快恢复:连续收到三个重复确认时,就把慢开始门限减半,然后执行拥塞避免算法。不执行慢开始算法的原因:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方认为现在网络可能没有出现拥塞。
二. 流量控制机制:
TCP的流量控制机制依靠滑动窗口: 为了防止发送方发送速率太快,接收方缓存区不够导致溢出。接收方会维护一个接收窗口 receiver window(窗口大小单位是字节),接受窗口的大小是根据自己的资源情况动态调整的,在返回ACK时将接受窗口大小放在TCP报文中的窗口字段告知发送方。发送窗口的大小不能超过接受窗口的大小,只有当发送方发送并收到确认之后,才能将发送窗口右移。
发送窗口的上限为接受窗口和拥塞窗口中的较小值。接受窗口表明了接收方的接收能力,拥塞窗口表明了网络的传送能力
零窗口(接收窗口为0时会怎样ÿ