Open diveDylan opened 3 years ago
UDP(伪首部共用) TCP
1、udp是无连接的、尽最大努力交付、面向报文(不拆分不合并,一次交付一个完整报文)、没有拥塞控制、 首部开销小,通过端口实现分用,可以一对多和多对一 2、伪首部不向下和向上传递只用于计算校验和 3、udp校验是首部和数据包一起校验,通过切分成16位字符串,若非偶数位则进行补全零操作,通过二进制反码 求和
1、面向连接的传输协议,通信需要建立连接,结束需要释放连接 2、端对端的通信 3、提供可靠交付(重传,阻塞,缓存) 4、可以双向通信,服务端push 5、面向字节流
1、端口标记分发的应用程序,实现tcp的分用功能 2、序号 seq,即报文段序号,tcp发送的字节流,字节流每个字节都按序编号,代表数据第一个字节的序号 3、确认序号(需要ACK=1)ack,期望收到对方下一个报文段的第一个数据字节的序号,也代表确认号 - 1 的所有数据都已经收到 4、数据偏移,首部长度,报文起始到数据报的起始的距离 5、URG紧急,URG=1 时紧急指针生效,此报文将优先发送 紧急指针,紧急数据的字节数,指出了紧急数据的尾部(窗口为0也可以发送紧急数据) 6、ACK, ACK=1, 代表确认应答,此时确认序号才生效 7、PSH(push) PSH = 1 TCP可以主动推送报文 8、RST(reset)RST=1 遇到特殊情况需要重建链接或者重置 9、SYN同步, SYN=1 ACK= 0请求连接报文 SYN=1 ACK=1 接受连接报文 11、窗口,通知对方允许发送的数据量,让发送方设置其发送窗口大小,与滑动窗口相关 12、校验和,加上伪首部(tcp协议号6)
可传送的最大报文字节数
三个指针:1、已经发送未确认2、允许发送未发送3、不允许发送 未按序的时候需要使用缓存包括重传的时候
超过一段时间没有收到确认报文将重传 RTT一个报文的往返时间 RTTs 加权平均往返时间,又称平滑的往返时间 newRTTs = (1 - a) oldRTTs + a newRTT(a一般为0.125) RTTd RTT的偏差加权平均值 newRTTd = (1-y) oldRTTd + y(RTTs - newRTT) RTO 超时重传时间 RTO = RTTs + 4 RTTd
发送缓存: 准备发送的数据(累计算法)、发送过的超时重传的副本 接受缓存: 应用层未使用的数据,未按序到达的数据
Selective AXK 选择确认,报文段无差错,部分数据缺失或者无序,标志未正确收到的报文序号段
TCP慢摇和拥塞避免:先以指数形式加数,发生确认超时或者其他阻塞现象,立即减半(第一次发生在慢开始门限)再以线性形式增长逐步确认合适的最大传输值
报文方向clinet =》 server
clinet =》 server
seq=x SYN=1 ACK=0
发起一个序号为x,SYN=1,ACK=0请求链接报文,客户端进入SYN-SENT状态
报文方向server =》 client
server =》 client
seq=y ack=x+1 SYN=1 ACK=1
SYN=1 ACK=1 (服务端的确认应答) seq=y ack=x+1 服务端发送的报文序号为y的报文,同事将报文的ACK标志置为1,表示接受链接, 将确认序号ack变成x+1代表序号x的报文全部正常接受(此时没有数据报)服务端进入SYN-RECIVED状态, 这一步时服务端对客户端进行应答确认
报文方向client =》server
client =》server
seq=x+1 ack=y+1 SYN=1 ACK=1
SYN=1 ACK=1 (客户端的确认应答) seq=x+1 ack=y+1 客户端收到确认序号x+1的报文,发送序号为x+1的报文,同时确认服务端的序号y 的报文确认应答ack=y+1,将确认应答标记ACK置为1,代表客户端确认接受服务端链接。 客户端进入 CLINET-READY, 服务端收到报文进入SEVER—READY
报文方向client =》 server
client =》 server
seq=x FIN=1
FIN=1 seq=x 客户端发起一个FIN=1 序号为x的释放连接请求报文,客户端进入FIN-WAIT-1
报文方向 server =》 client 这个阶段服务器将分步发送两种报文应答 a、
seq=y ack=x+1 ACK=1
ack=x+1,ACK=1, seq=y 收到客户端序号为x的请求报文,将确认应答标志位置为1,发送序号为y确认应答为x+1的报文,此时client发送server的通道已经关闭(FIN-WAIT-2), 但是接受通道open,服务端CLOSE-WAIT,整体状态HALF-CLOSED b、
seq=z ack=x+1 FIN=1 ACK=1
服务端确认没有发送数据后,发送FIN=1,seq=z,ACK=1 ack=x+1(客户端没有新的数据发送确认应答号一直为x+1)的释放连接请求报文,服务端进入LAST-ACK状态
seq=x+1 ack=z+1 ACK=1
报文方向client =》 server客户端收到服务端的释放连接请求报文,做出确认应答,发送ACK标志为1,序号为x+1,ack确认序号为z+1的应答请求,服务端收到报文进入closed状态,客户端进入 time-wait状态,类似超时计时器的一个时间概念后关闭连接
报文比较
UDP(伪首部共用) TCP
特性
UDP
1、udp是无连接的、尽最大努力交付、面向报文(不拆分不合并,一次交付一个完整报文)、没有拥塞控制、 首部开销小,通过端口实现分用,可以一对多和多对一 2、伪首部不向下和向上传递只用于计算校验和 3、udp校验是首部和数据包一起校验,通过切分成16位字符串,若非偶数位则进行补全零操作,通过二进制反码 求和
TCP
1、面向连接的传输协议,通信需要建立连接,结束需要释放连接 2、端对端的通信 3、提供可靠交付(重传,阻塞,缓存) 4、可以双向通信,服务端push 5、面向字节流
TCP报文介绍
1、端口标记分发的应用程序,实现tcp的分用功能 2、序号 seq,即报文段序号,tcp发送的字节流,字节流每个字节都按序编号,代表数据第一个字节的序号 3、确认序号(需要ACK=1)ack,期望收到对方下一个报文段的第一个数据字节的序号,也代表确认号 - 1 的所有数据都已经收到 4、数据偏移,首部长度,报文起始到数据报的起始的距离 5、URG紧急,URG=1 时紧急指针生效,此报文将优先发送 紧急指针,紧急数据的字节数,指出了紧急数据的尾部(窗口为0也可以发送紧急数据) 6、ACK, ACK=1, 代表确认应答,此时确认序号才生效 7、PSH(push) PSH = 1 TCP可以主动推送报文 8、RST(reset)RST=1 遇到特殊情况需要重建链接或者重置 9、SYN同步, SYN=1 ACK= 0请求连接报文 SYN=1 ACK=1 接受连接报文 11、窗口,通知对方允许发送的数据量,让发送方设置其发送窗口大小,与滑动窗口相关 12、校验和,加上伪首部(tcp协议号6)
TCP的一些概念
最大报文段长度MSS:
可传送的最大报文字节数
滑动窗口
三个指针:1、已经发送未确认2、允许发送未发送3、不允许发送 未按序的时候需要使用缓存包括重传的时候
超时重传
超过一段时间没有收到确认报文将重传 RTT一个报文的往返时间 RTTs 加权平均往返时间,又称平滑的往返时间 newRTTs = (1 - a) oldRTTs + a newRTT(a一般为0.125) RTTd RTT的偏差加权平均值 newRTTd = (1-y) oldRTTd + y(RTTs - newRTT) RTO 超时重传时间 RTO = RTTs + 4 RTTd
缓存
发送缓存: 准备发送的数据(累计算法)、发送过的超时重传的副本 接受缓存: 应用层未使用的数据,未按序到达的数据
SACK
Selective AXK 选择确认,报文段无差错,部分数据缺失或者无序,标志未正确收到的报文序号段
慢启动和拥塞避免
TCP慢摇和拥塞避免:先以指数形式加数,发生确认超时或者其他阻塞现象,立即减半(第一次发生在慢开始门限)再以线性形式增长逐步确认合适的最大传输值
TCP握手
step1
报文方向
clinet =》 server
发起一个序号为x,SYN=1,ACK=0请求链接报文,客户端进入SYN-SENT状态
step2
报文方向
server =》 client
SYN=1 ACK=1 (服务端的确认应答) seq=y ack=x+1 服务端发送的报文序号为y的报文,同事将报文的ACK标志置为1,表示接受链接, 将确认序号ack变成x+1代表序号x的报文全部正常接受(此时没有数据报)服务端进入SYN-RECIVED状态, 这一步时服务端对客户端进行应答确认
step3
报文方向
client =》server
SYN=1 ACK=1 (客户端的确认应答) seq=x+1 ack=y+1 客户端收到确认序号x+1的报文,发送序号为x+1的报文,同时确认服务端的序号y 的报文确认应答ack=y+1,将确认应答标记ACK置为1,代表客户端确认接受服务端链接。 客户端进入 CLINET-READY, 服务端收到报文进入SEVER—READY
TCP连接释放
step1
报文方向
client =》 server
FIN=1 seq=x 客户端发起一个FIN=1 序号为x的释放连接请求报文,客户端进入FIN-WAIT-1
step2
报文方向
server =》 client
这个阶段服务器将分步发送两种报文应答 a、ack=x+1,ACK=1, seq=y 收到客户端序号为x的请求报文,将确认应答标志位置为1,发送序号为y确认应答为x+1的报文,此时client发送server的通道已经关闭(FIN-WAIT-2), 但是接受通道open,服务端CLOSE-WAIT,整体状态HALF-CLOSED b、
服务端确认没有发送数据后,发送FIN=1,seq=z,ACK=1 ack=x+1(客户端没有新的数据发送确认应答号一直为x+1)的释放连接请求报文,服务端进入LAST-ACK状态
step3
报文方向
client =》 server
客户端收到服务端的释放连接请求报文,做出确认应答,发送ACK标志为1,序号为x+1,ack确认序号为z+1的应答请求,服务端收到报文进入closed状态,客户端进入 time-wait状态,类似超时计时器的一个时间概念后关闭连接