JAVA网络编程简面试题

TCP与UDP的区别与联系

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)都是互联网协议(IP)的传输层协议,但它们在传输数据时的方式有所不同。

区别
  • 可靠性:TCP 是面向连接的协议,提供可靠的数据传输,通过确认和重传机制保证数据的可靠性,而 UDP 是无连接的协议,不提供可靠的数据传输,发送数据时不会等待接收方确认,因此数据传输不可靠。

  • 速度:由于 TCP 提供可靠的数据传输,它会对数据进行多次确认和重传,这会导致传输速度相对较慢。而 UDP 不提供可靠的数据传输,因此它的传输速度相对较快。

  • 面向应用:TCP 提供面向应用的数据流,它保证发送和接收的数据顺序正确,不会丢失或重复。UDP 提供面向数据包的数据传输,发送的数据包可能会丢失、重复或顺序不正确。

  • 连接:TCP 是面向连接的协议,需要先建立连接,才能传输数据,连接建立后,双方可以互相发送数据,数据传输完毕后需要关闭连接。而 UDP 是无连接的协议,不需要先建立连接,直接发送数据包到目标主机即可。

  • 流量控制:TCP 通过滑动窗口机制对数据流量进行控制,根据接收方的处理能力动态地调整发送数据的速率。UDP 不提供流量控制功能。

联系

TCP 和 UDP 都可以用于网络通信,但它们的使用场景不同。一般来说,TCP 适用于要求数据传输可靠性高、有序性好的场景,如文件传输、邮件传输等;而 UDP 适用于数据传输实时性要求高、丢失少关系不大的场景,如实时音视频传输、游戏数据传输等。

此外,TCP 和 UDP 还有一些共同点,例如它们都使用 IP 地址来标识主机,都使用端口号来标识应用程序等。

网络分层模型

TCP/IP 网络分层模型是一种常用的网络协议分层模型,它分为四层,从下到上依次为:

  1. 网络接口层(Network Interface Layer):负责网络硬件与物理介质之间的通信,如网卡驱动、物理地址(MAC 地址)寻址等。

  1. 网络层(Internet Layer):负责在多个网络之间进行路由选择和数据传输,包括 IP 协议、路由器等。

  1. 传输层(Transport Layer):负责提供端到端的通信服务,包括 TCP 协议、UDP 协议等。

  1. 应用层(Application Layer):负责处理特定应用程序的通信服务,包括 HTTP、FTP、SMTP、SSH 等协议。

TCP/IP 模型是一个简化的网络分层模型,与 OSI 模型相比少了会话层和表示层,但是仍然能够满足大多数网络通信的需求。

三次握手和四次挥手

TCP 是一种面向连接的可靠传输协议,其建立连接和断开连接的过程需要使用三次握手和四次挥手。

  1. 三次握手

在 TCP 连接建立时,客户端和服务端需要进行三次握手:

(1)客户端向服务端发送 SYN(同步序列号)包,表示请求建立连接,并随机生成一个初始序列号(Initial Sequence Number,简称 ISN)。

(2)服务端收到客户端的 SYN 包后,回复一个 SYN+ACK 包,表示接收到了客户端的请求,并随机生成一个 ISN 和 ACK 确认号(Acknowledgment Number)。

(3)客户端收到服务端的 SYN+ACK 包后,回复一个 ACK 包,表示已经接收到了服务端的确认,并向服务端发送了一个 ACK 确认号,此时连接建立成功。

  1. 四次挥手

在 TCP 连接断开时,客户端和服务端需要进行四次挥手:

(1)客户端向服务端发送 FIN(结束标志)包,表示请求断开连接。

(2)服务端收到客户端的 FIN 包后,回复一个 ACK 包,表示已经接收到了客户端的请求,但是服务端可能还有数据需要发送。

(3)服务端发送完数据后,向客户端发送 FIN 包,表示服务端也请求断开连接。

(4)客户端收到服务端的 FIN 包后,回复一个 ACK 包,表示已经接收到了服务端的请求,并向服务端发送一个 ACK 确认号,此时连接断开成功。

在 TCP 通信过程中,三次握手和四次挥手保证了连接的可靠性和完整性,避免了数据的丢失和冗余。

UDP和TCP的编写流程

UDP

发送端

1.定义我是发送端

2.准备数据

3.打包

4.发送

5.关闭

接收端

1.定义我是接收端

2.准备包裹,用来接收数据

3.接收数据

4.处理数据

5.关闭

TCP

客户端

1.定义我是客户端 Socket该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通信的端点。

Socket(String host, int port) 参数ip+端口 指的是服务器的IP+端口

2.准备数据

3.获取输出流,向服务器发送数据

4.刷出

5.关闭

服务端

1.定义我是服务器 ServerSocket该类实现服务器套接字。

2.阻塞式监听

3.获取输入流,读取客户端发送的数据

4.处理数据

5.关闭

单向登录
客户端

TCP协议下实现单向登录流程 : 客户端

1.定义我是客户端

2.键盘输入接收用户输入的登录信息 username=zhangsan&password=123

3.获取输出流,向服务器发送数据

4.刷出

  1. 关闭

服务端

TCP协议下实现单向登录流程 : 服务端

1.定义我是服务器

2.阻塞式监听

3.获取输入流,读取客户端发送的数据

4.处理数据

校验用户输入的登录信息是否正确(admin 1234)

5.关闭

双向登录
客户端

TCP协议下实现双向登录流程 : 客户端

1.定义我是客户端

2.键盘输入接收用户输入的登录信息 username=zhangsan&password=123

3.获取输出流,向服务器发送数据

4.刷出

5.获取输入流,读取服务器响应的结果

6.处理结果

7.关闭

服务端

TCP协议下实现双向登录流程 : 服务端

1.定义我是服务器

2.阻塞式监听

3.获取输入流,读取客户端发送的数据

4.处理数据

校验用户输入的登录信息是否正确(admin 1234)

5.获取输出流,将结果响应给客户端

6.刷出

7.关闭

多用户登录流程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值