TCP和UDP的区别

优秀博文:

https://www.cnblogs.com/yjf512/p/5909031.html

区别:

     TCP:面向连接传输数据可靠,基于字节流,传输数据无大小限制,但是需要连接,所以会出现差错;

     UDP:不面向连接,不管对方状态就直接传送,只需要封装四元组(发送ip端口和接受ip端口),即时通信,并且不能保证数据安全,传输速度快,传输数据大小限制在64kb以下。

使用场景:(基于需求

TCP:支持TCP协议的有HTTP协议,FTP协议,适用于传输数据量大并且安全性高的应用,但是效率偏低,应用广泛;
UDP:支持NFS(网络文件系统,net file system),DNS(主域名系统,Domain name system),适用于传输数据可靠性

不强,要求速率更快的应用。例如:短信,qq聊天,视频直播等,一点卡顿也无所谓的。

Moreover
TCP可用于网络数据库,分布式高精度计算系统的数据传输;UDP可用于内部局域网(丢包错误率较低)

补充:
TCP资料补充:
在TCP层,有个FLAGS字段,SYN(synchronous建立连接), FIN(finish结束), ACK(acknowledgement响应确认), PSH(push传送), RST(reset重置), URG(urgent紧急),SN(seqence num顺序号码)acknowledgement num(确认码)
TCP三次握手和四次分手

TCP三次握手:
       第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据
TCP四次挥手
第一次挥手主机1向主机2,发送FIN报文段,表示关闭数据传送,并主机1进入FIN_WAIT_1状态,表示没有数据要传输了 
第二次挥手主机2收到FIN报文段后进入CLOSE_WAIT状态(被动关闭),然后发送ACK确认,表示同意你关闭请求了,主机到主机的数据链路关闭,主机进入FIN_WAIT_2状态 
第三次挥手:主机2等待主机1发送完数据,发送FIN到主机1请求关闭,主机2进入LAST_ACK状态 
 第四次挥手:主机1收到主机2发送的FIN后,回复ACK确认到主机2,主机1进入TIME_WAIT状态。主机2收到主机1的ACK后就关闭连接了,状态为CLOSED。主机1等待2MSL,仍然没有收到主机2的回复,说明主机2已经正常关闭了,主机1关闭连接。

总结如下:发送方向接收方发送FIN字段表示结束连接,接收方接受到并发送ACK字段确认,再发送FIN字段给发送方,表示接收方也要结束连接,发送方接受并返回一个ACK字段给接收方,完全中断连接,其中,接收方发送ACK字段和发送FIN字段,在linux平台上,已经合二为一。

攻击:
  • 关于建连接时SYN超时。试想一下,如果server端接到了clien发的SYN后回了SYN-ACK后client掉线了,server端没有收到client回来的ACK,那么,这个连接处于一个中间状态,即没成功,也没失败。于是,server端如果在一定时间内没有收到的TCP会重发SYN-ACK。在Linux下,默认重试次数为5次,重试的间隔时间从1s开始每次都翻售,5次的重试时间间隔为1s, 2s, 4s, 8s, 16s,总共31s,第5次发出后还要等32s都知道第5次也超时了,所以,总共需要 1s + 2s + 4s+ 8s+ 16s + 32s = 2^6 -1 = 63s,TCP才会把断开这个连接。
  • 关于SYN Flood攻击。一些恶意的人就为此制造了SYN Flood攻击——给服务器发了一个SYN后,就下线了,于是服务器需要默认等63s才会断开连接,这样,攻击者就可以把服务器的syn连接的队列耗尽,让正常的连接请求不能处理。于是,Linux下给了一个叫tcp_syncookies的参数来应对这个事——当SYN队列满了后,TCP会通过源地址端口、目标地址端口和时间戳打造出一个特别的Sequence Number发回去(又叫cookie),如果是攻击者则不会有响应,如果是正常连接,则会把这个 SYN Cookie发回来,然后服务端可以通过cookie建连接(即使你不在SYN队列中)。请注意,请先千万别用tcp_syncookies来处理正常的大负载的连接的情况。因为,synccookies是妥协版的TCP协议,并不严谨。对于正常的请求,你应该调整三个TCP参数可供你选择,第一个是:tcp_synack_retries 可以用他来减少重试次数;第二个是:tcp_max_syn_backlog,可以增大SYN连接数;第三个是:tcp_abort_on_overflow 处理不过来干脆就直接拒绝连接了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值