C语言面试笔试整理笔记(四)
在嵌入式学习中,网络协议和进程非常重要。首先说一下ISO-7层模型和TCP/IP 5层模型:
- ISO-7层有:物理层->数据链路层->网络层->传输层->会话层->表示层->应用层。
- TCP/IP 有:物理层,数据链路层,网络层,传输层,应用层。
FTP,HTTP是在应用层;TCP/UDP工作在网络层;
交换机工作在数据链路层;路由器工作在网络层;集线器(hub)工作在物理层;
- socket接口是TCP/IP网络的API,socket是一种文件描述符,有类似打开文件的socket();
(1)socket的建立:返回的socket描述符,是一个指向内部数据结构的指针,建立一个socket意味着给一个socket数据结构分配空间,两个网络程序之间的一个网络连接需要包含5钟信息:通信协议,本机地址,本机端口,远端地址,远端端口。
(2)socket的配置:TCP的客户端通过connect函数在socket数据结构中保存以上信息。
TCP的服务端,UDP中的服务器和客户端都是通过bind函数来保存信息。
网络中的高字节优先,对于低字节优先的机器需要转换:htonl, htons, ntohl, ntohs。
(3)连接建立:TCP是基于连接的通信协议,而UDP不需要建立连接。
listen函数使socket处于被监听的模式,并为该socket建立队列,供程序处理,进入连接的请求在队列中等待accept他们
(4)数据传输:send和recve用于TCP数据传输。
sendto和recvefrom用于UDP数据传输。因为没有连接,所以每次收发都需要指明地址。
- 阻塞和非阻塞:设置socket为非阻塞模式,可以轮询诺干个socket,但此轮询会占用大量CPU时间,而select则可解决此问题,他能将进程本身挂起,而同时使监听所要求的一组文件描述符的任何活动。
- 进程和线程的区别:
(1)进程是系统运行中的一个应用程序,是系统资源分配的基本单元,在内存中有完备的数据空间和代码空间,一个进程所拥有的数据和变量都属于他自己。
(2)线程是进程中相对独立的可执行单位,他与父进程的其他线程共享代码空间和全局变量,但有独立的堆栈。
(3)一个进程至少有一个线程,也可以有多个线程;一个线程必须要有一个父进程,多个进程和线程都可以并发执行。