计算机网络

计算机网络面试

1、TCP拥塞控制 :博客

2、一个比较大的数据报TCP和UDP分别怎么处理: 待解决

3、用UDP通讯如何保证对方百分百收到数据?:博客

4、protobuf使用详解: 博客

5、粘包: 博客

为什么UDP不粘包
对于UDP,不会使用块的合并优化算法,不存在封包,再加上UDP本身是一个“数据包“协议,也就是两段数据是有界限的。从TCP和UDP的头部结构体就可以很明显的看到,UDP头部是记录了数据的长度的,而TCP头部里面并没有记录数据长度的变量。
TCP头部
在这里插入图片描述
UDP头部
在这里插入图片描述
什么是封包和解包?
封包就是给一段数据加上包头,这样一来数据包就分为包头和包体两部分内容了(可加上包尾)。包头其实是一个大小固定的结构体,其中有个结构体成员变量表示包体的长度,这是个很重要的变量,其他的结构体成员可根据需要自己定义。根据固定的包头长度以及包头中含有的包体长度变量值就能正确的拆分出一个完整的数据包。

利用底层的缓冲区来进行解包时,由于TCP也维护了一个缓冲区,所以可以利用TCP的缓冲区来解包,也就是循环不停地接收包头给出的数据,直到收够为止,这就是一个完整的TCP包。
tcp无保护消息边界的问题 :
什么是保护消息边界和流
tcp协议的无消息边界问题
粘包现象与解决粘包现象

6、tcp/ip协议的三次握手,四次分手:
详细地址

tcp协议的每个字段的含义:
在这里插入图片描述
Source Port和Destination Port:分别占用16位,表示源端口号和目的端口号;用于区别主机中的不同进程, 而IP地址是用来区分不同的主机的,源端口号和目的端口号配合上IP首部中的源IP地址和目的IP地址就能唯一 的确定一个TCP连接;

Sequence Number:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据 字节在数据流中的序号;主要用来解决网络报乱序的问题;

Acknowledgment Number:32位确认序列号包含发送确认的一端所期望收到的下一个序号,因此,确认序号应 当是上次已成功收到数据字节序号加1。不过,只有当标志位中的ACK标志(下面介绍)为1时该确认序列号的字 段才有效。主要用来解决不丢包的问题;

Offset:给出首部中32 bit字的数目,需要这个值是因为任选字段的长度是可变的。这个字段占4bit(最多能 表示15个32bit的的字,即4*15=60个字节的首部长度),因此TCP最多有60字节的首部。然而,没有任选字段, 正常的长度是20字节;

TCP Flags:TCP首部中有6个标志比特,它们中的多个可同时被设置为1,主要是用于操控TCP的状态机的,依次 为URG,ACK,PSH,RST,SYN,FIN。每个标志位的意思如下:

URG:此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促 中间层设备要尽快处理这些数据;

ACK:此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:0和1, 为1的时候表示应答域有效,反之为0;

PSH:这个标志位表示Push操作。所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序, 而不是在缓冲区中排队;

RST:这个标志表示连接复位请求。用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;

SYN:表示同步序号,用来建立连接。SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1, ACK=0;连接被响应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。扫描者发送 一个只有SYN的数据包,如果对方主机响应了一个数据包回来 ,就表明这台主机存在这个端口;但是由于这 种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全 的主机将会强制要求一个连接严格的进行TCP的三次握手;

FIN: 表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送FIN标志 位的TCP数据包后,连接将被断开。这个标志的数据包也经常被用于进行端口扫描。

三次握手:
在这里插入图片描述
四次分手:

在这里插入图片描述
三次握手,四次分手的状态图博客
TCP三次握手和四次挥手以及缺陷(详细)

TCP连接的状态(close_wait过多,time_wait过多)

解决TIME_WAIT过多造成的问题

tcp的拥塞控制算法

在这里插入图片描述

慢开始算法

慢开始算法是在cwnd未达到ssthresh时,cwnd不断地×2

当发生超时重传时,ssthresh会减少为当前cwnd的一半,并且cwnd的值变为1,并重新开始慢开始算法。
在这里插入图片描述

在这里插入图片描述

快重传以及快恢复算法的截图示意
在这里插入图片描述

快重传的原理示意图
在这里插入图片描述
一幅图解决拥塞控制的所有算法。
在这里插入图片描述

场景题:一个正在发送数据的tcp连接断开后又重连,怎么在业务层保证可靠?:待解决
关于tcp断线重连的问题

TCP滑动窗口:博客1 博客2

会发生死锁问题,当客户端说缓冲区rwnd=0时,服务器会停止发送数据并等待,待客户端接收缓冲区有位置后,再发一条确认信息给服务器端,那么服务器端就可以根据窗口大小调整发送窗口的大小来发送数据,但是如果客户端发送的那一条确认消息丢了的话,会导致两边都处于等待状态,A在等B的确认端口信息,B在等A传数据给他。造成死锁问题,这个时候持续定时器就发挥了作用,当A很久没有收到来自B的确认包时,会试探性地朝B发送数据,然后B就会得到数据,并回复报文。

1、讲讲对tcp的理解
2、tcp怎么保证可靠性的
3、tcp是怎么重传的。一是基于时间,二是基于确认信息的构成。
4、为什么要有超时重传和快速重传
5、丢包一定是拥塞的问题嘛 网线缆线或硬件问题 软件问题
6、怎么解决丢包误判为网络拥塞降低拥塞窗口而导致传输速率的下降。

http请求与响应全过程
面试题:从输入URL到页面加载的过程?

请说说HTTP的工作原理
HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。

GET和POST区别

HTTP协议特点(内含cookie,session)

IP,子网,子网掩码,网关,DNS到底都是啥

子网通信过程(包含子网间,子网内通信过程)

2.TCP传输原理
发送端操作:
(1)收到应用层下发的数据流后,TCP根据建立连接时确定的MSS(Maxium Segment Size)设定每次需要发送的字节数量(称为TCP分段);
(2)在要发送的字节流前添加TCP协议头,添加TCP头的目的是为了可靠传输、传输控制;
接收端操作:
(1)对接收的TCP报文,校验协议头,并对收到的数据进行确认;
(2)构造ACK回复给发送端,确认数据已经接收,发送端可进行下个数据发送;

DatagramSocket具备发送和接受功能,在进行UDP传输时,需要明确一个是发送端,一个是接收端。

UDP的传输原理
UDP的发送端:

建立UDP的socket服务,创建对象时如果没有明确端口,系统会自动分配一个未使用的端口。
明确要发送的具体数据。
将数据封装成了数据包。
用socket服务的send方法将数据包发送出去。
关闭资源。
UDP的接受端:

创建UDP的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接受端可以处理的数据。
定义数据包,用于存储接收到数据。
通过socket服务的接收方法将收到的数据存储到数据包中
通过数据包的方法获取数据包中的具体数据内容,比如IP、端口、数据等等。
关闭资源。

cookie和session
什么是cookie
什么是session

http和https的区别,以及ssl加密原理

端口被占用了怎么办

HTTPS篇之SSL握手过程详解

http状态码

服务器端发送的公钥:服务器必须保证它发送的证书与选择的算法套件一致。比方说,公钥算法与套件中使用的必须匹配。除此以外,一些密钥交换算法依赖嵌入证书的特定数据,而且要求证书必须以客户端支持的算法签名。所有这些都表明服务器需要配置多个证书(每个证书可能会配备不同的证书链)。

HTTPS篇之SSL握手过程详解

TCP的三次握手是否都可以携带数据

HTTP请求报文与响应报文格式,含:get与post的区别

HTTP2.0和HTTP1.0的区别

HTTP断点续传原理 状态码206 Partial Content

post请求数据体很大怎么办

服务器——异常处理

几种常见的加密算法

HTTPS详细解析、TLS四次握手

8、一个保存很多整型数字的大文件,不能直接load到内存,怎么排序?(先哈希成小文件,对每个小文件排序,然后再用个小顶堆将排序之后的小文件进行排序)怎么更快?(多线程,对每个小文件的排序可以并行,对小文件的归并也可以并行)
9、如果线上报警,有个主进程不见了,怎么排查?(答先确定是不是真的宕机,如果真的宕机,可能会是两个问题,一是内存访问错误导致coredump,比如空指针,double free这些,可以对coredump文件进行分析,打出函数调用栈以及crash时候的一些变量进行分析;二是可能是内存泄漏导致系统内存不够,系统直接杀掉了这个进程,可以使用valgrind对程序进行内存泄漏分析,根据分析报告对程序内存泄漏部分进行修复)。
10、要将一个文件同时传输给1000个远程机器,怎么实现?(答说写一个脚本批量传,面试官说那每个机器都需要输入密码,面试官提示说有一个公钥体系,马上想到了前几天我才配置过的,配置公钥私钥,服务器上公钥,将其加入到受信任的key的配置文件中,本地机器用私钥,然后写个脚本,在登录时指定使用私钥登录,就可以免密码)。
11、磁盘上面有很多特征,key是用户ID,value是用户的特征,然后有一个集群,怎么可以快速更新每个用户的特征?(这个问题没答好,说了哈希将特征映射到集群上的每台机器上,又说了用一致性哈希,面试官说需要快速更新,怎么改进?不太清楚了,面试官说列更新知道吗,不太清楚,有知道的大佬求教一下。。。)

网络层和传输层的功能和区别

TCP异常的原因

TCP快速重传为什么是三次冗余ack,这个三次是怎么定下来的?

TCP四次挥手中的2MSL是什么?

UDP广播原理及步骤
tcp不可以广播只可以模拟广播。

IP协议协议–IP头部信息

TCP协议详解(一):TCP头部结构

http/2.0“多路复用”实现原理

网络:为什么会出现大量的time_wait状态

TCP 半连接队列和全连接队列满了会发生什么?又该如何应对?

HTTP1.0、HTTP2.0、HTTP 3.0及HTTPS简要介绍

HTTP keep-alive和TCP keepalive的区别,你了解吗?

如何判断两个IP地址是不是在同一个网段

防范 XSS攻击、CSRF、SQL注入、DDOS攻击

forward和redirect的区别是什么?

5种TCP连接中出现RST的情况。连接复位Reset a connection.

ping的实现和代码分析

ping失败的结果分析

什么是重定向?请求流程及其原理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值