计网:传输层
传输层
传输层的功能
1、传输层提供进程与进程之间的逻辑通信
2、复用和分用
复用:应用层所有的应用进程都可以通过传输层再传输到网络层
分用:传输层从网络层收到给各应用进程的数据后,必须分别交付指定的各应用进程
3、传输层对收到的报文进行差错检测
4、传输层的两种协议 TCP 和 UDP
传输层寻址与端口
端口:逻辑端口/软件端口,是传输层的SAP,标识主机中的应用进程
端口号:长度为16bit ,能表示65536个不同的端口号
套接字
在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程
TCP协议
面向连接的传输控制协议
传送数据之前必须建立连接,数据传送结束时要释放连接;不提供广播或多播服务;由于TCP要提供可靠的面向连接的传输服务,因此增加了许多开销
特点
1、面向连接(虚连接)
2、点对点
3、可靠交付:不丢不重
4、提供全双工信道:
发送缓存:准备发送的数据和已经发送但尚未收到确认的数据
接收数据:按序到达但尚未接受应用程序读取的数据和不接受到达的数据
5、面向字节流 :TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流
TCP报文首部格式
序号:在一个TCP链接装传送的字节流中的每一个字节都按顺序编号,本字段标识本报文段所发送数据的第一个字节的序号
确认号:期望收到对方下一个报文段的第一个数据字节的序号。若确认号为N,则表示到序号N-1为止的所有数据都已经正确收到
数据偏移:首部长度
控制位:
1、
2、
3、
4、
5、
6、
窗口: 发送本报文端的一方的接收窗口,即现在允许对方发送的数据量
检验和:检验首部+数据,讲演时要加上12B的伪首部,第四字段为6
紧急指针:URG= 1时才有意义,指出本报文段中紧急数据的字节数
TCP的连接建立 【三次握手】
1、客户端发送连接请求报文段,无应用层数据
SYN = 1、seq = x(随机)
2、服务器端为该TCP连接分配缓存和变量,并向客户端返回确认报文段,允许连接,无应用层数据
SYN = 1、ACK = 1、seq = x(随机)、ack = x + 1
3、客户端为该TCP连接分配缓存和变量、并向服务器端返回确认的确认,可以携带数据
SYN = 0、ACK = 1、seq = x + 1、ack = y + 1
SYN洪泛攻击
TCP的连接释放 【四次握手】
、
1、客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接
FIN = 1,seq = u
2、 服务器端回送一个确认报文段,客户到服务器这个方向的连接就释放了【半关闭状态】
ACK = 1、seq = v ,ack = u + 1
3、服务器端发送完数据,就发送连接释放报文端,主动关闭TCP连接
FIN = 1、ACK = 1、seq = w,ack = u + 1
4、客户端回送一个确认报文段、再等到时间等待计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭
ACK = 1、seq = u + 1 ,ack = w + 1
TCP可靠传输
可靠:保证接收方进程从缓存区读出的字节流与发送方发出的字节流是完全一样的
TCP实现可靠传输的机制
1、校验
与UDP校验一样,增加伪首部
2、序号
3、确认
4、重传
确认重传不分家,TCP的发送方在规定的时间 【重传时间】内没有收到确认就要重传已发送的报文段 【超时重传】
TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间)
冗余ACK【冗余确认】
TCP流量控制
流量控制:发送方发的快,接收方来不及收
TCP利用滑动窗口机制实现流量控制
在通信过程中,接收方根据自己的接收缓存的大小,动态的调整发送方的发送窗口的大小,即接受窗口rwnd (接受方设置确认报文端的窗口字段来讲rwnd 通知给发送方)
发送方的发送窗口 = min(接收窗口rwnd ,拥塞窗口cwnd)
实例:
TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器
若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值,可以进行重传
若窗口依然为0,则发送方就重新设置持续计时器
TCP拥塞控制
出现拥塞条件:
对资源需求的总和 > 可用资源
导致:许多资源同时供应不足 ——> 网络性能变差 ——> 网络吞吐量将随输入负荷增大而增大
拥塞控制:
防止过多的数据注入到网络中 【全局性】
拥塞控制的四种算法:
假定:
1、数据单方向发送,另一方只传送确认
2、接收方总是有足够大的缓存空间,因而发送窗口的大小取决于拥塞程度
发送方的发送窗口 = min(接收窗口rwnd ,拥塞窗口cwnd)
接受窗口:接收方根据接收缓存设置的值,并告知给发送方,反应接收方容量
拥塞窗口:发送方根据自己估算的网络拥塞程度而设置的窗口值,反映网络当中的容量
1、慢开始和拥塞避免
一个传输轮次:发送一批报文段并收到他们的确认的时间
2、快重传和快恢复
UDP协议
无连接的用户数据报协议
传送数据之前不需要建立链接,收到UDP报文后也无需给出确认
UDP在IP数据报服务上增加的功能:复用分用、差错检测
应用层给UDP多长的报文,就照样发送,一次发一个完整报文
特点:
1、不可靠:需要保证最大努力交付
2、无连接:减少开销和发送数据之前的时延
3、面向报文:适合一次性传输少量数据的网络应用
4、无拥塞控制:适合很多实时应用
5、首部开销小:8B 。TCP:20B
UDP首部格式
分用时,找不到对应的目的端口,就丢失报文,并给发送方,发送ICMP“端口不可达”的差错报告报文
UDP校验
伪首部只有在计算检验和时才出现,不向下传送也补向上递交
UDP长度:UDP首部8B+数据部分长度(不包括伪首部)
发送端:
1、填上伪首部
2、全0填充检验和字段
3、全0填充数据部分
4、伪首部+首部+数据部分采用二进制反码求和
5、把和求反码填入检验和字段
6、去掉伪首部,发送
接收端:
1、填上伪首部
2、伪首部+首部+数据部分采用二进制反码求和
3、结果全为1则无差错,否则丢弃数据报/交给应用层附上出差错的警告