计网面试题
计算机网络
一、\(MAC\)地址和\(IP\)地址有什么作用?
- IP地址是一种逻辑地址,是互联网上每一个网络和每一台主机分配一个逻辑地址。MAC是物理地址,定义网络设备。
- 使用ARP协议凭借MAC地址进行通信。ARP协议是一种用以解析地址的协议,更具通信方的IP地址就可以反查出对应的MAC地址。
- 设备更容易维修,网卡坏了可以直接换一个IP地址。
二、\(TCP\)三次握手和四次挥手
三次握手
1、客户端向服务器发送SYN标志位(seq = x)。建立连接,等待确认。
2、服务器向客服端发送ACK(ack = x+1)确认收到、SYN(seq = y)标志位。
3、客户端收到SYN+ACK告诉服务器已收到。
四次挥手
1、客户端发送FIN包(FIN = 1)给服务端,告诉它自己的数据已经发送完全,请求中止连接。
2、服务端接受FIN包,回一个ACK包给客户端告诉他已经收到包了,此时还没有断开socket连接,而是等待剩下的数据传输完毕
3、服务端等待数据传输完毕后,向客户端发送FIN包,表明可以断开连接
4、客户端收到后等待一段时间,确保服务端不再有数据发过来,然后断开连接。
为什么连接的时候是三次,关闭的时候是四次?
因为S端收到了C端的SYN请求之后,可以直接发送SYN+ACK报文。但关闭的时候Socket不会直接关闭,所以需要发一个ACK,再等socket关闭在发送一个FIN报文。
为什么不是两次握手?
第一次握手是必须的 ,因为C端需要主动发起请求,但是在这个基础上,C端不一定可以保证S端收到了请求,所以S端需要对C端发起第二次握手。按道理这样已经完成了,但是如果信息丢失了呢?所以需要第三次握手来核实信息是否正确。
TCP 和 UDP
TCP的头部
typedef struct _TCP{
short m_sSourPort; // 源端口号16bit
short m_sDestPort; // 目的端口号16bit
unsigned int m_uiSequNum; // 序列号32bit
unsigned int m_uiAcknowledgeNum; // 确认号32bit
short m_sHeaderLenAndFlag; // 前4位:TCP头长度;中6位:保留;后6位:标志位
short m_sWindowSize; // 窗口大小16bit
short m_sCheckSum; // 检验和16bit
short m_surgentPointer; // 紧急数据偏移量16bit
}