在开始之前,我们来回顾一下七层、四层、五层网络模型
网络层次划分#
物理层(Physical Layer)#
该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输
数据链路层(Data Link Layer)#
数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层。
网络层(Network Layer)#
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。如果您想用尽量少的词来记住网络层,那就是"路径选择、路由及逻辑寻址"。
传输层(Transport Layer)#
在这一层,信息传送的协议数据单元称为段或报文。 网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
会话层#
会话层管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
表示层#
表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
应用层#
为操作系统或网络程序提供访问网络服务的接口
TCP/IP协议#
TCP协议的三次握手和四次挥手#
注:seq:"sequance"序列号;ack:"acknowledge"确认号;SYN:"synchronize"请求同步标志;;ACK:"acknowledge"确认标志";FIN:"Finally"结束标志。
TCP建立连接过程:#
首先Client端发送连接请求报文,Server端接收连接后回复ACK,并为这次连接分配资源。client端接收到ACK报文之后也向server端发送ACK,并分配了资源,这样TCP就建立了。
TCP断开连接过程#
假设client端发起中断连接请求,也就是发送FIN报文。server端接到FIN报文后,意思是说“我client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不急关闭socket,可以继续发送数据。 所以你先发送ACK,“告诉client端,你的请求我收到了,但是我还没准备好,请你继续等我的消息”。这个时候client端就进入FIN_WAIT状态,继续等待server端的FIN报文。当server端确定数据已发送完成,则向client端发送FIN报文,“告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。client端收到FIN报文后,“就知道可以关闭连接了,但是他还是不相信网络,怕server端不知道要关闭,所以发送ACK后进入了TIME_WAIT状态,如果server端没有收到ACK则可以重传”。server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明server端已经正常关闭,那好,我client端也可以关闭连接。TCP连接就这样关闭了!
为什么要三次握手#
在只有两次“握手”的情形下,假设client想跟server建立连接,但是却因为中途连接请求的数据报丢失了,故client端不得不重新发送一遍;这个时候server端仅收到一个接连接请求,因此可以正常的建立连接。但是,有时候client端重新发送请求不是因为数据报丢失,而是有可能是因为网络并发量很大的某个节点阻塞了,这种情形下server端将收到2次请求,极端的情况可能由client端多次重新发送请求数据而导致server端最后建立N个多响应在等待,因此造成极大的资源浪费!所以,三次“握手”很有必要!
为什么要四次挥手#
试想一下,假如现在你是客户端你想断开跟server的所有连接改怎么做?第一步,你自己先停止向server端发送数据,并等待server的回复。但事情还没有完,虽然你自身不往server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故server端还得终止主动向你发送数据,并等待你的确认,其实,说白了就是保证双方的一个合约的完整执行!
UDP协议#
UDP用户数据报协议,是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。
UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。
HTTP协议#
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
HTTP 协议包括哪些请求?#
GET:请求读取由URL所标志的信息。
POST:给服务器添加信息(如注释)。
PUT:在给定的URL下存储一个文档。
DELETE:删除给定的URL所标志的资源。
HTTP和HTTPS区别#
1.url请求时的Http://和HTTPS://
2.Http是明文的,HTTPS是对传输的数据加密
3.HTTP是应用层,HTTPS是在传输层的
4.HTTP不需要证书,HTTPS是需要CA机构签发的证书
5.HTTP是不安全的,HTTPS是安全的
6.HTTP默认端口是80,HTTPS默认端口是443
GET和POST的区别#
1.GET方法是将参数加入到url中,而POST的参数是在请求体中
2.GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http;header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
3.GET是有长度限制,POST相对来说是无限制的
4.GET只能请求ASCLL字符,POST没有限制