TCP协议和SCTP协议的故事

一.OSI七层参考模型简介

在这里插入图片描述
1.物理层
在物理层上所传数据的单位是比特,作用是定义电气电压接口规范光学特性
2.数据链路层
单位是数据帧
LLC(逻辑链路控制)子层:建立和维护网络连接,差错检验
Mac(媒介访问控制)子层:帧的封装,数据的寻址
3.网络层
传输数据包,通过ip进行逻辑寻址
4.传输层
通过端口号区分不同流量,TCP/UDP定义传输是否可靠
5.会话层提供会话的建立和维护应用之间通信
6.表示层数据的格式化转换
7.应用层为操作系统或网络应用程序提供访问网络服务的接口

二.TCP头部:

在这里插入图片描述
源端口:2字节,大于1023,随机产生
目的端口:2字节,由应用程序指定
序号:占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号
确认号 4个字节,包含发送确认的一端所期望收到的下一个顺序号
偏移字段占4位,它指出TCP报文的数据距离TCP报文段的起始处有多少
保留位 6位,保留给将来使用,目前必须置为 0
控制字段
①URG:为 1 表示紧急指针有效,为 0 则忽略紧急指针值
②ACK:为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段
③PSH:为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满
④RST:用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题
⑤SYN:同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步( synchronize )
⑥FIN:用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流
窗口:2字节,指的是通知接收方,发送本报文你需要有多大的空间来接受
检验和:2字节,检验tcp的首部和数据部分
紧急指针 2字节,指出本报文段中的紧急数据的字节数;
选项长度可变,定义一些其他的可选的参数

三.TCP三次握手

在这里插入图片描述
**第一次握手:**建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号
**第二次握手:**服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
**第三次握手:**客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手;
注:为什么需要三次握手?
TCP是可靠的传输控制协议,三次握手能保证数据可靠传输又能提高传输效率。
1)若TCP的握手是两次
<1>如果client发给server的SYN报文因为网络原因,延迟发送。
由于client没有收到server对SYN的确认报文,会重发SYN报文,服务器和回复ACK,连接建立。
数据发送完毕,这条连接被正常关闭。这时,延迟的SYN报文发到了server,server误以为这是client重新发送的同步报文,又回复了一个ACK,和client建立了连接。
<2>如果server给client发送的ACK报文因为网络原因,报文被丢弃,此时server认为已经建立好连接,但是client没有收到确认报文,认为没有建立好连接。
client会重发SYN报文,此时server已经处于就绪状态,认为已经建立好连接。
2)若TCP是四次握手
①client给server发送SYN同步报文
②server收到SYN后,给client回复ACK确认报文
③server给client发送SYN同步报文
④client给server发送ACK确认报文
第2.3步之间,server和client没有任何的数据交互,分开发送相当于多发了一次TCP报文段,SYN和ACK标识只是TCP报头的一个标识位。很明显,这两步可以合并,从而提高连接的速度和效率。

四、TCP四次断开

在这里插入图片描述
①数据传输结束后,通信的双方都可释放连接。
②现在 A 的应用进程先向其 TCP 发出连接释放报文段,并停止再发送数据,主动关闭 TCP 连接。
③ A 把连接释放报文段首部的 FIN = 1,其序号seq = u,等待 B 的确认。(第一次)
④B 发出确认,确认号 ack = u  1, 而这个报文段自己的序号 seq = v。(第二次)
⑤TCP 服务器进程通知高层应用进程。
⑥从 A 到 B 这个方向的连接就释放了,TCP 连接处于半关闭状态。B 若发送数据,A 仍要接收。
⑦若 B 已经没有要向 A 发送的数据,其应用进程就通知 TCP 释放连接。 (第三次)
⑧A 收到连接释放报文段后,必须发出确认。(第四次)
⑨在确认报文段中 ACK = 1,确认号 ack  w  1,自己的序号 seq = u + 1。
⑩TCP 连接必须经过时间 2MSL 后才真正释放掉。

五、SCTP协议

提问:什么是SCTP协议?
回答: SCTP协议是STREAM CONTROL
TRANSMISSION PROTOCOL即流控制传
输协议的缩写。
我们可以这样来定义SCTP协议:
SCTP是基于提供不可靠传输业务的协议
(如IP)之上的可靠的数据报传输协议
再问:传输协议?有了TCP和UDP还要
SCTP干什么?

回答:因为SCTP最初是设计来在IP网中传送信令的所以:
1、有服务的需求
TCP----提供面向连接的可靠的数据流传输
UD—提供无连接的不可靠的数据包传输
SCTP–提供面向连接的可靠的数据包传输
2、TCP有固有的缺陷
支持多归属(Multi-homing)比较困难
易受拒绝服务攻击(DoS)容易出现行头阻塞
仅能支持字节流传输实时性差
1、SCTP建立和TCP建立对比
四次握手和三次握手
在这里插入图片描述
2.IP地址和传输地址
①SCTP传输地址:IP地址+SCTP传输端口号
②SCTP端口号和TCP端口号类似用来识别同一地址上的用户

3.SCTP是可以确保数据传输的,和TCP类似,也是通过确认机制来实现的。
和TCP不同的是:
①1. TCP是以字节为单位传输的,SCTP是以数据块为单位传输的
②2. TCP通常是单路径传输,SCTP可以多路径传输
③3. TCP是单流有序传输,SCTP可以多流独立有序/无序传输
④4. TCP连接的建立过程需要三步握手,SCTP连接的建立过程需要四步握手
⑤5. SCTP有heartbeat机制来管理路径的可用性
4.SCTP优点
①支持数据报传递,无须上层实现数据定界功能
②实时性好
③安全性好
④避免了行头阻塞
⑤支持多归属

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值