多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# TCP/IP 协议 ## 传输层 链路层,网络层,传输层,应用层。 - 应用层:常用的Http 通过Http协议设置相关数据,比如请求行,请求头,请求方法,请求体,请求参数等等(Https:Http+SSL,是在应用层和传输层之间对请求数据进行加密处理,和Http相比安全有证书的验证) - 传输层:传输层是面向通信的最高层,也是用户功能的最底层。复用和分发,在发送端多个进程可复用一个传输层,在接收端为不同主机的不同进程进行分发数据。其中使用TCP协议、UDP协议等。 - 网络层:使用IP协议,这里面的IP协议不是指IP地址,IP协议包含IP地址和计算机的MAC地址,IP协议能够通过IP地址和MAC地址准确的找到你需求请求的服务器 - 物理层:就是我们平时接触的网卡和网卡的驱动程序等。 ## 二、三次握手 > [参考链接](https://www.cnblogs.com/laowz/p/6947539.html) ### 两个序号和三个标志位: (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。 (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接。 (F)FIN:释放一个连接。 ### 建立新连接过程 客户端 -> SYN=1,seq=x -> 服务端 客户端 <- SYN=1,ACK=1,seq=y,ack=x+1 <- 服务端 客户端 -> ACK=1,seq=x+1,ack=y+1 -> 服务端 > seq 为单方面消息序列号,ack为单方面待收消息序列号。 ## 三、四次挥手 ### 断开连接过程 client -> FIN=m -> server client <- ack=m+1 <- server client <- FIN=n <- server client -> ACK=1,ack n+1 -> server ### 为什么建立连接是三次握手,而关闭连接却是四次挥手呢? 这是因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据, 己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后, 再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。