-
OSI 7层模型 TCP/IP 4、5层模型:记清楚名字,以及每一层的功能
/* 应用层 应用层 应用层 提供各种协议的网络应用接口 传输层 传输层 表示层 数据表示,压缩与加密 网络层 网络层 会话层 主机之间会话管理 网络接口层 数据链路层 传输层 端与端之间的连接 物理层 网络层 寻址与路由选择 数据链路层 相邻节点的可靠性传输 物理层 二进制比特流传输
2.TCP和UDP异同点
/* TCP: 1)提供面向连接的,可靠的数据传输服务; 2)数据无误,数据无丢失,数据无失序,数据无重复到达的通信。 3)传输效率低,耗费资源多。 4)数据的发送和接收不同步:(不存在数据边界) 为了提高效率,会将多个比较小,而且发送时间间隔短的包沾成一个包去发发送,这个现象称之为粘包现象; 每一个数据包都会有编号(序列号),每一个数据包都会有对应的应答(应答包) UDP: 1)无连接的,不可靠的数据传输服务; 2)数据有可能在传输过程中丢失,或者出现数据重复。 3)传输效率高; 4)限制每次传输的数据大小:1500byte,超出部分直接舍弃; 5)数据的发送和接收是同步的:存在数据边界;
3.一些常见的协议:MAC IP MTU MSS ARP RARP ICMP IGMP
/* MAC:48bit全球唯一,网络设备的身份标识(cmd ---> ipconfig/all),有厂商出厂后确定。 由电气电子工程协会IEEE定义的。 MSS:Maximum Segment Size 最大报文长度 IP:ip协议根据数据包的目的ip地址来决定如何投递数据包。如果数据包不能直接投递给目标主机, 那么ip协议就为他寻找下一个合适的下一跳路由器。 MTU:Maximum Transmit Unit 最大传输单元物理接口 (数据链路层)提供给上层(网络层(IP层))最大一次传输数据的大小。 规定了数据链路层所能传送最大数据长度 1500字节 ARP:ARP(Address Resolution Protocol):通过ip地址获取其对应的mac地址。 RARP(Reverse Address Resolution Protocol):通过mac地址获取其对应的ip地址。 ICMP协议(Internet Control Management Protocol):英特网控制管理协议,ping检测网络就是用这个协议用于在IP主机、路由器之间传递控制消息。 IGMP协议(Internet Group Management Protocol):英特网分组管理协议,组播,广播。
4.IP地址分类,IP地址划分
答:
分类:
IPv4: 采用4个字节的无符号整数来存储IP地址,[0, 2^32-1] ==>42亿多个
IPv6:采用16个字节的无符号整数来存储IP地址 , 2^128。IPv4与IPv6不兼容
/* 地址划分: A类地址 0.0.0.0~127.255.255.255 2^7(网络号)+ 2^24(主机号) **大型网络** B类地址 128.0.0.0~191.255.255.255 2^14 + 2^16 名地址网管中心 C类地址 192.0.0.0~223.255.255.255 2^21 + 2^8 校园网或企业网、家庭网 D类地址 224.0.0.0~239.255.255.255 组播地址 E类地址 240.0.0.0~255.255.255.255 实验室保留
5.特殊的IP:网络地址,广播地址分别为什么
/* 网络地址:有效的网络号+全是0的主机号---》代表一整个网络 192.168.31.0代表192.168.31这个网络 广播地址:有效的网络号+全是1的主机号---》代表向当前网络所有的主机发送消息。 192.168.31.255
6.子网掩码:
/* 1)给定一个IP要知道默认子网掩码 IP:192.168.8.213 子网掩码:255.255.255.0 2)给定一个IP,告诉你要划分几个子网网段,计算子网掩码,计算每个子网网段中主机号个数,可用(可分配)主机号个数 3)给定IP,告诉你要划分至少要几个子网网段,以及每个子网网段中可用主机号的个数为多少。计算所有可用子网掩码 4)给定IP,给定子网掩码,计算网段个数,主机个数。。。。。
7.字节序的概念,如何用共用体的方式验证计算机是大端还是小端。 答:字节序是指不同类型的CPU主机,内存存储 多字节整数 序列的方式;
8.跨主机需要注意的内容。 答:在跨主机传输过程中,需要使用统一的字节序,即网络字节序,避免兼容性问题。
10.TCP中的send能否修改成sendto write。recv能否修改成recvfrom read.
/* recv(sockfd, buf, len, flags); 相当于 recvfrom(sockfd, buf, len, flags, NULL,NULL), 所以,TCP中的recv能否替换成recvfrom。 send(sockfd, buf, len, flags); 相当于 sendto(sockfd, buf, len, flags, NULL, 0); 所以,TCP中的send函数可以用sendto替换
11.UDP中的sendto能否修改成send write。recvfrom 能否修改成recv read.
答:可以,当UDP采用connect的方式收发报文后,就可以调用 send recv write read
12.UDP中能否调用connect函数,UDP中的connect与TCP中的有什么区别;
/* UDP中可以调用connect函数,但是不会产生连接。 TCP中的connect函数会造成三次握手,将client和server连接。 UDP中的connect不会产生连接,仅仅是将对端的IP和端口记录到内核套接字中,此时**UDP只能与记录的对端进行通信**。 TCP中的connect只能被调用一次 udp可以调用多次connect,刷新内核中对端的IP和端口,如果想要清空内核中对端的地址信息, 则将地址信息结构体中的sin_family成员填充成 AF_UNSPEC
13.广播,组播模型。广播、组播IP
广播服务器模型: 广播客户端模型: //1.创建套接字 1.创建套接字 socket(); socket(); //2.填充接收端的地址信息结构体 2.设置网络属性:设置允许广播,默认是不允许广播的 struct sockaddr_in sin; setsockopt(); //3.必须绑定服务器 3.非必须绑定 bind(); bind(); //4.接收数据 4.发送数据 recvform(); sendto(); //5.关闭套接字 5.关闭套接字 close(socket); close(socket); 组播服务器模型: 组播客户都模型: //1.创建套接字 1.创建套接字 socket(); socket(); //2.加入多播组 2.非必须绑定 setsockopt(); bind; //3.填充接收端的IP和端口 3.填写接收端的地址信息结构体 struct sockaddr_in sin; struct sockaddr_in sin; //4.必须绑定 4.发送数据 bind; sendto(); //5.接收数据 5.关闭套接字 recvfrom(); close(socket); //6.关闭套接字 close(socket); 广播IP:默认是:有效的网络号+全是1的主机号---》代表向当前网络所有的主机发送消息。 例如本网段下的广播IP(192.168.31.255), 0.0.0.0 0.0.0.0:将本机所有可用IP绑定到套接字上:本机IP192.168.31.61,127.0.0.1(本地环回) 组播IP:224.0.0.0~239.255.255.255
14.多进程并发服务器模型,多线程并发服务器模型
//TCP多进程并发服务器: TCP多线程并发服务器: //循环回收子进程 创建套接字 void callBack(int sig) socket(); { //必须绑定 while(waitpid(-1,NULL,WNOHANG)>0); bind } //设置监听状态 //捕捉信号 listen(); signal(17(SIGCHLD),callBack); while(1) //创建套接字 { socket(); newfd=accpet(); //必须绑定 pthread_create(&tid,NULL,callBack,&msg); bind(); //pthread_detach(tid) //设置监听状态 } listen(); void callBack(void arg) while(1) { { pthread_detach(pthread_self()); newfd=accept(); recv(); //创建一个分支进程 send(); pid=fork(); close(newfd); if(pid>0) pthread_exit(); //主进程 } close(newfd); //分支进程 else if(0==pid) { close(sfd); //接收数据 recv(); //发送数据 send(); close(newfd); //退出分支进程 exit(0); }else { perror("fork"); return -1; } } close(sfd);
15.IO多路复用分类,简述select,poll流程
/* 单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 分类: select() poll() eopll() 流程: IO多路复用在Linux下包括了三种,select、poll、epoll,抽象来看,他们功能是类似的,但具体细节各有不同:首先都会对一组文件描述符进行相关事件的注册,然后阻塞等待某些事件的发生或等待超时。更多细节详见下面的 "具体怎么用"。IO多路复用都可以关注多个文件描述符,但对于这三种机制而言,不同数量级文件描述符对性能的影响是不同的
16.三次握手、四次挥手。 1)简述三次握手,四次挥手流程 2)简述TCP建立连接,断开连接的过程。 3)简述如何用UDP的模型,实现TCP式传输:UDP和TCP在传输时候的区别:1.三次握手 2.应答 3.四次挥手。
/* 三次握手产生的。发起端肯定是客户端 第一次握手:客户端发送SYN包(SYN=1, seq = x)给服务器,并进入SYN_SEND状态,等待服务器返回 确认包。 第二次握手:服务器收到SYN包,确认客户端的SYN,发送ACK包(ACK=1, ack=x+1),同时发送一个 SYN包(SYN=1,seq=y),并进入SYN_RECV状态 第三次握手:客户端收到服务器的SYN以及ACK包,向服务器发送ACK包(ACK=1, ack = y+1),此时三 次握手的包发送完毕,客户端和服务器进入ESTABLISHED状态。完成三次握手; 四次握手 断开连接,可能是服务器发起的,也可能是客户端发起的; 第一次挥手,主动关闭方发送一个FIN包(FIN=1, seq = u)给被动方,进入FIN_WAIT_1状态; 第二次挥手:被动方接收到FIN包,给主动方发送一个ACK包(ACK=1, ack=u+1);并进入 CLOKSE_WAIT状态。主动方接受到ACK包后,进入FIN_WAIT_2状态。如果有数据没有发送完毕,则继 续发送,直到发送完毕为止; 第三次挥手:被动方发送一个FIN包(FIN=1, seq=w),进入LAST_ACK状态. 第四次挥手:主动关闭方收到FIN包,回复一个ACK包(ACK=1, ack=w+1)。被动关闭方收到主动关闭 方的ACK后关闭连接。
17.udp是无连接的,如何能够让本地知道对端掉线。 心跳包机制,每隔一定时间发送一个心跳包给服务器端,若服务器长时间没有收到心跳包,则服务器可以认为客户端掉线; 如果客户端长时间没有收到服务器的心跳包应答,则客户端可以认为服务器掉线。