TCP / UDP协议

TCP / UDP协议

低三层:物理层、数据链路层、网络层
物理层:是原始的数据比特流能在物理介质上传输
数据链路层:通过校验、确认和反馈重发等手段,形成稳定的数据链路
网络层:进行路由选择和流量控制(IP协议)
【以上三层是为了屏蔽底层的复杂度,作为java开发人员只需了解即可】

传输层:提供可靠的端口到端口的数据传输服务(TCP/UDP)
【程序的开发主要在传输层】

高三层:会话层、表示层、应用层
会话层:负责建立、管理和终止进程之间的会话和数据交换
表示层:负责数据格式转换、数据加密与解密、压缩与解压缩等
应用层:为用户的应用进程提供网络服务
【高三层的应用范围广泛,感兴趣的可以去看下网络协议相关书籍】

一、TCP

1、传输控制协议TCP
传输控制协议(TCP)是Internet一个重要的传输层协议。TCP提供面向连接、可靠、有序、字节流传输服务。应用程序在使用TCP之前,必须先建立TCP连接。
在这里插入图片描述
2、TCP握手机制
三次握手过程:
第一次:客户端给服务器发送一个SYN报文,并标明自己的客户端初始化序列号ISN,此时客户端属于SYN_SEND(发送)状态。
第二次:服务器接收到客户端的报文后,会以自己的SYN报文做应答,并且也是指定自己的ISN,同时把客户端的ISN+1作为自己的ACK值,此时服务器处于SYN_REVDD(半链接)状态
第三次:客户端接收到了服务器的SYN报文后,把服务器的ISN+1作为ACK值发送给服务器,表示已经接收,此时客户端处于establised(已确定) 状态

三次握手的作用:
1、确定客户端与服务器的接收、发送数据的能力
2、指定自己的初始化序列号,为传输做准备。

问题1:ISN是固定的吗?
三次握手的一个重要功能是客户端和服务端交换ISN(Initial Sequence Number), 以便让对方知道接下来接收数据的时候如何按序列号组装数据。
如果ISN是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。

问题2:什么是半连接状态?
就是在服务器接收到客户端的报文后,服务器处于半连接状态,此时双方并没有完全建立链接,所以把这种半连接的请求放到一个半连接队列池。已经经过3次握手的请求就会进入
全连接队列池。如果服务器没有接收到客户端的接收确认,那么服务器就进行首次重传,隔一段时间后再次重传(重传时间是2的指数增长),如果重传次数达到系统规定的最大次数
,就删除半连接队列池中的请求。

问题3:三次握手过程中可以携带数据吗?
第一次和第二次不行,第三次可以,因为如果第一次如果可以携带数据,那么攻击者就可以在第一次大量的发送数据,服务器就会为接收处理这些数据消耗时间,会造成恶意攻击。

问题4:SYN攻击是什么?
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的,所以服务器容易受到SYN洪泛攻击。SYN攻击就是Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。
检测 SYN 攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。在 Linux/Unix 上可以使用系统自带的 netstats 命令来检测 SYN 攻击。—》netstat -n -p TCP | grep SYN_RECV

常见的防御 SYN 攻击的方法有如下几种:
a.缩短超时(SYN Timeout)时间
b.增加最大半连接数
c.过滤网关防护
d.SYN cookies技术
在这里插入图片描述

四次挥手机制:
1、第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于CLOSED_WAIT1状态。
2、第二次握手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序列号值 + 1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT2状态。
3、第三次挥手:如果服务端也想断开连接了,和客户端的第一次挥手一样,发给 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态。
4、第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答,且把服务端的序列号值 + 1 作为自己 ACK 报文的序列号值,此时客户端处于 TIME_WAIT 状态。
需要过一阵子以确保服务端收到自己的 ACK 报文之后才会进入 CLOSED 状态

在这里插入图片描述

二、UDP

1、用户数据报协议UDP是Internet传输层协议,提供无连接、不可靠、数据报尽力传输服务。
在这里插入图片描述
相对TCP要简单的多,在开发的时候需要注意以下几点:
a.应用进程更容易控制发送什么数据及何时发送
b.无需建立连接
c.无连接状态
d.首部开销小

TCP和UDP的比较:
在这里插入图片描述

UDP的应用场景:
对数据的可靠性不高,例如
1、进行音视频聊天
2、互联网的日志上报,路边的路灯,需要每隔1分钟进行一次日志上报
3、共享单车的GPS定位,每隔一段时间锁定

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值