关于无连接服务与面向连接服务

辨析

面向连接分为三个阶段,第一是建立连接,在此阶段,发出一个建立连接的请求。只有在连接成功建立之后,才能开始数据传输,这是第二阶段。接着,当数据传输完毕,必须释放连接。

而面向无连接没有这么多阶段,它直接进行数据传输。

链路层为网络层提供服务:无确认无连接服务(通信质量好的有线传输链路),有确认无连接服务,有确认面向连接服务(通信质量差的无线传输链路)。

扩展:链路层和传输层差异

传输协议在有些方面类似于数据链路协议。这两种协议都要处理差错控制,可靠传输,流量控制以及其他问题。但是由于这两种协议的运行环境不同,他们也存在一些区别。

数据链路层是解决点到点的传输问题(线路中具体的某一段),传输层是解决端到端的传输问题(遥远的两方)。比如传输层还需要注意异构网络互联的问题,这是凌驾于简单的数据传输之上的考量。

 

TCP

扩展:SYN是什么?

SYN是同步序列编号(Synchronize Sequence Numbers),是TCP/IP建立连接时使用的握手信号。

SYN洪泛攻击:发生在osI第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。

扩展:seq和ack是什么?

seq和ack号存在于TCP报文段的首部中,seq是序号,ack是确认号,大小均为4字节。

seq:占 4 字节,序号范围[0,(2^32)-1],序号增加到 (2^32)-1 后,下个序号又回到 0。TCP 是面向字节流的,通过 TCP 传送的字节流中的每个字节都按顺序编号,而报头中的序号字段值则指的是本报文段数据的第一个字节的序号。

ack:占 4 字节,期望收到对方下个报文段的第一个数据字节的序号。

三次握手

TCP连接传输三个阶段:连接建立、数据传送、连接释放。

TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。

假设运行在一台主机(客户)上的一个进程想与另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP,他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用以下步骤与服务器中的TCP建立一条TCP连接。

1、客户端发送连接请求报文段,无应用层数据。(SYN包)

SYN=1,seq=x(随机)

2、服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据。(对SYN的确认包)

SYN=1,ACK=1,seq=y(随机),ack=x+1

【ack=x+1,x为SYN包的seq值,表示你的请求我已收到,我这方的数据流就从这个数开始。】

3、客户端为该TCP连接分配缓存和变量,并向服务器瑞返回确认的确认,可以携带数据。(最后的确认包)

SYN=0,ACK=1,seq=x+1,ack=y+1

【ack=y+1,y为ACK包的seq值,表示你的请求我已收到,我这方的数据流就从这个数开始。】

【seq=x+1,x为SYN包的seq值,表示你的回复我收到了,我这方的数据流就从这个数开始。】

四次握手

参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的“资源”(缓存和变量)将被释放。

1、客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。

FIN=1,seq=u

【seq=u,u=之前接收到的数据的最后一个字节的序号加1】

2、服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了——半关闭状态。

ACK=1,seq=v,ack=u+1

【ack=u+1,u为FIN包的seq值,表示你的请求我已收到,我这方的数据流就从这个数开始。】

【seq=v,v=之前接收到的数据的最后一个字节的序号加1】

3、服务器端发完数据,就发出连接释放报文段,主动关闭TCP连接。

FIN=1,ACK=1,seq=w,ack=u+1

【ack=u+1,u为FIN包的seq值,表示你的请求我已收到,我这方的数据流就从这个数开始。】

【seq=w,w=之前接收到的数据的最后一个字节的序号加1】

4、客户端回送一个确认报文段,再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭。

ACK=1,seq=u+1,ack=w+1

【ack=w+1,w为FIN包的seq值,表示你的请求我已收到,我这方的数据流就从这个数开始。】

【seq=u+1,u为FIN包的seq值,表示你的回复我收到了,我这方的数据流就从这个数开始。】

 

校验

UDP和TCP的校验过程相同。

伪首部只有在计算检验和时才出现,不向下传送也不向上递交。

17:封装UDP报文的IP数据报首部协议字段是17。

UDP长度:UDP首部8B+数据部分长度(不包括伪首部)。

在发送端:

1、填上伪首部;

2、全0填充检验和字段;

3、全0填充数据部分(UDP数据报要看成许多4B的字串接起来);

4、伪首部+首部+数据部分采用二进制反码求和;

5、把和求反码填入检验和字段;

6、去掉伪首部,发送。

在接收端:

1、填上伪首部;

2、伪首部+首部+数据部分采用二进制反码求和;

3、结果全为1则无差错,否则丢弃数据报/交给应用层附上出差错的警告。
 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值