网络通讯和TCP/IP协议
OSI七层模型与TCP/IP五层模型
OSI七层模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
各层的作用如上图所示。
由于OS较为学术化,实现起来比较复杂且运行效率较低,所以在市场方面失败了,而大范围使用过的TCP/IP五层模型却成功了
TCP/IP将前三层融合为一层。
应用层:应用层通过进程交互来完成特定的功能,比如HTTP协议。通过应用层相关协议,为开发者提供接口。
传输层:TCP UDP 协议,传输层协议为多台主机提供数据交互服务。
网络层:IP协议。使用IP协议标识数据发送的地址和数据接收的地址。
数据链路层:为物理层提供了比特流传输的功能,还提供了差错检测功能。
TCP五层可以对比计算机硬件便于记忆:将物理层可以理解为计算机硬件网卡,将数据链路层可以理解为网卡驱动,网络层可以理解为IP地址,传输层为TCP/UDP,而应用层则是HTTP。
TCP与UDP
一般来说TCP要比UDP可靠些,但是传输效率没用UDP效率高,因为TCP协议需要确认或给传输失败的消息进行重试操作,这些操作都会消耗性能,使得传输效率不如UDP效率高,但是可以满足可靠性。
对于UDP来说,它是不可靠传输,通常将消息发送出去就不管了,无论对方是否收到了消息,因为不需要保证可靠性,所以效率高些。
TCP/IP网络传输中的数据
首先由用户发送一串字符串,之后经过各层之后,添加各层的协议header信息,当另一台机器收到信息后,会根据之前传送的协议header信息逐层进行解析,最终解析出发送的字符串。
MAC地址
MAC地址为物理地址,数据链路层传输数据是需要MAC地址的,这时候就需要ARP网络协议,ARP网络协议可以根据IP地址解析所得MAC地址。
一般网络注册过程是由以下几个步骤进行注册的
首先根据MAC地址去DHCP服务器获取IP地址。
然后会将MAC地址和IP地址进行广播操作,告诉路由器MAC地址与IP地址信息。
端口
为什么端口数为65535个端口号
因为在TCP/UDP协议中有两个16位来标识目标地址和源地址的端口号。2^16=65536,其中端口号为0的端口有特殊用途,所以剩余端口数为65535个。
一台主机中并不是最多只有65535个端口号,只要IP地址不同,就可以创建任意多个端口号,如虚拟网卡等。
三次握手以及四次挥手
先发出请求的是服务端 后发送请求的是客户端
TCP字段标识着当前TCP的状态 每个bit标识着不同的状态
三次握手
三次握手的好处是可以保证连接的可靠性,第一次握手可以保证服务端可以接收到客户端的消息,第二次握手可以保证服务端能将消息正常发送到客户端中,第三次握手可以保证可以正常接受客户端的消息。
客户端就发送请求进行第一次握手时,会随机生成一个seq值并将SYN设置为1,除此之外还会将TCP客户状态切换为SYN-SEND同步已发送状态。
再进行第二次握手时,服务端会将SYN和ACK设置为1、也会随机生成一个seq并将第一次握手发送的seq + 1设置到ack中TCP状态切换到SYN-RCVD同步收到状态。
在进行第三握手时,会将确认位ACK设置为1并将ack设置为第二次握手的ack + 1 并将状态设置为RESTABLISHED已建立连接状态,之后就可以传输数据了。
洪范攻击
TCP在设计上是有缺陷的,在第一次握手成功后,服务端需要向客户端返回应答请求,这个应答请求是需要客户端的IP地址的,因为握手并没有完成,服务端需要维持连接。攻击者可以伪装这个IP来发送大量请将队列占满,队列如果满了,那么将会拒绝其他请求。
解决方式
- 释放连接,将长时间无法应答点连接失效掉。
- 防火墙,添加防火墙过滤恶意请求。
- 延缓TCB分配方法,TCP每建立一个连接就会分配TCB,可以将TCB分配延缓,只有在三次握手成功时才建立TCB
TCP的特性
全双工:客户端和服务端可以随时与对方传递数据,半双工则是只有一方向另一方传递数据。
TTL:TCP会计算一定阈值内的握手相应时间,根据算法将该时间计算出来,若请求时间到该时间还未响应则表示相应丢失,必须进行重传操作。
流量控制:滑动窗口就相当于缓存机制,当滑动窗口满时继续发送请求则会将其余请求就行丢弃,如果发送者发送的数据太快而接受者处理的数据太慢则会使滑动窗口占满,其他数据包只能进行丢失操作,解决方式就是在对数据包进行确认时携带一个变量告诉接收者流量窗口还剩几个格子,避免大量丢包,这个操作被称为流量控制。
四次挥手
第一次挥手:主动关闭方会发送请求到被动关闭方,告诉被动关闭方我要关闭连接。
第二次挥手:被动关闭方接受到请求后会做出响应,告诉主动关闭发我已经接受到你的关闭请求了,此时被关闭方还是可以向主动关闭方发送数据包。
第三次挥手:被动关闭方向主动关闭方发送请求,告诉主动关闭方要关闭了,并停止发送数据包了。
第四次请求:主动关闭方会接受到被关闭方的关闭请求,并做出响应,然后等@MSL之后关闭连接。
TCP 断开连接时为什么会有TIME WAIT状态
- 为了避免连接关闭的可靠性,如果在第四次挥手时直接将连接关闭的话,如果a发的数据包丢失的话,b端客户端需要进行重传操作,a端都已经关闭了,显然是没办法进行重传的,所以需要冗余时间来避免数据发送失败需要进行重传。
- 为了保证消息不被泄露,客户端b因为网络波动的原因而数据发送有些延迟,如果客户端a直接断开连接的话,此时有一个连接直接与断开的连接的端口号一致,那么消息则会发送到该tcp中,这样就会将消息泄露。
为什么会服务端频繁出现Time Wait错误
因为客户端创建大量连接,在使用完并没有进行关闭,这时候服务端会将对没有用的连接进行关闭,关闭的连接过多就会出现time wait。
UDP
单播
如果在UDP中指定了IP地址以及目的端口号,UDP将会点对点向客户端推送请求,与TCP不同在于,UDP无需进行消息确认,而TCP需要保证客户端接收到消息。
广播
如果未指定IP地址,则会对局域网中的局域网中的所有机器进行推送消息。
QUIC
QUIC集合了TCP的可靠性和UDP的传输效率,QUIC是基于UDP协议在应用层上进行开发。由于TCP在操作系统中内核和硬件固件中实现,修改TCP协议是件非常大的工程,需要修改各种操作系统,如Linux Windows Mac OS等。
QUIC的优势
多路复用
QUIC采用多路复用的思想,一个连接可以同时发送多个请求,各个请求之间互相独立,某个请求阻塞了完全不影响其他请求。
连接速度快
对比TCP需要三次握手,QUIC只需要1RTT便可以建立可靠连接,当建立连接后,在本地保存加密认证信息,下次访问时就可以根据加密认证信息直接连接,耗时0RTT。
采用 重传 机制
TCP采用重传机制,当进行丢包时,TCP需要一段延迟时间来判断是否发生了丢包,在这段时间中,数据传输是阻塞的。而QUIC会发送几个包和一个校验包,如果其中某个包丢失了,可以通过校验包和其他包进行恢复。
连接保存
QUIC在客户端保存;哦案件标识,当IP地址更换时,可以更快的恢复连接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2021-07-20 验证短信登录或注册
2021-07-20 统一异常处理