物理层
物理层的设备:网卡,网线,集线器。
信道:有线信道,无线信道
物理层传输比特流
。
数据链路层
建立逻辑连接、进行硬件地址寻址
将比特组合成字节进而组合成帧,用MAC地址访问介质,MAC地址:每个网卡的唯一标识。
拥有Mac地址
知道谁是接收者,发送者。
网络层
定义IP。
规定网络地址的协议,叫做IP协议。IP协议第四版,IPv4,IPv6.
传输层
定义端口号。
两个熟知协议:TCP,UDP。
TCP面向连接的协议:会进行三次握手四次挥手是可靠的,会降低速度。
UDP拥有实时性,效率比TCP高。
会话层
会话层,是在发送方和接收方之间进行通信时创建、维持、之后终止或断开连接的地方,与电话通话有点相似。包含了一种称为检查点(Checkpoint) 的机制来维持可靠会话
表示层
安全,压缩,也是程序在网络中的一个翻译官。
应用层
ajax调用接口发送http请求,再比如域名系统DNS,邮件协议SMTP,webSocket长连接,SSH协议。常见如报文
TCP握手
通讯时三次握手,离开时四次挥手
seq(序列号),随机生成
ack(确认号),ack=seq+1
ACK(确认序列号有效)
SYN(发起新连接)
FIN(完成)
三次握手
- 第一次握手:客户端发送SYN建立连接,生成序列号seq(不一定为零)
- 第二次握手:服务端接收SYN+seq字段后,生成服务端seq会携带ACK确认号表示之前SYN收到,还会有一个小写Ack(发送过来的客户端seq+1)
- 第三次握手:客户端收到服务端响应后,会发送ACK确认序列号有效,还会发送seq(这里的seq会通过算法计算是否跟服务端ack值想等),会发送一个新的ack 是服务端seq值+1,确保正常
四次挥手
第一次挥手:客户端进行断开操作发送FIN包生成客户端的seq序列号,进入wait1状态。 第二次挥手:服务端收到FIN包进入关闭等待状态,向客户端使用ack验证(seq+1),验证成功打上ACK标记,生成服务端seq发送客户端,客户端进入wait2阶段,此时服务端可能还可以发送未完成数据。 第三次挥手:服务端完成所有任务后进入最后确认状态,向客户端发送FIN包,验证ack,使用客户端第一次的seq+1验证,验证成功打上ACK标记,生成一个新的序列号seq发送给客户端 第四次挥手:客户端进入超时等待状态 2MSL(1-4分钟),状态结束后,客户端向服务端发送ACK,确认序列号为seq+1,服务端进行断开
为什么需要超时等待时间?
为了保证服务端收到ACK包,假设如果没有2MSL的等待时间,ACK包丢失了,那服务端将永远不会断开连接,有了2MSL,如果一旦发生丢包将会进行超时重传,实现可靠连接。