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 网络分层模型是一种常用的网络协议分层模型,它分为四层,从下到上依次为:
网络接口层(Network Interface Layer):负责网络硬件与物理介质之间的通信,如网卡驱动、物理地址(MAC 地址)寻址等。
网络层(Internet Layer):负责在多个网络之间进行路由选择和数据传输,包括 IP 协议、路由器等。
传输层(Transport Layer):负责提供端到端的通信服务,包括 TCP 协议、UDP 协议等。
应用层(Application Layer):负责处理特定应用程序的通信服务,包括 HTTP、FTP、SMTP、SSH 等协议。
TCP/IP 模型是一个简化的网络分层模型,与 OSI 模型相比少了会话层和表示层,但是仍然能够满足大多数网络通信的需求。
三次握手和四次挥手
TCP 是一种面向连接的可靠传输协议,其建立连接和断开连接的过程需要使用三次握手和四次挥手。
三次握手
在 TCP 连接建立时,客户端和服务端需要进行三次握手:
(1)客户端向服务端发送 SYN(同步序列号)包,表示请求建立连接,并随机生成一个初始序列号(Initial Sequence Number,简称 ISN)。
(2)服务端收到客户端的 SYN 包后,回复一个 SYN+ACK 包,表示接收到了客户端的请求,并随机生成一个 ISN 和 ACK 确认号(Acknowledgment Number)。
(3)客户端收到服务端的 SYN+ACK 包后,回复一个 ACK 包,表示已经接收到了服务端的确认,并向服务端发送了一个 ACK 确认号,此时连接建立成功。
四次挥手
在 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.刷出
关闭
服务端
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.关闭