来看看传输层的位置
要点:
传输层是为两个应用进程提供端到端的通信
传输层的复用和分用
传输层与应用层就是端口 (传输层的应用访问点 TSP)
传输层与网络层之间就是协议字段(网络层的 NTSP)
端口(port)
一共可以有 2^16 个
服务器比作房子
而把端口比作通向不同房间的门、
端口扫描可以看好目标主机
套接字
插口 或者 套接口 socket
显得比较冗余了
先来看一下UDP协议
用户数据报协议
- 端口的复用和分用
- 差错控制技术
若果是UDP进行分片。那么只有第一个会有UDP
UDP的首部(四个字段,每个字段各占两个字节)
校验和字段:计算过程下一节介绍
UDP的数据(不讲)
UDP的差错控制方法
有一个首部校验和(只校验首部)
节约了时间(尽力而为的思想)给高层留下了数据是否可靠的问题
高层可以自己选择
发送时计算一次
接受时再计算一次
包含三个部分
首部,数据,伪首部
增加了伪首部的方法
要对完整点的通信双方的五元组的校验
计算校验和
数据长度是奇数的话 如果是偶数个就不填充了
校验和置零
反码求和再取反
DNS DHCP 都是使用了UDP协议
报文简单,实时应用
TCP协议
双方建立TCP的有限状态机
TCP不提供广播或多播的服务
TCP报文段的首部格式
前20个字节是固定的
序号
TCP传送点的报文可以看成连续的字节流
数据部分的第一个字节的序号确认号
期望收到的下一个报文段首部的 序号字段的值数据偏移(四字节为单位)
+标记位
URG: urgent 本报文中包含紧急数据
ACK : 确认号字段有效
PSH : 应尽快将报文给应用程序
RSH : 表明TCP链接出现严重错误,必须重新建立连接
SYN : (需要消耗序号)同步位
FIN :需要释放链接(也消耗序号)
窗口:允许发送方发送的数据量
校验和字段 TCP的 首部 数据 伪首部
TCP伪首部协议字段是6
- 紧急指针
在URG置1时有效
紧急数据的字节数
选项(长度可变,4字节的整数倍,MSS(TCP数据部分的最大长度): TCP报文段长度-TCP首部长度,)
TCP的链接建立过程
SYN
FIN
需要消耗
ACK不消耗
三次握手
通信双方协商报文数据载荷最大长度
MSS值表示后续数据的最大值
避免
分布式的拒绝服务攻击
攻击方式的问题就出在三次握手
SYN flood 攻击
TCP是面向链接的传输层协议
TCP链接释放的过程
TCP可靠传输
序号确认机制
若果没有差错,只是没有按序号
(1) 将不按需的报文段丢弃
(2) 先存到缓冲区 以待后用
超时重传机制
在规定的时间内没得到ACK应答,就取出来重新发送
RTO(retransfomationtimeout)
过大或者过小都不好
RTO=RTT+4*RTTD
RTT:端到端的传输时延
RTTD:传输往返时延的偏差值
RTT的更新方法,在传输层是非常困难的事情
TCP采取了一种自适应的算法
发出的时间到受到确认的时间,在加权平均一下
典型取7/8
TCP中的定时器
(1)重传定时器
在规定时间内没有受到应答就重发
(2)持续定时器
缓冲满了发一个窗口值是0的,
有了缓冲,就发窗口更新报文(然而丢了)
这下晚秋了
超时了,就发一个探寻的消息
(3)保活定时器
查看通信的另一方是否在线,一般设置2个小时
发出10个都没有应答就终止
(4)时间等待定时器
关闭后,一般设置为某一报文寿望寿命的2倍
asa
端到端的流量控制
通过选项通知对方
可以随时动态的调整窗口
由接受端控制发送端
TCP的拥塞控制机制
造成核心的拥塞
传输层的TCP当中实现的
衡量网络的拥塞程度
假定接受窗口足够大
四种拥赛控制技术
ssthresh
是为了防止因为数据过大出现拥塞
慢启动在开始的数值比较小
设定一个门限值
实例复习
题:
解答
(1)
(2)
(3)
第一个SYN
第二个SYN ACK
第三个ACK
分析的正确性