一、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快速,系统开销也少。
网络通讯既是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协议)或者指定特殊字符作为报文分隔符,接收方通过特殊分隔符切分报文区分。
将消息分为消息头和消息体,消息头中包含表示信息的总长度(或者消息体长度)的字段