物理层
①定义物理设备的标准,比如网线的类型、光纤接口的类型、各种传输介质的传输速率;②传输比特流,将比特流(二进制数据)转换为电信号、光信号进行传输,到达目的地后再转换为比特流,即模数转换、数模转换。网卡就是工作在这一层的
数据链路层
①传输比特流时可能会发生错传、数据传输不完整的问题,数据链路层定义了如何格式化数据、如何访问物理机,提供错误检测、纠正的功能,确保传输的可靠性;②将比特数据组装成帧进行传输,交换机工作在这一层,交换机收到后对帧解码,根据帧中包含的物理机信息把帧发送给正确的接收方
网络层
①将网络地址(ip地址)翻译成对应的物理地址(mac地址),并决定数据如何从发送方路由到接收方,通过综合考虑发送优先权、网络拥塞程度、服务质量以及可选路由的时间花费,选择从发送方到接收方的最佳路径,路由器属于这一层,这一层的数据称为数据包,这一层的主要协议是tcp/ip中的ip协议
传输层
传输层是OSI7层模型中最重要的一层,解决了主机将的数据传输、传输质量问题。①基于流量控制、接收方可接收数据的快慢程度规定适当的发送速率,②按照网络传输的最大尺寸(带宽),将数据强制切割为较小的数据片,并对数据片编号,接收方收到数据片后根据编号排序,组装数据片得到完整数据。这一层的主要协议是tcp/ip中的tcp、udp协议
会话层
管理应用程序之间的通信,自动收发包、自动寻址
表示层
进行数据的格式化、编码解码、加密解密、压缩解压
应用层
规定发送方、接收方必须使用固定长度的消息头,消息头必须含有指定部分,消息头必须记录消息体的数据长度等信息,以使应用更加方便地使用接收到的数据。这一层的主要协议是tcp/ip中的http协议
TCP/IP是一个协议簇,不仅仅是TCP、IP协议。OSI相当于网络通信的规范,侧重于理论设计,TCP/IP相当于具体实现,侧重于实现。
处理头部数据:发送方自上而下,接收方自下而上。
ip协议负责将数据包路由到目的地,但ip协议没有确认数据包是否按顺序发送、是否被破坏,ip协议是不可靠的,需要由上层协议来做出控制。
TCP是一种传输控制协议
ip唯一标识主机,port唯一标识主机上的程序,ip、port共同组成套接字(socket)。
序号即数据包的编号,用于确认数据包是否丢失。滑动窗口用于控制流量、数据发送速率。校验和用于确认数据包中的数据是否无误。
为什么需要3次握手才能建立起连接?
为了初始化Sequence Number,通信双方都要告知对方自己的Sequence Number值,这个值要作为后续数据通信的序号,tcp用这个值来拼接数据、保证接收到的数据不会乱序。
4次挥手由客户端、服务端任一方的close()触发。
为什么需要4次挥手才能断开连接?
因为tcp是全双工的,发送方、接收方都需要FIN报文、ACK报文,2*2=4。全双工:双方都可以发送数据、接收数据,半双工:只能一方发送、一方接收。
为什么会有TIME_WAIT状态?
查看TIME_WAIT、CLOSE_WAIT、FIN_WAIT、ESTABLISHED"的数量
netstat -n | awk '/^tcp/{++S[$NF]}END{for(a in S) print a,S[a]}'
服务器出现大量TIME_WAIT状态的原因?
客户端关闭socket,服务器忙于读、写,没有及时关闭连接。解决方式:
http是超文本传输协议
http不能保持连接状态,用会话保存用户信息,常用的会话技术有2种:Cookie、Session。
Cookie
当用户访问某个网站时,服务器用cookie存储用户信息,把cookie放在响应头中传给浏览器,浏览器把cookie存储到本地计算机上。当用户再次访问该网站时,浏览器自动在请求头中加上该网站的cookie,cookie随http请求一起发送给该网站的服务器,服务器解析请求头中的cookie,获取用户信息。
Session
使用session对象存储会话信息,保存在服务器内存中,使用SessionId来唯一标识一个session对象 ,SessionId通过Cookie技术进行存储。服务器自动把SessionId放到cookie中保存到浏览器上,浏览器访问网站时自动在http请求头中携带该网站的cookie,服务器自动从请求头的cookie中获取SessionID,确定对应的session对象。
session超时:如果客户端、服务器在指定时间(默认30min)内未进行过通信,服务器会自动删除内存中对应的session对象。如果session中可能有需要持久化的数据,应该设置监听,session超时时自动持久化session中的数据到数据库。
Cookie、Sessio的比较
http请求发送的数据、http响应返回的数据很容易被截获,https是安全版的http,在http的基础上增加了安全防护。
ssl (安全套接层)是为网络通信安全、数据完整性提供的一种协议,是操作系统对外提供的API,ssl3.0后更名为tls,ssl采用身份验证、数据加密保证网络通信的安全、数据的完整性。
加密方式
单一使用某种加密算法不安全,https使用加密算法+证书的方式。
http、https的区别
https比http安全很多,但不是绝对安全。
相比于http1.x,http2.0支持多路复用,可以在一个http连接上发送多次请求,极大地提高了性能。
IP是网络层协议,TCP、UDP是传输层协议,HTTP是应用层协议。
http可以显式指定是否建立长连接 Connection:keep-alive,http1.1默认进行长连接。