一、概述
主机才有的层次
功能:为应用层提供通信服务,使用网络层的服务
- 提供进程与进程之间的逻辑通信
- 传输层对收到的报文进行差错检测
- 复用与分用
- 复用:应用层所有的应用进程都可以通过传输层传输
- 分用:传输层从网络层收到数据后交付指明的应用进程
寻址与端口
端口:传输层的SAP,标识主机中的应用进程(逻辑端口/软件端口)
端口号只有本地意义,长度为16bit,能表示65536个不同的端口号- 服务端使用的端口号
- 熟知端口号(0 - 1023):给TCP/IP最重要的一些应用程序,让所有用户都知道
- 登记端口号(1024 - 49151):其他应用程序 - 客户端使用的端口号:仅在客户进程运行时才做动态选择
网络中采用发送方和接收方的套接字组合来识别端点
套接字Socket = (主机IP地址,端口号),唯一标识了网络中的一个 主机和它上面的一个 进程 应用程序 熟知端口号 FTP 21 TELNET 23 SMTP 25 DNS 53 HTTP 80
二、UDP协议
无连接的用户数据报协议 - 不可靠、无连接、时延小、适用于小文件
传送数据之前不需要建立连接,收到UDP报文后不需要给出任何确认UDP特点:网络层检错
- 无连接,减少开销和发送数据之前的时延
- 使用最大努力交付,即不保证可靠交付
- 面向报文,适合一次性传输少量数据的网络应用
应用层给UDP多长的报文,UDP照样发送,即一次发一个完整报文,不切片
- 无拥塞控制,适合很多实时应用
- 首部开销小,8字节(而TCP首部20B)
首部格式
若对方需要回复,可查看源端口号UDP校验方式
三、TCP协议
0. TCP协议的特点
面向连接的传输层协议
每一条TCP连接只能有两个端点(点对点)
TCP提供可靠交付的服务,可靠有序、不丢不重
提供全双工通信发送缓存:准备发送的数据&已发送但尚未受到确认的数据
接收缓存:按序到达但尚未被应用程序读取的数据&不按序到达的数据面向字节流:TCP将应用程序交下来的数据看作一连串的无结构字节流
TCP特点:连接
TCP首部格式
- 6个控制位
六个控制位 含义 紧急位URG 1标明报文段中有紧急数据,应尽快传送,不用在缓存中排队 确认位ACK 1表示确认号有效,在连接建立后所有传送的报文段都必须把ACK置为1 推送位PSH 1接收方尽快交付接受应用进程,不再等到缓存填满再向上交付 复位RST 1表明TCP连接中出现严重差错,必须释放连接,然后重新建立传输连接 同步位SYN 1表明时一个连接请求/连接接收报文 终止位FIN 1表明此报文段发送方数据已发送完,要求释放连接 - 窗口
- 校验和:检验首部+数据,检验时要加上12B伪首部
- 紧急指针
- 选项
1. TCP连接管理
TCP连接的建立采用客户 - 服务器方式,传输的三个阶段:建立连接 - 数据传送 - 连接释放
- 1.建立连接(三次握手)
-
round 1. 客户端发送连接请求报文段(无应用层数据)
SYN = 1, seq = x(随机) -
round 2. 服务器分配缓存、变量,返回确认报文段,允许连接 S
YN = 1, seq = y , ACK = 1 , ack = x+1(确认号) -
round 3. 客户端为该TCP连接分配缓存、变量,并向服务器返回确认的确认,可携带数据
SYN=0, ACK = 1, ack=y+1 ,seq = x+1
-
SYN洪泛攻击
发生在OSI第四层(传输层),利用TCP协议特性。攻击者发送TCP的第一个数据包SYN,服务器返回ACK后,攻击者不进行再确认,则此时TCP处于半连接状态,服务器未收到再确认就重复发送ACK给攻击者,浪费资源。
若攻击者向服务器大量发送这种TCP连接,每一个都无法完成三次握手,服务器上的TCP连接由于挂起状态而消耗CPU与内存- 3.连接释放(四次握手)
参与TCP连接的两个进程中任一都可终止连接,连接结束后,主机中的缓存、变量都被释放
-
round 1. 客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接
FIN = 1, seq = u -
round 2. 服务器回送一个确认报文段,客户到服务器这个方向的连接就释放(半关闭状态)
ACK = 1(ack = u+1), seq = v -
round 3. 服务器发完数据后,发出连接释放报文段,主动关闭TCP连接
FIN = 1, seq = w, ACK=1(ack=u+1) -
round 4. 客户端回送一个确认报文段,等到计时器设置的2MSL(最长报文段寿命)后,连接彻底关闭
因为2MSL内服务器会受到该确认报文段,若服务器没收到④的确认,会继续发出②的确认报文段
2. TCP可靠传输
TCP实现可靠传输的机制:
- 校验(与UDP校验一样,增加伪首部)
- 序号
- 累计确认(接收方向发送方发送确认报文段,期待接收的下一个累计确认)
TCP默认使用累计确认
- 超时重传(TCP发送方再规定时间内没收到确认就要重传已发送报文段)
- 重传时间:TCP采用自适应算法,动态改变重传时间RTTs (加权平均往返时间)
- 冗余ACK(冗余确认):每当比期望序号大的报文段到达时,发送一个冗余ACK,指明下一期待字节的序号
例:发送方已发送1.2.3.4.5报文段
接收方收到1,返回1的确认(确认号为2的第一个字节)
接收方收到2,返回1的确认……收到5仍返回1的确认
发送方收到3个对1的冗余ACK,认为2报文段丢失,则快速重传3. TCP流量控制
使用滑动窗口实现流量控制
rwnd
4. TCP拥塞控制
- 出现拥塞的条件:对资源需求的总和 > 可用资源
- 网络中许多资源同时呈现供应不足 -> 网络性能变坏 -> 网络吞吐量随输入负荷增大而下降
- 拥塞控制的方法:防止过多数据注入网络
满开始&拥塞避免,快重传&快恢复
拥塞控制与流量控制的区别
控制拥塞的四种算法
慢开始
拥塞避免
快重传
快恢复- 1.建立连接(三次握手)