TCP/IP参考模型
四层结构:
网络层:
是整个协议栈的核心,负责把分组发送到目标网络或主机。定义了IP协议。功能:路由,异构网互连,拥塞控制。
A类:1.0.0.0-126.0.0.0,共126个; B类:128.0.0.0-191.255.255.255; C类:192.0.0.0-223.255.255.255;
ARP(Address Resolution Protocol)表:IP到MAC的映射,通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行;发送的是广播包。
路由表:IP地址可达范围的一张表,相当于是网络里的地图,负责三层的数据转发;
MAC地址表:MAC地址和交换机接口的逻辑关系表,负责二层的数据转发。
传输层:
负责端到端的会话。定义了TCP(面向连接,可靠的)和UDP(无连接的,不可靠的)两类协议。
应用层:
面向不同的网络应用引入了不同的应用层协议。如FTP(文件传输协议),TELNET(虚拟终端协议),HTTP(超文本传送协议)是基于TCP的;SNMP(电子邮件传输协议),TFTP(简单文件传输协议),NNTP(网上新闻传输协议)是基于UDP的。
socket
网络中的进程间通信,使用ip地址(网络层) + 协议(传输层) + 端口(传输层)唯一标识一个进程。
每个TCP、UDP数据段中都包含源端口和目标端口字段,Socket = IP地址+端口号,Socket pair = 客户IP+客户端口号+服务器IP+服务器端口号
socket本质是编程接口(API),即TCP/IP提供的网络开发接口。
套接字连接过程分为三个步骤:
- 服务器监听(服务器端处于等待连接的状态,实时监控网络状态)
- 客户端请求(客户端描述要连接的服务器套接字,向服务器发送请求)
- 连接确认(服务器接到连接请求,建立一个新线程,响应该请求)
tcp连接
三次握手 - 建立连接(使数据段的发送和接收同步)
- 客户端向服务器发送一个SYN J(同步标志位) (请求建立连接)
- 服务器向客户端响应一个SYN K,并对SYN J进行确认ACK J+1 (确认收到请求)
- 客户端再向服务器发一个确认ACK K+1 (确认收到确认请求)
四次握手 - 释放连接
- 一端调用close主动关闭连接,发送一个FIN M;
- 另一端接收到FIN M,执行被动关闭。它的接收也作为文件结束符传递给应用进程。(FIN的接收意味着应用进程在相应的连接上再也接收不到额外数据)
- 一段时间后,接收到文件结束符的应用进程调用close关闭它的socket。TCP也发送一个FIN N;
- 接收到这个FIN的源发送端TCP对它进行确认。
为什么建立连接是3次,释放连接是4次?
服务端在LISTEN状态下的SOCKET当收到SYN报文的建连请求后,
滑动窗口协议(可靠性和流量控制)
窗口”对应的是一段可以被发送者发送的字节序列,其连续的范围称之为“窗口”。
“滑动”则是指这段“允许发送的范围”是可以随着发送的过程而变化的,方式就是按顺序“滑动”。
TCP协议包括发送端和接收端,分别对应发送缓冲区和接收缓冲区。发送窗口是发送缓存中一部分。
- 已发送并收到确认的数据(不在发送窗口和缓冲区内)
- 已发送但未收到确认的数据(位于发送窗口之中)
- 允许发送但尚未发送的数据(位于发送窗口之中)
- 发送窗口外发送缓冲区内暂时不允许发送的数据
每次成功发送数据之后,发送窗口就会在发送缓冲区中按顺序移动,将新的数据包含到窗口中准备发送。
流量控制,主要是接收方传递信息给发送方,使其不要发送数据太快,是一种端到端的控制。返回的ACK中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。
拥塞控制,是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法是慢开始、拥塞控制;快重传、快恢复。
浏览器通信
同源策略(Same Origin Policy,SOP)是指浏览器请求的资源必须是同域名、同协议、同端口。不同源的客户端脚本(js,actionscript)在没有明确的授权的情况下不能读取对方的资源。
跨源资源(CrossOrigin Resources Sharing,CORS )是一种允许多种资源在一个web页面请求域之外的另一个域的资源的协议,是为了让AJAX能够跨域而生的。
内容安全策略(Content Security Policy,CSP)是一种白名单机制,限制网站中是否可以包含某来源的内容。
Oauth是一个关于授权的开放网络标准,相当于在客户端与服务器之间添加了一个授权层。