当前位置: 首页 > article >正文

嵌入式岗位面试八股文(篇四 网络编程)

wx:嵌入式工程师成长日记

ddd39e6b19e14e33897aa6213919c759.png

1.socket网络编程中客户端和服务端用到哪些函数

1)服务器端函数:

(1)socket创建一个套接字

(2)bind绑定ip和port

(3)listen使套接字变为可以被动链接

(4)accept等待客户端的链接

(5)write/read接收发送数据

(6)close关闭连接

2)客户端函数:

(1)创建一个socket,用函数socket()

(2)bind绑定ip和port

(3)连接服务器,用函数connect()

(4)收发数据,用函数send()和recv(),或read()和write()

(5)close关闭连接

 UDP

 

网络四层模型

应用层http/TFTP

传输层TCP/UDP

网络层IP/ICMP

链路层

TCP如何保证可靠性?

1.通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部

2.数据到达接收方之后,接收方会发送一个确认应答,表示已经收到数据段,并且确认序号会说明了它下一次需要接收的数据序列号,如果发送方没收到确认应答,那么发送方方会进行重发,这个等待时间一般是2*RTT(往返时间)+一个偏差值

如果一个包多次重发没有收到接收端的确认包,就会强制关闭连接

3.TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值,如果不使用窗口控制,每一个没收到应答的数据都要重发

TCP建立连接和断开连接过程

三次握手和四次挥手

1)三次握手目的:是为了确认客户端和服务器都能收发

第一次:

作用:客户端确认自己可以发    服务器确认自己能收,客户端可以发

客户端发送信息给服务器,服务器接受客户端信息    

第二次:

作用:客户端确认自己能收,服务器能发也能收, 服务器确认自己能发

服务器发送应答给客户端,客户端接收应答和报文

第三次:

作用:服务器确认客户端可以收到

客户端应答服务器

三次握手:

第一次:客户端将标志位SYN设置为1,随机产生一个seq=x,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认

第二次:服务端收到数据包后,由标志位SYN=1可知client请求连接,服务端将标志位SYN和ACK都置1,ack=x+1,并将该数据包发送给客户端确认连接请求,服务端进入SYN_RCVD状态

第三次:客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确,将数据包发给服务端,服务端检查ACK是否为1,ack是否为y+1,如果是,则连接成功,服务器和客户端都进入ESTABLISHED

2)四次挥手:

客户端发送FIN=1给客户端,告诉服务端数据已经发送完毕,请求终止连接,此时客户端不能发送数据(不包括协议,比如应答这些),但还能接收数据,

服务端接受FIN包之后给客户端回一个ACK包告诉它自己已经收到,此时没有断开socket连接,而是等待剩下的数据传输完成

服务端等待数据传输完毕之后,向客户端发送FIN包,表明可以断开连接

客户端收到后,回应一个ACK包表明已经收到,等待一段时间,确保服务端没有数据再发来,然后彻底断开

TCP为什么比UDP可靠

1.确认和重传机制

主要还三次握手和四次挥手

2.数据排序

TCP有专门的序列SN字段,可提供re-order

3.流量控制

窗口和计时器的使用,TCP窗口中指明双方能够接发的最大数据数量

4.拥塞控制

TCP的拥塞控制由4个核心算法组成,“慢启动”,“拥塞避免”,“”快速重传,“快速恢复”

什么时候应该使用TCP?

对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

什么时候应该使用UDP?

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP

字节序

大端:数据的高位存放在内存的低地址,低位存放在内存的高地址

小端:数据的高位存放在内存的高地址,低位存放在内存的低地址

不同机器中的大小端是不一样的,有的机器是大端,有的是小端,这个时候通讯就会有问题,

解决:

发送端使用API函数转换成大端,接收端再依据自己是小端还是大端对数据进行转换

比如:htons表示主机字节序转为网络字节序,网络字节序一定是大端

 


http://www.kler.cn/a/502783.html

相关文章:

  • 宝塔面板 申请证书后 仍然提示不安全
  • Ubuntu中双击自动运行shell脚本
  • unity打包sdk热更新笔记
  • 自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器
  • 机器学习基础-机器学习的常用学习方法
  • 基于DFT与IIR-FIR滤波器的音频分析与噪声处理
  • 20道Vue.js常见面试题
  • mysql set age=‘0‘ 和 set age=0的区别?
  • 【21天学习AI底层概念】day11 (kaggle新手入门教程)Your First Machine Learning Model
  • qt设置qwidget背景色无效
  • arcgis中用python脚本批量给多个要素类的相同字段赋值
  • HTTP 入门:认识网络通信基础
  • 【WPS】【WORDWORD】【JavaScript】实现微软WORD自动更正的效果
  • Blazor开发复杂信息管理系统的优势
  • 【Linux】编辑器之神vim使用教程
  • 电力场景红外测温图像均压环下的避雷器识别分割数据集labelme格式2436张1类别
  • 8Hive SQL底层执行原理
  • 如何提高自动化测试覆盖率和效率
  • .NET framework、Core和Standard都是什么?
  • Linux IPC:管道与FIFO汇总整理
  • C#,图论与图算法,输出无向图“欧拉路径”的弗勒里(Fleury Algorithm)算法和源程序
  • css盒子水平垂直居中
  • 下载的stable diffudion 模型如何转换到diffusers可用的格式
  • SQLynx 数据库管理平台 3.6.0 全新发布:全面支持华为数据库和ClickHouse,代码提示更智能!
  • 软考信安21~网络设备安全
  • Android Room 构建问题:There are multiple good constructors