本文共 5375 字,大约阅读时间需要 17 分钟。
OSI七层模型 | TCP/IP概念层模型 | 功能 | TCP/IP协议族 |
---|---|---|---|
应用层 | 应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,BTTP,SNMP,FTP |
表示层 | 数据格式化,代码转换,数据加密 | — | |
会话层 | 解除或建立与别的节点的联系 | — | |
传输层 | 传输层 | 提供端对端的接口 | TCP, UDP |
网络层 | 网络层 | 为数据包选择路由 | IP, ICMP |
数据链路层 | 链路层 | 传输地址的帧及错误检测功能 | SLIP,PPPM, MTU |
物理层 | 以二级制数据形式在物理媒体上传输数据 | ISO2110,IEEE802 |
一般使用IP+协议+端口号(Socket套接字)标识网络中的一个进程
SYN -->Synchronize Sequence Numbers--> 同步队列编号
ACK -->Acknowledge character---------> 确认字符
第几次握手 | SYN | ACK | seq | ack | 内容 |
---|---|---|---|---|---|
第一次握手 | 1 | - | j | - | 客户端发送 SYN 包(syn=j)到服务器,并进入 SYN_SEND 等待状态,等待服务器确认; |
第二次握手 | 1 | 1 | k | j+1 | 服务器收到 SYN 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态; |
第三次握手 | - | 1 | k | k+1 | 客户端收到服务器的 SYN+ACK 包,向服务器发送确认 ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED 状态,完成三次握手。 |
当一端为建立连接而发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。ISN可以看作是一个32比特的计数器,每4ms加1 。这样选择序号的目的在于防止在网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它做错误的解释。 三次握手的其中一个重要功能是客户端和服务端交换 ISN(Initial Sequence Number),以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果 ISN 是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。
试想如果是用两次握手,则会出现下面这种情况:
如客户端发出连接请求,但因连接请求报文丢失而未收到确认,于是客户端再重传一次连接请求。后来收到了确认,建立了连接。数据传输完毕后,就释放了连接,客户端共发出了两个连接请求报文段,其中第一个丢失,第二个到达了服务端,但是第一个丢失的报文段只是在某些网络结点长时间滞留了,延误到连接释放以后的某个时间才到达服务端,此时服务端误认为客户端又发出一次新的连接请求,于是就向客户端发出确认报文段,同意建立连接,不采用三次握手,只要服务端发出确认,就建立新的连接了,此时客户端忽略服务端发来的确认,也不发送数据,则服务端一致等待客户端发送数据,浪费资源。
问题起因分析
针对SYN Flood 的防护措施(伪造不存在的ip进行SYN发送,使其占用大量半连接队列)
第几次挥手 | FIN | ACK | seq | ack | 内容 |
---|---|---|---|---|---|
第一次挥手 | 1 | - | u | - | Client 发送一个 FIN,用来关闭 Client 到 Server 的数据传送,Client 进入 FIN_WAIT_1 状态 |
第二次挥手 | - | 1 | v | u+1 | Server 收到 FIN 后,发送给一个 ACK 给 Client,确认序号为收到序号+1(与 SYN 相同,一个 FIN 占用一个序号),Server 进入 CLOSE_WAIT 状态 |
第三次挥手 | 1 | 1 | w | u+1 | Server 发送一个 FIN,用来关闭 Server 到 Client 的数据传送,Server 进入 LAST_ACK状态; |
第四次挥手 | - | 1 | u+1 | w+1 | Client 收到 FIN 后,Client 进入TIME_WAIT状态,接着发送一个 ACK 给 Server,确认序号为收到序号+1,Server 进入CLOSED状态,完成四次挥手。 |
保证客户端发送的最后一个ACK报文段能够到达服务端。
这个ACK报文段有可能丢失,使得处于LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认,服务端超时重传FIN+ACK报文段,而客户端能在2MSL时间内收到这个重传的FIN+ACK报文段,接着客户端重传一次确认,重新启动2MSL计时器,最后客户端和服务端都进入到CLOSED状态,若客户端在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段后立即释放连接,则无法收到服务端重传的FIN+ACK报文段,所以不会再发送一次确认报文段,则服务端无法正常进入到CLOSED状态。防止“已失效的连接请求报文段”出现在本连接中。
客户端在发送完最后一个ACK报文段后,再经过2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失,使下一个新的连接中不会出现这种旧的连接请求报文段。对方关闭 socket 连接,我方忙于读或写,没有及时关闭连接
UDP结构
UDP特点- | TCP | UDP |
---|---|---|
是否连接 | 面向连接 | 无连接 |
是否可靠 | 可靠传输,使用流量控制和拥塞控制 | 不可靠传输,不使用流量控制和拥塞控制 |
连接对象个数 | 只能一对一通信 | 支持一对一,一对多,多对一和多对多通信 |
传输方式 | 面向字节流 | 面向报文 |
首部开销 | 首部最小20字节,最大60字节 | 小,仅8字节 |
适用场景 | 要求可靠传输的应用,例如文件传输 | 适用于实时应用,例如视频会议,视频直播 |
RTT 和 RTO
1XX:指示信息——表示请求已接受,继续处理。2XX:成功——表示请求已被成功接收、理解、接受。200 OK:正常返回信息。3XX:重定向——要完成请求必须进行更进一步的操作。301 Moved Permanently:永久重定向。302 Found:临时跳转。4XX:客户端错误——请求有语法错误或请求无法实现。400 Bad Request:客户端请求有语法错误,不能被服务器所理解。401 Unauthorized:请求未经授权。403 Forbidden:服务器收到请求,但是拒绝提供服务。404 Not Found:请求资源不存在。5XX:服务器端错误——服务器未能实现合法的请求。500 Internal Server Error:服务器发生了不可预期的错误。503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
Cookie 简介
Cookie 的设置以及发送过程
Session 简介Session的实现方式
Cookie和Session的区别
SSL(Security Sockets Layer,安全套接层)
HTTPS数据传输流程
HTTP和HTTPS的区别
HTTPS不一定安全
转载地址:http://uxjwi.baihongyu.com/