一.层次划分
OSI七层从下到上:物理层、数据链路层、网络层(ip、uucp)、传输层(tcp、udp)、会话层、表示层、应用层(文件传输,电子邮件,文件服务,虚拟终端http、smtp、ftp、dns、telnet、)
TCP/IP五层模型的协议:物理层、数据链路层、网络层、传输层、应用层
TCP支持的应用协议主要有:Telnet(远程登录)、FTP(文件传输协议)、SMTP(简单邮件传送协议)等;UDP支持的应用协议主要有NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议),TCP/IP协议与低层物理链路层和物理层无关
二.TCP和UDP协议
两者均为传输层协议,均是IP上层的协议。UDP是面向无连接的、不可靠的数据传输协议,仅将数据送至网络而不与远端建立连接;TCP则是面向连接的应用层协议,需要三次握手建立连接、四次挥手断开连接
三次握手:
建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。——————A的发送没有问题
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。——————————B的收取没有问题
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。————————————B的发送和A的收取没有问题,可以通信
完成三次握手,客户端与服务器开始传送数据。
四次挥手:
断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开
(1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 ——————A通知数据传输结束,要关闭连接
(2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。 ——————B通知收到结束标志
(3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 ——————收取完成后,关闭server端连接,B通知可以关闭
(4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。————————A通知结束
三.http协议
特点:
1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。
- 超文本传输协议,基于tcp/ip协议,需要客户端请求-服务端响应(断开连接后无需维护上一个连接的信息,释放了资源对请求的响应就快);
- 早期http协议一次连接只处理一次请求, 服务器处理完请求并收到客户端响应后断开连接,这样可以节省传输时间。HTTP 的设计者有意利用这种特点将协议设计为请求时建连接、请求完释放连接,以尽快将资源释放出来服务其他客户端。随着时间推移,网页变得越来越复杂,里面嵌有大量图片,每次访问图片都会建立一次TCP连接,就会显得低效。到http1.1版本引入了keep-Alive来解决低效问题,这样一次TCP连接就可以处理多次请求
- http协议也是一种无状态的协议,这意味着每次请求都是独立的,缺少状态也意味着如果后续处理需要前面的信息,那就必须重传。HTTP 协议这种特性优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。随着动态交互的web应用程序出现,http的无状态严重阻碍了这些应用程序的实现,因此出现了两种保持http连接状态的技术:cookie和session。cookie常用的两个场景:是否已登录和购物车
四.tcp/ip协议、http协议、websocket协议、socket区别
- tcp/ip协议-网络传输协议
- http协议-面向连接的应用层协议
- websocket协议-html5出的协议:
-http协议现有的keep-alive把http请求合并为一个,但不能解决即时通讯的问题:(即时通讯不仅需要客户端向服务端发送信息,还要服务端主动将消息传提到客户端)http协议一个required只能对应一个response,服务端是被动的。
-websocket是一种持久性协议,和http协议本身没有关系,但是借用了http协议来完成一部分握手
- socket是对TCP/IP协议的封装,即TCP/IP协议对程序员开放的编程接口,HTTP则提供了封装和显示数据的具体形式。socket被称为套接字,用于描述IP地址和通信端口,是一个通信链的句柄,可以实现不同虚拟机和计算机之间的通信。 在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。Socket编程基本就是服务器监听、客户端请求、连接确认即编程中create,listen,accept以及send,write等几个基本的操作