面试--网络编程

1、TCP/IP协议四层模型

应用层:负责为用户提供应用功能

  协议:HTTP,DNS,SSH,FTP,SMTP

传输层:负责进程与进程之间的通信

  协议:TCP,UDP

网络层:负责网络包的分片,路由

  协议:ARP,RARP,DHCP,NAT,ICMP

网络结构层:负责网络包在物理网络上的传输

  协议:PPP

2、OSI七层模型

应用层

表示层

会话层

传输层

网络层

数据链路层

物理层

3、常用协议和作用

应用层:

  HTTP:在互联网两台设备之间传递超文本的规范

  DNS:把域名解析为IP地址

传输层:

  TCP:传输控制协议

  UDP:用户数据包协议

网络层:

  ARP:地址解析协议,由IP地址获取MAC地址

  RARP:由MAC地址,获取IP地址

  DHCP:动态获取IP地址

  NAT:实现 内网IP与外网IP 的相互转换,缓解外网IP的消耗

  ICMP:告知网络包传送过程中产生的错误信息

4、TCP和UDP的区别

  1)TCP需要先建立连接,而且接收方收到后必须相应,发送方收到相应后这个数据包才算传输完成,所以它是可靠的,能保证数据不丢失不重复,

     UDP不用先建立连接,它可以任意的发送数据,传输效率高,但是不能保证数据能到达,

    所以TCP协议常应用于稳定性需求较高的场景,如购票系统、文件传输等,而UDP则应用于实时性比较高的场景,如视频会议等。

  2)TCP仅支持一对一;而UDP不仅支持一对一,还支持一对多、多对多的交互通信。

  3)TCP报文不限制最大长度,一次发送可以分多次来接收;UDP报文的最大长度为65535个字节,分几次发送就必须分几次接收,一个大报文只要丢了一个分片,整个UDP就都会被丢弃

5、DNS查询的过程(域名解析)

  1)浏览器查看自身缓存

  2)操作系统缓存

  3)本机hosts文件

  4)本地域名服务器

    根域名服务器

    顶级域名服务器(com)

    权威域名服务器(qq.com,sports.qq.com)

  5)本地域名服务器返回查到的IP给浏览器

6、浏览器输入url中间经历的过程

  1)浏览器从地址栏的输入中解析url,获取web服务器的IP地址和端口号

  2)浏览器通过三次握手与web服务器建立TCP连接

  3)浏览器发送HTTP请求报文,这个报文会一次加上TCP头,IP头,MAC,组成一个完整的数据包

  4)数据包经过网卡转换为电信号,在网线上传输,中途要经过很多次交换机和路由器

  5)经过路由器,路由器会查询路由表来确定下一跳IP,一直转发到与目标IP同一网段的路由器

  6)这个路由器会查ARP表获取目标IP服务器的MAC地址,然后 通过某个端口转发给web服务器

  7)web服务器收到数据包后,会依次拆开MAC头,IP头,TCP头,然后把HTTP请求报文监听给指定端口的服务器端进程

  8)服务端进程收到请求报文后处理请求,然后发送响应报文给浏览器

  9)浏览器收到后解析响应报文,渲染输出页面

7、集线器、交换机和路由器的区别

  1)集线器工作中物理层,通过广播的形式转发数据,实现局域网内设备的连接,只能半双工通信

  2)交换机工作在数据链路层,通过MAC地址转发数据,实现局域网内设备的连接,是全双工通信

  3)路由器是工作中网络层,通过IP地址转发数据,实现不同网络的通信

8、TCP三次握手和四次分手

  TCP协议状态转移(三次握手四次挥手)

9、TCP如何保证可靠通信

  1)校验和:TCP头有校验和字段吗,检测数据传输过程中是否有差错,若有则丢弃

  2)超时重传:发送方在规定的时间内没有时候收到确认则会重传之前的报文

  3)流量控制

  4)拥塞控制

10、正向代理和反向代理

  1)正向代理:是客户端的代理,代替客户端发起网络请求

    可以对外隐藏客户端信息,保护用户隐私

    可以访问客户端无法访问的资源,如国内访问谷歌需要先连接一个正向代理服务器

  2)反向代理:是服务器端的代理,代替服务器端接收网络请求

    可以对外隐藏服务端信息,防止内网的服务器被攻击

    可以实现负载均衡,把访问压力分散到多个服务器上

11、GET和POST的区别

  1)GET是从服务器获取数据,POST用于向服务器提交数据

  2)GET请求是安全且幂等的,多用于查询操作;POST请求既不安全也不幂等,多用于注册操作、

ps:

  • 此处安全指的是:请求方法不会修改服务器的资源
  • 此处幂等值的是:多次请求返回的结果都相同

12、HTTP协议详解

  HTTP协议详解

13、HTTP的优缺点

  1)简单灵活可扩展

  2)可靠传输,HTTP协议基于TCP协议

  3)跨语言平台,不限定某种指定的编程语言或者操作系统

  4)无状态,每个请求都是互相独立的,好处是可以通过负载均衡把请求转发到任意一台服务器,坏处是每次请求都要验证身份信息

  5)请求-答应模式,客户端主动发起请求,服务端被动回复请求,效率极低,可能发生队头阻塞

  6)明文传输,如果被钓鱼攻击,可能会泄漏账号密码等敏感信息

  7)不安全,无法判断传输过程中报文是否被篡改

14、HTTP/1.1的优缺点

  1)使用长连接,减少了频繁建立与断开连接的开销

  2)可以连续发送多个请求,减少了整体时间的等待

  3)如果前面IND请求相应特别慢,会阻塞后面的所有请求(队头阻塞)

  4)以文本格式传输header,有严重的数据冗余

  5)明文传输,不安全

15、HTTP/2的特点

  1)头部压缩

  2)报文以二进制格式传输

  3)支持服务端主动向客户端发送消息

  4)使用数据流全双工通信,解决了队头阻塞问题

  5)支持请求优先级,让服务器优先处理重要资源,优化用户体验

16、HTTP与HTTPS的区别

  1)HTTP是明文传输,不安全;HTTPS在传输层和应用层之间加了TLS层,使得报文能加密传输

  2)HTTP的端口是80,HTTPS端口是443 

  3)HTTPS在TCP三次握手后还要进行TLS握手

17、HTTPS是如何保证安全的?

  1)混合加密,解决窃听问题

  2)摘要算法,解决篡改问题

  3)将服务端的公钥放到数字证书中,解决了冒充的问题

18、HTTPS TLS的握手过程

  HTTPS 详解二:SSL / TLS 工作原理和详细握手过程

19、HTTPS,HTTP/2,WebSocket分别解决了HTTP的什么问题?

  1)HTTPS:加密传输,保证安全通信

  2)HTTP/2:解决队头阻塞

  3)WebbSocket:不再使用“请求-应答”模式,而是全双工实时通信

20、什么是IO多路复用

IO多路复用中,多路指的是有多个文件描述符fd,复用指的是都用一个线程来处理。它实现了用一个线程监视多个fd,一旦有fd就绪,select、poll或epoll这些系统调用就会返回,用户态线程就可以对这些fd进行相应的读写操作。

它的效率很高,因为它由操作系统内核帮我们找出就绪的fd,使得我们不必轮询每个fd 的read()函数,从而避免频繁的切换上下文。

21、同步、异步、阻塞、非阻塞 IO 的区别

  1)同步IO:调用IO函数后等待结果返回

  2)异步IO:调用IO函数后直接返回,等IO完成后会自动调用回调函数

  3)阻塞IO:在等待IO结果返回时,会主动让出CPU时间片,进入阻塞态

  4)非阻塞IO:在等待IO结果返回时,不断轮询,直到收到结果

22、select、poll、epoll的区别

  1)select只知道有fd就绪,但不知道具体是哪几个,需要用户自己遍历找到就绪的fd

  2)poll本质上好select没有区别,但是它去除了select只能监听1024个fd的限制

  3)epoll会直接返回已就绪的fd,但是它只能在Linux操作系统上用

23、TCP粘包问题

多个TCP数据包传输的数据内容合在一起了,没办法区分边界,产生原因:

  1)发送方两次send()的时间间隔太短,TCP会用Nagle算法把他们的数据内容合在一起

  2)接收方没及时用recv()接收缓冲区的包,导致多个TCP包的数据内容合在一起

解决方法:

  1)采用请求-应答模式,每次都一收一发

  2)自定义消息格式:包头 + 包体,包头是一个4字节整数,记录包体长度,每次先手4字节,读出包体长度,再收取对应字节的数据就是包体

24、如何理解TCP的有状态和HTTP的无状态

  1)TCP有状态:是指它不同的请求之间都是有关联的,比如序号seq(seq表示本次发送数据的偏移量,ack表示回复已经接收到的数据量)是递增的,而且它能够记住和它相连主机的IP和端口

  2)HTTP无状态:是指它不同请求之间是独立的,而且它不会记住刚刚登录的用户

25、HTTP状态保存

HTTP本身是无状态的,从而导致用户登录之后,下次发送请求还要携带账号密码进行身份验证

所以为了让HTTP有状态,需要额外引入一些机制,来记录浏览器和服务端的会话状态:

  1)sesson  

  2)cookie

  3)token

26、Session和Cookie的区别

都是为了让HTTP实现状态的保持

  1)cookie数据一般保存在浏览器缓存中,可以被篡改,不安全,发送请求时由于要携带cookie,会消耗更多宽带

     cookie是服务器委托浏览器存储的一些数据,一般会用于保存用户名,购物车等信息

  2)session数据一般保存在服务器内存中,当访问量大时,服务器内存压力大

        当有多台服务器时,多次请求很可能会落到不同的服务器上,使得状态保持失效,不利于分布式服务器进行负载均衡处理

27、Session、Cokkie、Token 的原理

  1)Cookie:用户登录后,服务端委托浏览器把用户信息存储在cookie中,客户端每次发起请求时要携带这个cookie,服务端收到请求时从cookie中取出用户信息,就知道是哪个用户了。

            但是服务器无法检测 这个cookie是否被篡改,所以不安全。

  2)Session:用户登录后将用户信息保存到服务器内存中,并返回一个ssesionid让浏览器设置到cookie中,浏览器之后每次发起请求都会携带cookie,服务端收到后取出cookie中的sessionid,再从内存中取出与之相对应的用户信息,这样就知道是哪个用户了。

        但是当用户增多时,服务器内存压力会很大。

  3)Token:用户登录后,服务端会签发一个token发给客户端,客户端收到后爸token放到cookie或LocalStorage(局部存储器),之后每次向服务端请求资源时都要携带token,服务端收到后验证tokne,就知道哪个用户了。

        服务端可以检测到token是否被篡改,比较安全

28、衡量服务器性能的三大标准

  1)吞吐量(requests per second):每秒请求次数,简称RPS,TPS,QPS

  2)并发数(concurrency):服务器能同时支持的客户端数量

  3)响应时间(time per request):服务器的处理能力

29、HTTP请求头和响应头

  http协议详解

30、socket读写的简单过程

当客户端和服务端进行通信时,客户端封装一个请求对象req,将请求对象req序列化成字节数组,然后通过套接字socket将字节数组发送到服务器,服务器通过套接字socket读取到字节数组,再反序列化成请求对象req,进行处理,处理完毕后,生成一个响应对象res,将响应对象res序列化成字节数组,然后通过套接字将字节数组发送给客户端,客户端通过套接字socket读取到字节数组,在反序列化成响应对象。

31、什么是大、小端字节序

字节序:指数据在内存中的存放顺序,字节数大于1时需要考虑

  1)大端字节序:高位字节放在内存的低地址端,低位字节放在内存的高地址端;

  2)小端字节序:低位字节放在内存的低地址端,高位字节放在内存的高地址端;

32、主机字节序和网络字节序

现代PC大多(Mac OS 是大端字节序)采用小端字节序,小端字节序也称为主机字节序

TCP/IP协议规定使用大端字节序作为网络字节序,所以需要发送端先转换为大端字节序然后发送,所以大端字节序也称为网络字节序

即使是同一机器上的两个进程(如c和java编写的程序),也要考虑字节序的问题。

 

 ***原文地址***

https://blog.csdn.net/qq_38992249/article/details/120886081?spm=1001.2014.3001.5506

 

 

 

 

 

 
posted @ 2022-04-20 13:58  NK-cat  阅读(113)  评论(0编辑  收藏  举报