Java中的socket编程

Q:什么是socket?

A:它是应用层与TCP/IP协议族通信的中间抽象层,它是一组接口,应用层通过它实现数据的收发.一般这种抽象层是由操作系统或者JVM虚拟机自己实现.使用socket可以简单的实现应用程序在网络上的通信.一个机器向socket写入信息,另外一个机器则可以读到.TCP/IP协议族中分两种socket类型,分别是TCP协议和UDP协议.如图:

Java中的socket编程

socket抽象层在传输层与应用层之间,增加这一层是很有必要跟有用的,它类似于设计模式中的门面模式,用户没必要知道和处理复杂的TCP/IP协议族业务逻辑的细节,这时socket就展现出它的优势了,它把这些复杂处理都隐藏在socket接口下面,它帮助用户解析组织TCP/IP协议族报文数据,以符合TCP/IP协议族,这样用户只要简单调用接口即可实现数据的通信操作.

Q;什么是三次握手和四次握手

A:三次握手指的是建立TCP连接,四次握手指的是终止TCP连接.下面我们详细说说:

TCP建立连接需要进行三组交换,流程如下:

1.客户端发送服务端一个请求SYN J;

2.服务端向客户端响应一个SYN K,并对SYN J 进行确认ACK J+1;

3.客户端再向服务端发出响应ACK K+1.

Java中的socket编程

总结:客户端调用connect函数,触发请求,向服务端发送SYN J 包,connect进入阻塞;服务端监听到客户端SYN J请求,调用accept函数并向客户端SYN K, ACK J+1并进入阻塞状态;客户端接收到返回后确认后connect返回,并对SYN K进行确认;服务端接收到ACK K+1,accept返回,三次握手结束,连接结束.

TCP终止连接需要进行4个步骤:

Java中的socket编程

进程调用close主动关闭连接,TCP主动发送FIN M;服务器接收到FIN M,执行被动关闭,并对其进行确认,返回ACK M+1;服务器主动调用close关闭连接,TCP主动发送FIN N;客户端接收到消息会返回一个确认信息ACK N+1.

Q:简单介绍一下TCP协议和UDP协议

A:

TCP优缺点:

优点:可靠稳定,因为建立连接的时候会经历三次握手
缺点:效率低,速度慢,已被攻击,因为三次握手的会消耗大量资源,同时会更容易遭受DOS,DDOS,CC等攻击


UDP优缺点:

优点:无状态传输,没有那么多的确认机制,传入速度快,不容易遭受攻击

缺点:没有可靠的机制,网络出现波动,容易丢包

想看具体的代码实现,推荐大家看这篇博客:

https://blog.csdn.net/yjp19871013/article/details/53537398