网络编程常见面试题

1.简述 OSI 七层协议。

应用层、表示层、会话层、运输层、网络层、数据链路层、物理层

2.简述 TCP/IP 四层协议。

应用层、运输层、网际层、网络接口层

在这里插入图片描述
3.TCP 和 UDP 的区别是什么?

1)TCP和UDP都是传输层协议,TCP是面向连接的传输(通过三次握手保证有连接),UDP是无连接的传输。 
(2)TCP是面向字节流的传输,他可以将信息分割成组,到了接收端将其重组,UDP是面向数据报的传输,没有分组开销。 
(3)TCP因为有链接所以信息传输稳定可靠,无失序,无差错,无丢失,无重复,UDP传输不可靠,可能会发生失序,差错,丢失,重复等现象。 
(4)TCP传输速度慢,UDP传输速度快。 
(5)TCP提供拥塞控制和流量控制机制,UDP不提供拥塞控制和流量控制机制。

4.TCP 连接建立的时候 3 次握手的具体过程,以及其中的每一步是为
什么?
在这里插入图片描述

第一次:客户端发送请求报文SYN,seq序列号为x
第二次:服务器收到客户端请求连接的报文,返回两个报文ACK,SYN,ACK报文确认收到请求,SYN表示同意连接。
第三次:客户端向服务器返回确认报文ACK,建立连接

5.TCP 断开连接的具体过程,其中每一步是为什么那么做?
在这里插入图片描述

第一次:客户端发起断开连接的请求报文FIN
第二次:服务器返回确认帧ACK,表示已经收到请求,但是服务器可能还有数据美发送完,所以不会立刻断开连接。
第三次:服务器发送完全部数据后,发送FIN报文,表示数据已经全部发送完,可以断开连接进入LAST-ACK状态,等待收到客户端发送最后一个ACK报文后关闭。
第四次:客户端收到服务器发来的FIN报文,意味着已经接受全部数据,返回ACK报文并等待2MSL时间后,关闭。

6.TCP 的十一种状态?

三次握手:
CLOSED:初始状态
LISTEN:监听状态,可以接受连接
SYN-SEND:客户端发送连接请求SYN后进入此状态,等待服务端的ACK
SYN-RCVD:服务端收到请求连接的SYN包后并发送ACK,进入此状态,很短暂
ESTAB-LISHED:建立连接,两个进程可以互相通信。
四次挥手:
CLOSE-WAIT:对方主动发来中断请求或者网络异常,我方进入此状态。
FIN-WAIT-1:当socket在ESTAB-LISHED状态主动关闭连接(发送FIN包)后,进入FIN-WAIT-1状态,
FIN-WAIT-2:半连接状态,一方要求关闭连接,一方还有未发送完的数据,需要等待对方发送完数据关闭连接请求的FIN包。
TIME-WAIT:收到FIN包,并发送确认ACK包后进入此状态,等待2MSL后关闭连接。MSL(最大分段生存期)指明TCP报文在Internet上最长生存时间,每个具体的TCP实现都必须选择一个确定的MSL值.RFC 1122建议是2分钟,但BSD传统实现采用了30秒.TIME_WAIT 状态最大保持时间是2 * MSL,也就是1-4分钟。
LAST-ACK:收到FIN包并发送ACK后,传输完全部数据并发送FIN包后进入次状态,等待对方的最后一次ACK确认。到收到ACK后,进入CLOSED状态
CLOSED:

7.什么是 socket?简述基于 tcp 协议的套接字通信流程。

套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。

通信流程
在这里插入图片描述
8.简述基于 udp 协议的套接字通信流程
在这里插入图片描述
9. TCP 为什么不是两次握手?而是三次握手?

第一次握手后,服务端可以确认客户端发送和接受功能正常,但客户端什么都不能确认
第二次握手后,客户端可以确认自己和服务端收发功能正常,连接建立
第三次握手后,服务端可以确认自己的收发功能正常,连接建立。

如果变为两次握手,会出现问题:客户端发送的包在链路中传输超时,成为无效包,等服务端收到后,服务端依然建立连接,发送确认包。但客户端超时后会重发请求包,这样会浪费资源,可能还会产生各种问题。

10.为何基于 tcp 协议的通信比基于 udp 协议的通信更可靠?

udp发送数据包以后就视为任务完成,不会再管这个数据包了。
而tcp协议的流量控制(停止等待,回退N步,滑动窗口),拥塞控制(慢开始,快重传,快恢复)保证了每个字节的可靠性。

11.网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?

多进程:适用于客户端数量不大时。
多线程:实现异步,客户端数量较大时,通常使用协程。

12.大规模连接上来,并发模型怎么设计?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值