【转载】TCP、UDP和Socket

一、TCP与UDP的区别

1、TCP面向连接,如打电话需要拨号建立连接,UDP是无连接,即发送数据之前不需要建立连接

2、TCP提供可靠服务,在传输数据时,无差错,不丢失,不重复,按序到达;UDP尽最大的努力交付,不保证可靠交付

3、TCP面向字节流,可将TCP数据看出一连串无结构的字节流;UDP面向报文,UDP没有拥塞控制,网络上出现拥塞时不会是主机发送速率降低(对实时应用有用,如IP电话,实时视频)

4、每条TCP连接只能是点到点;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP首部开销小,只有8字节

6、TCP的逻辑通信信道是全双工可靠信道,UDP是不可靠信道

7、UDP传送数据较TCP快速,系统开销也少。

Java使用TCP和UDP传输文件的源代码

两者的程序设计框架

socket

参考:1、Java Socket编程基础及深入讲解

网络通讯既是Sokcet间的通讯,数据在两个Sokcet间通过IO传输。

SYN表示建立连接,

FIN表示关闭连接,

ACK表示响应,

PSH表示有 DATA数据传输,

RST表示连接重置。

二、Socket的三次握手?

1、客户端向服务器发送syn包(同步序列编号(Synchronize Sequence Numbers))请求建立连接,此时连接进入connect阻塞

2、服务器监听请求,接收客户端syn包并确认响应(ack=j+1)【ACK(Acknowledgement)即是确认字符】,同时向客户端发送syn包(syn=k)即(syn+ack包);服务器进入连接成功状态

3、客户端接收服务端syn+ack包,向服务端发送确认包ack(ack=k+1),发送完毕,建立连接

三、Socket的四次挥手,释放连接?

1、某TCP客户端应用调用close主动关闭连接,此时TCP发送FIN M关闭连接,

2、服务端接收该数据,被动关闭,并发回一个响应ack(ack=M+1)给客户端

3、服务端主动关闭客户端连接,并发送FIN N给客户端

4、客户端响应ack报文确认,并将确认设置为收到序号加N+1.

转载来源简书

四.TCP粘包、拆包问题解决方案

消息定长,报文大小固定长度,不够空格补全,发送和接收方遵循相同的约定,这样即使粘包了通过接收方编程实现获取定长报文也能区分。

包尾添加特殊分隔符,例如每条报文结束都添加回车换行符(例如FTP协议)或者指定特殊字符作为报文分隔符,接收方通过特殊分隔符切分报文区分。

将消息分为消息头和消息体,消息头中包含表示信息的总长度(或者消息体长度)的字段

展开阅读全文

没有更多推荐了,返回首页