一。网络模型服务器
OSI七层模型:自上至下依次是 应用层,表示层,会话层,传输层,网络层,数据链路层,物理层网络
应用层:具体的应用协议如HTTP、SMTP、FTP、TELNET、DNS等spa
表示层:针对数据格式,使应用程序不用关心各个主机中的数据格式接口
会话层:管理会话,针对通讯时机,肯定什么时候创建或断开链接路由
传输层:针对数据的传输和具体的创建或断开链接等,TCP、UDP协议开发
网络层:寻址和路由,实际上的数据传输任务由网络层完成(发送数据包),单位为包。路由器属于这一层同步
数据链路层:物理层上互连的节点之间通讯,如同一链路上的主机数据传输服务,单位为帧。交换机在这一层路由器
物理层:关注怎样在传输媒体上传输数据比特流,单位为比特。集线器在这一层请求
TCP/IP模型:自上至下依次是 应用层,传输层,网络层,链路层(网络接口层)程序
五层协议模型:自上而下依次是 应用层,传输层,网络层,数据链路层,物理层
二。TCP的三次握手
基于TCP的通讯中,在客户端和服务端进行通讯以前,须要进行三次握手以创建链接。
三次握手流程:
(1)客户端向服务端发送链接请求报文段(SYN包):SYN=1,seq=x
(2)服务端收到消息后向客户端发送确认应答和创建链接报文(SYN+ACK):SYN=1,ACK=1,seq=y,ack=x+1
(3)客户端收到消息后再向服务端发送确认应答报文段(ACK包):ACK=1,seq=x+1,ack=y+1
三次握手的做用:
(1)肯定客户端和接收端双方都已具备接收消息和发送消息的功能。
(2)防止已过时的链接请求报文段(如因阻塞而未及时到达)忽然发送到服务器,从而形成错误。
这也是为何不是两次握手的主要缘由。
ACK:1个字节,ACK=1时表示有效
ack:确认号,4个字节,表示但愿收到的下一个报文段中第一个字节的编号
SYN:同步包,SYN=1,ACK=1时表示赞成链接;SYN=1,ACK=0时表示链接请求
seq:序列号,用来标记数据段顺序,报文段中第一个字节的编号
三。TCP的四次挥手
基于TCP的通讯中,在客户端和服务端结束通讯以前,须要经过四次挥手来断开链接。
四次挥手流程:
(1)客户端向服务端发送请求断开链接(FIN包):FIN=1,seq=u
(2)服务端收到请求后回复确认应答(ACK包):ACK=1,seq=v,ack=u+1
(3)服务端向客户端发送请求以断开链接(FIN包):FIN=1,seq=w
(4)客户端收到请求后回复确认应答(ACK包):ACK=1,seq=u+1,ack=w+1
四次挥手的做用:
由于一方收到另外一方的断开链接消息(FIN报文)后,必须先回复一个确认消息(ACK报文),而后才能发送FIN报文
在收到FIN报文时,服务端的数据可能还没有彻底发送完毕,并不须要当即关闭链接。所以,FIN报文和ACK报文一般分开发送?
FIN:用来释放链接诶,FIN=1表示但愿断开链接
四。TCP与UDP的区别
TCP:面向链接的、可靠的、数据流协议(面向字节流,将数据看做一串无结构的字节流),
且TCP协议拥有顺序控制、超时重传、拥塞控制等机制;
只支持一对一通讯
UDP:无链接的、不可靠的(UDP只尽最大能力完成交付)、数据报协议(面向报文)
支持一对一,一对多,多对多通讯