七层模型
应用层
为操作系统或者网络应用程序提供网络服务的接口
表示层
解决不同系统之间的通信问题,负责数据格式的转换
会话层
自动收发包,自动寻址,负责建立和断开连接
传输层
将上层数据分段并提供端到端的,可靠的,不可靠的传输,处理差错控制和流量控制 网关
网络层
实现两个端系统的数据透明传输,包括寻址和路由选择,连接的建立,保持和终止 路由器
数据链路层
经来自网络层的数据可靠地传输到相邻节点的网络层,封装成帧,透明传输,差错检测 网桥,交换机,网卡
物理层
解决各种在传输媒体上传输比特0和1的问题 光纤,中继器
协议
应用层
FTP协议:文件传输协议,提供网络之家共享文件的协
Telnet协议:23端口,非安全通信协议,用于远程登录到计算机系统或设备的网络协议,明文通 过网络在主机之间传输数据
SSH协议:22端口,用于在网络上安全地进行远程访问和数据交换的协议,过加密的方式来保 护通信的机密性和完整性
Smtp协议:25端口,2525(备用端口)456(加密端口)简单邮件传输协议,向用户提供高效的邮件传输协议
DNS协议:域名解析系统,把URL解析为IP地址
Http协议:超文本传输协议
网络层
IP协议:负责将数据包从源主机发送到目标主机,通过ip地址作为为一标识,面向非连接
APR协议:根据ip地址获取物理地址协议的一个TCP/IP协议
RAPR协议:将局域网中某个主机的物理地址转化为IP地址
ICMP协议:支持路由器或主机进行差错报告和网络探寻,向源主机报告IP数据报和数据的差错
信息,只能报告,不能纠正
传输层
TCP/IP协议:TCP负责传输数据并且发现问题,一有问题发信号要求重新传输,IP是给每一个
设备一个地址
TCP协议:邮件传输,远程登陆,文件传输。ssh协议,http协议f,tp协议,telent协议
UDP协议:视频通话,在线游戏。dns协议,dhcp协议,snmp协议
UDP | TCP | |
连接 | 无连接 | 面向连接 |
速度 | 无需建立连接,速度较快 | 需要建立连接,速度较慢 |
目的主机 | 一对一,一对多 | 仅能一对一 |
带宽 | UDP报头短,消耗带宽更少 | 消耗更多的带宽 |
消息边界 | 有 | 无 |
可靠性 | 低 | 高 |
顺序 | 无序 | 有序 |
三次握手
SYN=1请求连接 FIN=1请求断开连接 seq=发送的数据包,ACK=1确认命令有效,ack=上一个seq+1
TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进入了 LISTEN 监听状态
第一次握手 TCP客户进程也是先创建传输控制块TCB,然后向服务器发出连接请求报文,这是报文首部中的同部位SYN=1,同时选择一个初始序列号 seq=x ,此时,TCP客户端进程进入了 SYN-SENT 同步已发送状态
第二次握手 TCP服务器收到请求报文后,如果同意连接,则会向客户端发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己初始化一个序列号 seq=y,此时,TCP服务器进程进入了 SYN-RCVD 同步收到状态
第三次握手 TCP客户端收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此时,TCP连接建立,客户端进入ESTABLISHED已建立连接状态 触发三次握手
为什么要进行第三次握手?
第一次握手: 客户端向服务器端发送报文
证明客户端的发送能力正常
第二次握手:服务器端接收到报文并向客户端发送报文
证明服务器端的接收能力、发送能力正常
第三次握手:客户端向服务器发送报文
证明客户端的接收能力正常
四次挥手
数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态
第二次挥手 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态
第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成
为什么客户端要等待2MSL?
主要原因是为了保证客户端发送那个的第一个ACK报文能到到服务器,因为这个ACK报文可能丢失,并且2MSL是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃,这样新的连接中不会出现旧连接的请求报文。