一、计算机网络体系结构
因为最开始是为了在军事上防止一次打击就全部毁灭,所以TCP/IP 设计就是为了去中心化。
OSI 七层模型:应(用层)、表(示层)、会(话层)、传(输层)、网(络层)、数(据链路层)、物(理层)
TCP/IP 四层模型: (应用层)、(传输层)、(网络层)、(数据链路层)
二、TCP/IP协议族(上)
我们所说的 TCP/IP 其实是个协议族,并不单单说的 tcp 或者 ip 协议。覆盖最上层的 应用层(HTTP、DNS等)一直到 物理层。
严格来讲,3G、4G、5G 是哪一层?物理层
我们平时发送消息给对方整个过程可以用如下的图表示:
在应用层使用 UDP 自己实现连接和重传,可以加速网络速度,因为系统自带的 TCP 是很保守的。
三、TCP/IP协议族(下)
端口号是用于区分不同的应用的。属于传输层的东西。
TCP 可靠性是怎么保证的?超时重传,应答确认。正是因为设计之初为了保证若干物理线路被摧毁还能保证正常运行,所以相对而言还是挺复杂的。
流量控制:每次高速对方我最多能接收多少数据。
DNS 主要使用 UDP ,但是有时候也使用 TCP
四、三次握手建立连接
建立连接的三次握手:
客户端发起连接,SYN = 1 ,seq = x ,之后进入 SYN_SENT 状态
服务端收到后,返回 SYN = 1,ACK = 1,ack = x +1, seq = y ,之后进入 SYN_RCVD 状态
客户端收到后,返回 ACK = 1,ack = y + 1,之后客户端进入 ESTABLISHED 状态;服务端收到之后,也进入 ESTABLISHED 状态
其中,大写的 比如 SYN 、ACK 等都表示标记位,小写的如 ack、seq 等表示值
面试官:为什么是 3 次,不是 2 次或者 4 次?
首先回复三次握手的过程。之后,给出答案:通知对方序列号,并且确保对方已经收到。
SYN 洪泛攻击,虚假ip只发送第一次 syn 连接,由于服务器收到之后就进入到了 SYN_RCVD 状态,并且回复 ack 数据,但是永远得不到回复;所以解决的方案:1)无效连接的监控和释放 2) 防火墙处理,真正连接后才分配资源
抓包的原理: 操作系统允许你越过传输层和网络层,直接获取到 链路层 原始Socket的值
如果想了解更多 WebSocket 的内容《Html5 Websocket 权威指南》