下面是网络通讯的简单流程图
1 TCP传输控制协议:
面向连接,可靠的协议 需要建立连接,所以效率低 通过三次握手建立连接 Socket:客户端socket ServerSocket:服务器socket TCP是面向连接的、可靠的传输协议,如果在没有服务端的情况下,客户端发送数据,会抛错,这种情况是不允许的下面介绍一些如何通过三次握手建立连接:
a.请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN,在这个例子中为1415531521)。这个SYN段为报文段1。 b.服务器发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号 c.客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3) 这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake) SYN是同步序号,用来发起一个连接
然后通过四次挥手断开连接
a.现在的网络通信都是基于socket实现的,当客户端将自己的socket进行关闭时,内核协议栈会向服务器自动发送一个FIN置位的包,请求断开连接。我们称首先发起断开请求的一方称为主动断开方。 b.服务器端收到请客端的FIN断开请求后,内核协议栈会立即发送一个ACK包作为应答,表示已经收到客户端的请求 c.服务器运行一段时间后,关闭了自己的socket。这个时候内核协议栈会向客户端发送一个FIN置位的包,请求断开连接 d.客户端收到服务端发来的FIN断开请求后,会发送一个ACK做出应答,表示已经收到服务端的请求 FIN表示发送端完成发送任务(即断开连接) ACK表示确认序号有效 2 UDP数据报文包协议: 无连接,不可靠的协议 不需要建立连接,所以效率高 每个数据报大小限制在64K内 DatagramSocket:表示用来发送和接收数据报包的套接字 DatagramPacket:此类表示数据包 数据包分为发送数据包和接收数据包 凡是发送数据包,参数都是带着地址的 UDP是无连接不可靠的协议,所以在没有接收端的情况下,发送端可以发送数据,且不会抛错,只不过是数据发丢了