TCP UDP面试题


1.TCP/IP四层模型

# 1.网络接口层(物理层,数据链路层)
# 2.网络层
# 3.传输层
# 4.应用层(会话层,表示层,应用层)

2.TCP与UDP区别

# TCP:面向连接,可靠的,速度慢,效率低
# UDP:无连接,不可靠,速度快,效率低

3.TCP/UDP应用

# TCP
对通信质量有要求的,例如HTTP,HTTPS协议 # UDP
不需要一对一沟通,建立连接的,可以做到一对多,如广播,直播
需要处理速度快的,能容忍丢包的

4.三次握手四次挥手

# 三次握手
#
1.客户端发送一个带SYN标志的TCP报文到服务器端,并进入SYN_SEND状态,等待服务端确认 # 2.服务端收到客户端的报文并返回一个同时带ACK标志和SYN报纸的报文,进入SYN_RECV状态。表示确认刚才客户端的报文,同时询问客户端是否准备好通讯 # 3.客户端再次回应服务端一个ACK报文,双方进入ESTABILISHED状态
# 四次挥手
# 1.TCP客户端发送一个FIN,用来关闭客户端到服务端的数据传送
# 2.服务端收到这个FIN,它发挥一个ACK,确认序号为收到的序号加一
# 3.服务端关闭客户端的连接,发送一个FIN给客户端
# 4.客户端发回ACK报文确认,并将确认序号设置为收到序号加一

5.为什么连接的时候是三次握手,关闭的时候是四次挥手?

# 因为服务端收到客户端的SYN连接请求报文后,可以把ACK和SYN(ACK起应答作用,SYN起同步作用)放在一个报文里发送。但关闭连接时,当收到对方的FIN报文时,它仅仅表示对方没有数据发送给你了,但为你所有的数据都全部发送给对方了,所以你未必会马上关闭SOCKET,也就是说你可能还需要发送一下数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以这里的ACK和FIN多数情况下都是分开发送的。

6.为什么不能TIME_WAIT状态还需要等待2MSL后才能返回到CLOSED状态?

# 虽然4个报文都发送完毕,按理可以直接进入CLOSED状态。但是,假设网络是不可靠的,最后一个ACK可能会丢失,所以TIME_WAIT状态就是用来重发丢失的ACK。此时处于LAST_ACK的SOCKET会因超时未收到ACK,而重发FIN报文,直接接收到ACK才结束TCP连接。
# 等待2MSL:2MSL是一个发送和一个回复所需的最大时间,Client进入TIME_WAIT状态会设置一个计时器,等待2MSL,如果直到2MSL,Client没有再收到FIN,那么Client推断ACK已被成功接收,关闭连接。

7.为什么不能用两次握手?

# 客户端和服务端通信,假定客户端给服务端发送一个连接请求,服务端收到后返回ack应答,按照两次握手,服务端认为连接已经成功建立,并开始发送数据.假设网络是不可靠的,客户端没有收到服务端的ack应答,客户端认为还未建立连接,将忽略服务端发来的所有数据,只等待服务端的ack应答,造成死锁

8.如果已经建立了连接,但是客户端发生故障?

# TCP设有一个保活计时器,如果一端长时间未收到任何数据,则会每隔一段时间发送探测报文,若一连发送10个报文仍没反应,则认为对方发生故障,关闭连接

 9.为什么说TCP是可靠的?

# 首先TCP是面向连接的,客户端发送一段数据都需要服务端确认
# 1.序列号
    TCP在传输过程中,对每一个字节都进行了编号,确保数据按序到达
# 2.超时重传
    当客户端给服务端发送数据,由于网络等原因,数据包没有到达服务端,或者服务端的响应数据包没有在超时重传时间内到达客户端,会重新发送数据
# 3.流量控制
    TCP窗口会指明双方能够发送和接收的最大数据量
# 4.拥塞控制
    慢启动
    拥塞避免
    拥塞解决
    快速恢复

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM