OSI七层协议理论比较完整,但既复杂又不实用。TCP/IP协议得到了广泛的应用。学习计算机网络时采用OSI和TCP/IP折中的方式,设计了一种只有五层协议的体系结构便于学习。
通过一台主机内进程间的交互来完成特定网络应用,包含的主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol),数据单位为报文。
提供的是两台主机中进程间的通用数据传输服务。由于应用层协议很多,定义通用的运输层协议就可以支持不断增多的应用层协议。
运输层包括两种协议:
提供面向连接、可靠的数据传输服务,数据单位为报文段;TCP 主要提供完整性服务。
提供无连接、尽最大努力的数据传输服务,数据单位为用户数据报。UDP 主要提供及时性服务。
为主机间提供数据传输服务,而运输层协议是为主机中的进程提供服务。网络层把运输层传递下来的报文段或者用户数据报封装成分组或包。在TCP/IP体系中,网络层使用IP协议,因此分组也叫做IP数据报。
网络层针对的还是主机之间的数据传输服务,而主机之间可以有很多链路,链路层协议就是为同一链路的结点之间提供服务。数据链路层把网络层传来的分组封装成帧,在两个相邻结点间的链路上传送帧。
考虑的是怎样在物理媒体上传输数据比特流,而不是指具体的物理媒体(传输媒体指双绞线、同轴电缆等)。物理层的作用是尽可能屏蔽传输媒体和通信手段的差异,使数据链路层感觉不到这些差异。
两个相同层次的层之间,好像把数据通过水平虚线直接传递给对方,就叫做对等层。
因为几个层次画在一起很像一个栈的结构。
实体是任何可发送或接收信息的硬件或软件进程。
协议是控制两个对等实体进行通信的规则的集合。
在协议的控制下,两个对等实体间的通信使得本层能够向上一层提供服务。要实现本协议,还需要使用下面一层所提供的服务。
协议是“水平的”,即协议是控制对等实体之间通信的规则。但服务是“垂直的”,即服务是由下层向上层通过层间接口提供的。
域名系统(Domain Name System缩写 DNS)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
超文本传输协议HTTP(HyperText Transfer Protocol),HTTP是面向事务的应用层协议。定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是万维网上能够可靠地交换文件的重要基础。
1、从原理性看:
GET用于信息获取,而且应该是安全的;POST请求表示可能修改服务器上资源的请求。
2、从表面上看:
GET请求的数据会附在URL后面,POST的数据放在HTTP包体,POST安全性比GET安全性高。
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
传输控制协议 TCP(Transmission Control Protocol)
用户数据报协议 UDP(User Datagram Protocol)
TCP提供面向连接的传输;UDP提供无连接的传输
TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输。
TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报的传输,没有分组开销。
TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制机制。
TCP只能是点对点的(一对一)。UDP支持一对一、一对多、多对一和多对多的交互通信。
每发送一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
让发送方的发送速率不要太快,要让接收方来得及接收。
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
四种算法:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JnEbxnPb-1603252392559)(https://pics1.baidu.com/feed/d8f9d72a6059252d20d93b0a6645fb3e59b5b9d2.jpeg?token=c86d4509157378798ebbccbe843486d1&s=9746F8123F5754CA48D574DA0300D0B2)]
三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。
防止第一次A向B的请求滞留在网络中,导致造成错误的连接。
即如果只有两次确认,第一次请求滞留在了网络中,在延误到以后的某个时间发给B后,B会直接进入已连接状态,者会造成问题。如果有最后一次确认,则在B收到滞留的请求并回复之后,A不会对B的回复做出回复,进而不会建立连接。
第一步:客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,表示要停止。其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。( TCP规定,FIN报文段即使不携带数据,也要消耗一个序号)
第二步:服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
第三步:服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四步:客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。
因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。但此时Server端还有部分数据需要发送。只有等到Server端所有的报文都发送完了,才能发送FIN报文,因此不能一起发送。故需要四步握手。
因为网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。如果Client立即关闭,则接收不到ACK丢失后Server重发的FIN报文。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Server如果没有收到ACK,将不断重复发送FIN片段。MSL指一个片段在网络中最大的存活时间,**2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,**则结束TCP连接。
A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位。A类适用的类型为大型网络,A类网络地址数量较少,有126个网络,每个网络支持的最大主机数为256的3次方-2=16777214台;
B类IP地址由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位。B类适用的类型为中型网络,B类网络地址数量适中,有16384个网络,每个网络支持的最大主机数为256的2次方-2=65534台;
C类IP地址由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位。C类适用的类型为小型网络,C类网络地址数量较多,有209万余个网络,适用于小规模的局域网络,每个网络支持的最大主机数为256的1次方-2=254台。
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,作为组播地址(一对多的通信)。
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。
受限的广播地址。一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。
是一个保留地址,意思是**“本网络”**。
网络号为127保留作为本地软件的环回地址,用于本地软件环回测试本主机的进程之间的通信。若主机发送一个目的地址为环回地址的IP数据包,则主机中的协议软件就处理数据报中的数据,而不会把数据报发送到其他网络。
不管网络有没有划分子网,只要把子网掩码和IP地址进行逐位的“与”运算,就可以得到网络地址。
A类IP地址的子网掩码为255.0.0.0
B类IP地址的子网掩码为255.255.0.0
C类IP地址的子网掩码为255.255.255.0
Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式,但是两者的应用场景不太一样。
Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端。
Cookie 存储在客户端中,而Session存储在服务器上,相对来说 Session 安全性更高。如果要在 Cookie 中存储一些敏感信息,不要直接写入 Cookie 中,最好能将 Cookie 信息加密然后使用到的时候再去服务器端解密。