一、传输层概述
- 传输层为应用层提供通信服务,使用网络层服务
- 传输层的功能:
- 提供进程和进程之间的逻辑通信(网络层提供主机之间的逻辑通信)
- 复用(发送发不同的应用进程)和分用(接收方正确的数据传送)
- 对收到的报文进行差错检测
- 两个协议:面向连接的传输控制协议TCP、无连接的用户数据协议UDP
- TCP协议的特点:可靠、面向连接、时延大,适用于大文件
- 传送数据之前必须建立连接,数据传送结束后要释放连接
- 不提供广播/多播服务
- 增加开销:确认、流量控制、计时器及连接管理等
- UDP协议的特点:不可靠、无连接、时延小,适用于小文件
- 传送数据之前无需连接,收到UDP报文后不需给出任何确认
1.1 传输层的寻址与端口
- 复用:应用层所有的应用进程都可以通过传输层再传输到网络层
- 分用:传输层从网络层收到数据后交付指明的应用进程
- 端口(逻辑/软件端口)是传输层的SAP,标识主机中的应用进程
- 端口号只有本地意义,在因特网中不同计算机的相同端口没有联系
- 端口号的长度为16bit,能标识65536个不同的端口号
- 套接字Socket = (主机IP地址,端口号):在网络中采用发送方和接收方的套接字组合来识别端点,套接字唯一标识了网络中的一个主机和它上面的一个进程
二、UDP协议
- UDP只在IP数据服务之上增加了:复用分用、差错检测
- UDP的主要特点:
- UDP是无连接的,减少开销和发送数据之前的时延
- UDP使用最大努力交付,即不保证可靠交付
- UDP是面向报文的,适合一次性传输少量数据的网络应用
- UDP无拥塞控制,适合很多实时应用。
- UDP首部开销小8B,TCP20B
- UDP首部格式
- UDP校验
三、 TCP协议
- TCP协议的特点
- 面向连接(虚连接)的传输协议
- 每一条TCP只能有两个端点,即点对点的单播通信
- 提供可靠交付的服务,无差错、不丢失、不重复、按序到达;可靠有序、不丢不重
- 提供全双工通信:发送缓存、接收缓存
- 面向字节流:应用程序交下来的数据看成一连串无结构的字节流
- ☆ TCP报文段首部格式
3.1 TCP连接
- TCP连接传输三个阶段:连接建立、 数据传送、连接释放
3.3.1 连接建立
- TCP连接建立采用客户(主动发起连接建立的应用进程)服务器(被动等待连接建立的应用程序)方式
- SYN洪泛攻击:
- SYN洪泛攻击发生在OSI第四层,这种方式利用TCP协议的特性,即三次握手
- 攻击者发送TCP SYN(SYN是TCP三次握手中的第一个数据包);当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态(即,半连接状态);服务器收不到再确认的话,还会重复发送ACK给攻击者。
- 攻击者对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了
- SYN洪泛攻击的解决:SYN cookie
- TCP连接的建立与释放
3.2 可靠传输
- 可靠:保证接收方进程从缓存区读出的字节流与发送方发送的字节流完全一致
- TCP实现可靠传输的机制
- 校验:增加伪首部,使用二进制反码求和
- 序号:一个字节占一个序号,序号字段是一个报文段第一个字节的序号
- 确认:TCP默认使用累计确认(TCP只确认这个数据流中第一个丢失字节为止的报文段)
- 重传:TCP发送方在规定时间内没有收到确认就要重传已发送的报文段(超时重传)
- 重传时间:TCP采用自适应算法,动态改变重传时间RTTs(加权平均往返时间 )
- 冗余ACK(冗余确认):快速重传
- 每当比期望序号大的失序报文段到达时,发送一个冗余ACK,指明下一个期待字节的序号
- 发送方收到3个对于报文段n的冗余ACK → 认为n+1报文段丢失,重传该报文段