
UDP仅在IP数据报服务商增加了复用分用和差错检测功能
UDP的主要特点1.UDP无连接,减少开销和时延
2.UDP不保证可靠交付
3.UDP面向报文,适合一次性传输少量数据(不会裁切/分组应用层传递下来的报文,但是继续向下传递到网络层就会分片)
4.没有拥塞控制、适合实时应用(允许丢失但不允许延迟,例如IP电话)
5.首部开销小,仅8字节(TCP-20字节)
首部格式所有字段的长度均为2字节
源端口号可有可无(全0),如果希望对方回复则需要添加
目的端口号必须非空
长度:整个用户数据报的长度
检验和:检测整个数据报是否出错,错误即丢弃
分用时,如果找不到对应的端口号也会丢弃,并给发送方发送ICMP“端口不可达”报文
UDP校验
伪首部中的17对应的是网络层中UDP的协议字段,整个伪首部都是在模拟IP首部。
伪首部仅在计算校验和时出现,既不向下传送也不向上递交(传输中不会出现)
伪首部中的长度=8字节+数据部分长度(不包含伪首部)
UDP校验的过程
发送端
1.填上伪首部
2.校验和字段和数据报不足8字节的部分全部填充0
3.伪首部+首部+数据部分采用二进制反码求和
4.将结果填入校验和
5.去掉伪首部并发送
接收端
1.填上伪首部
2.伪首部+首部+数据部分采用二进制反码求和
3.结果全1则无误差;否则丢弃/移交上层处理
TCP协议 TCP协议的特点1.面向连接(虚连接)的传输层协议
2.只支持点对点
3.提供可靠交付
4.提供全双工(发送方和接收方同时设置:发送缓存&接收缓存)
5.面相字节流(TCP会将应用层交付的数据仅视为一串无结构的字节流)
首部格式填充字段:为了确保增加选项之后首部依旧4字节对齐
序号:本数据报文中第一个字节的序号(在原数据报中的序号)
确认号:如果确认号为N,则说明N-1个数据已经确认完毕
数据偏移:数据报文起始处距离TCP报文起始处有多远<首部长度>(以4字节为单位,1=4字节)
控制位:
URG(紧急位):报文中有紧急数据需要尽快传送,配合紧急指针使用;URG=1有效
ACK(确认位):连接建立后所有的ACK=1
PSH(推送位):PSH=1接收方会尽快将数据交付给应用,而不是等到缓存填满
RST(复位位):RST=1时,连接有严重错误必须释放连接后重新建立,或者置1的时候拒绝打开非法连接
SYN(同步位):SYN=1表明一个链接请求/接受报文
FIN(终止位):发送方数据已经发完,要求释放连接(释放连接的报文FIN必定为1)
窗口:现在允许对方发送的数据量(对方的发送窗口、己方的接收窗口)
检验和:和UDP一样要加上伪首部
紧急指针:URG=1时有效,指出本报文段中紧急数据的字节数,(一个数据报中可以同时包含紧急数据和非紧急数据)
选项:最大报文段长度MSS、窗口扩大、时间戳、选择确认
连接管理TCP连接的三个阶段:连接建立->数据传送->连接释放
连接建立(三次握手)
1.客户端发送连接请求报文段,无应用层数据 SYN=1,seq=随机(序号位)
2.服务器为此连接分配缓存和变量,并返回确认报文段,无应用层数据
SYN=1,ACK=1,seq=y(随机),ack+1(确认号字段,希望客户端下次发送的位)
3.客户端返回确认的确认,为此连接分配缓存和变量,可以携带数据
SYN=0,ACK=1,seq=x+1,ack=y+1,
SYN洪泛攻击:发送TCP SYN,服务器返回ACK后攻击者并不进行确认的确认。
解决方法:设置SYN cookie
连接释放(四次挥手)
1.客户端发送连接释放报文段,停止发送数据,主动关闭连接
FIN=1,seq=u
2.服务器端回送一个确认报文段,客户->服务器方向的连接中断(半关闭状态)
ACK=1,seq=v(上一个发送报文段+1),ack=u+1
3.服务器端发送完数据,发送连接释放报文段,主动关闭连接
FIN=1,ACK=1,seq=w,ack=u+1(未发送数据,此位不变)
4.客户端回复确认报文段,等待2MSL(最长报文段寿命)后彻底关闭连接
ACK=1,seq=u+1,ack=w+1
TCP可靠传输机制:1.校验(同UDP一样添加伪首部) 2.序号 3.确认 4.重传
序号:一个字节占一个序号,序号字段指某报文段第一个字节的序号
确认:确认号字段是接收发下次希望收到的下一个字节,收到确认后发送方释放缓存
TCP默认使用累积确认(返回第一个未收到的数据,就算后面收到了也一样)
重传:发送方在规定的时间内未收到确认就会重传已发送的报文段(超时重传)
重传时间:自适应算法,动态的改变重传时间RTTs(加权平均往返时间)
冗余ACK(冗余确认)
每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号
接收方收到3个对统一报文段的冗余ACK,就会重传该报文段,称为快速重传
TCP流量控制(让发送方慢点,接收方来得及接收)TCP使用滑动窗口机制
接收方根据自己接收缓存的大小,订台的调整发送方的发送窗口大小(接收窗口rwnd,通过设置确认报文中的窗口字段),发送方的发送窗口在接收窗口rwnd和拥塞窗口cwnd中取最小值
连续发送,累积确认
当接收窗口为0的时候,主机会设置一个持续计时器;当计时器设置的时间到期后,就发送一个零窗口的探测报文段。
TCP的拥塞控制出现拥塞的条件:对资源需求的总和>可用资源
拥塞控制的目的:防止过多数据注入到网络中(全局性)
算法: 慢开始、拥塞避免
快重传、快恢复
拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当前容量。
慢开始和拥塞避免
一个传输轮次:从发送一个报文段到收到它的确认的时间=一个往返时延RTT
控制分为两段:第一段慢开始每经过一个RTT,发送窗口翻倍 + 第二段为拥塞避免,每经过一个RTT,发送窗口+1(而不是翻倍)
第一段为指数增长,第二段为线性增长,切换的点为门限值ssthresh=16
当拥塞出现后,cwnd立刻置1。新的门限值=网络拥塞时的发送窗口/2
快重传和快恢复
接收到三个重读的冗余ACK触发,降低到新门限(拥塞窗口/2)再执行拥塞避免
快恢复的含义:不用降到1
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)