传输层 1.传输层协议: 1)TCP/IP协议族的传输层协议主要有两个: TCP(Transmission Control Protocol):传输控制协议 UDP(User Datagram Protocol):用户数据报协议
2)TCP协议特点: TCP是面向连接的服务、可靠的进程到进程间通信的协议 TCP提供全双工服务,即数据可在同一时间双向传输
3)TCP报文封装在IP数据报中 | IP首部 | TCP报文段 | | TCP包头 | 应用层数据 |
4)TCP包头分析: ----------------------------------------------------------------------------------------------------------------- | 源端口号(16) | 目标端口号(16) | ----------------------------------------------------------------------------------------------------------------- | 序号(32) | ----------------------------------------------------------------------------------------------------------------- | ack 确认号(32) | ----------------------------------------------------------------------------------------------------------------- | 首部 | 保 | U | A | P | R | S | F | | | 长度 | 留 | R | C | S | S | Y | I | 窗口大小(16) | | (4) | (6) | G | K | U | T | N | N | | ----------------------------------------------------------------------------------------------------------------- | 校验和(16) | 紧急指针(16) | ----------------------------------------------------------------------------------------------------------------- | 选项 | -----------------------------------------------------------------------------------------------------------------
端口号范围:0-65535 (查看本地开放的端口号:windows:netstat -an linux:netstat -antpl) 源端口号:是客户端进行随机生成的,一般是从50000开始的。 目标端口号:一般是服务器固定的。如:mysql:3306 序列号seq:TCP为每个字节都进行了编号。 确认号ack:通过ack来确认每个字节是否收到,判断是否需要重传! 首部长度:该包头的大小(20-60字节,一般为20字节) 控制位:SYN:同步位,请求建立连接位 FIN:终止位,请求断开连接位 RST:重置位,强制对方断开连接,释放会话 PSH:推送位,推送数据到应用层,为1时,推送应用层数据,为0时,不推送 ACK:确认位,该位为开关,为1时,ack号有效,为0时,ack无效 UGR:紧急位,为1时,代表有些字节为紧急数据,需要第一时间推送到应用层, 需要与紧急指针配合使用 窗口大小:win窗口,用于通知发送方自己的缓存大小 校验和:校验整个TCP段 5)TCP的三次握手建立连接(跟进程没有关系,只是两个协议在对话) PC1 PC2 1.发送SYN报文 (seq=x,SYN=1) 2.发送SYN+ACK报文 (seq=y,ack=x+1, SYN=1,ACK=1) 3.发送ACK报文 (seq=x+1,ack=y+1, ACK=1) TCP半连接 -- SYN Flood攻击/SYN泛洪攻击 TCP半连接概念:只进行了TCP前2次握手,而没有进行第三次握手确认! 即会话没有建立成功 SYN泛洪攻击原理:大量的伪造第一次握手的SYN包,并不进行第三次握手确认! SYN泛洪攻击现象/结果:大量占用了服务的会话,在服务器上存在大量的半连接会话, 当达到上限时,服务将无法为正常的访问请求进行回应!
6)TCP的四次握手断开连接 PC1 PC2 1.发送FIN/ACK (FIN=1,ACK=1) 2.发送ACK报文 (ACK=1) 3.发送FIN/ACK报文 (FIN=1,ACK=1) 4.发送ACK报文 (ACK=1)
7)UDP协议特点 无连接、不可靠的传输协议 花费的开销小、传输效率较高
8)UDP协议包头: ------------------------------------------------------------------------------ | 源端口号(16) | 目标端口号(16) | ------------------------------------------------------------------------------ | UDP长度(16) | UDP校验和(16) | ------------------------------------------------------------------------------
注释: UDP长度:用来指出UDP的总长度,为首部加上数据 校验和:用来完成对UDP数据的差错检验,它是UDP协议提供的唯一可靠机制
TCP为什么可靠: 传送数据前和传送数据后,要进行三次握手连接和四次握手断开连接 编号机制:为每个字节都进行编号 重传机制:每次发送数据后,会进行计时,在规定时间内未收到对方应答,会重传 确认机制:对收到的每个包会进行确认,告诉对方已收到 |