声明:转载还得加上链接麻烦,这只是整理自己要的东西,忘记了回头看看,顺便让大家了解了解,如果有什么侵权,请联系我,我会删除,谢谢理解
1.网络层次划分
TCP/IP从下往上:物理层、数据链路层、网络层、传输层、应用层
OSI七层网络模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
物理层
这一层为上层协议提供一个传输数据的可靠物理媒体,简单的说,物理层确保原始的数据可在各种物理媒体上传输。
重要设备:中继器和集线器
数据链路层
数据块称为帧,帧是数据链路层的传送单位。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发。
数据链路层为网络层提供可靠的数据传输,主要协议是:以太网协议。
重要设备:网桥和交换机。
网络层
网络层负责对子网间的数据包进行路由选择,可以实现拥塞控制和网际互连功能。
基本数据单位为IP数据报。包含的协议有:IP协议、ICMP协议、ARP协议
重要设备:路由器。
传输层
将上层数据分段并提供端到端的、可靠的或不可靠的传输。
包含的协议有:TCP协议(面向连接的、可靠的、基于字节流的传输层通信协议,确认机制、超时重传机)、UDP协议(提供简单的非连接传输层服务、面向报文)
重要设备:网关
应用层
数据传输的基本单位为报文。就是访问网络服务的接口。
主要协议:FTP文件传送协议、Telnet远程登录协议、SMTP邮件传送。。。
2.TCP/IP协议
网络层的IP协议,传输层的TCP协议。TCP负责发现传输问题,确保数据安全正确传输到目的地。IP是给每一个设备规定一个地址。
TCP三次握手和四次挥手
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端也可以关闭连接了。Ok,TCP连接就这样关闭了!
为什么要三次挥手?
在只有两次“握手”的情形下,假设Client想跟Server建立连接,但是却因为中途连接请求的数据报丢失了,故Client端不得不重新发送一遍;这个时候Server端仅收到一个连接请求,因此可以正常的建立连接。但是,有时候Client端重新发送请求不是因为数据报丢失了,而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了,这种情形下Server端将先后收到2次请求,并持续等待两个Client请求向他发送数据...问题就在这里,Cient端实际上只有一次请求,而Server端却有2个响应,极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待,因而造成极大的资源浪费!所以,“三次握手”很有必要!
为什么要四次挥手?
试想一下,假如现在你是客户端你想断开跟Server的所有连接该怎么做?第一步,你自己先停止向Server端发送数据,并等待Server的回复。但事情还没有完,虽然你自身不往Server发送数据了,但是因为你们之前已经建立好平等的连接了,所以此时他也有主动权向你发送数据;故Server端还得终止主动向你发送数据,并等待你的确认。其实,说白了就是保证双方的一个合约的完整执行!
3.UDP协议
udp是用户数据报协议,面向无连接的通讯协议。属于不可靠连接。
TCP 与 UDP 的区别:TCP是面向连接的,可靠的字节流服务;UDP是面向无连接的,不可靠的数据报服务。
4.HTTP协议
https详解:看了很明白 插眼
https://blog.csdn.net/guolin_blog/article/details/104546558?ops_request_misc=%7B%22request%5Fid%22%3A%22159369977419724843327676%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=159369977419724843327676&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-104546558.first_rank_ecpm_v3_pc_rank_v4&utm_term=https
http2和http1的区别对比
相比 HTTP/1.x,HTTP/2 在底层传输做了很大的改动和优化: - HTTP/2 采用二进制格式传输数据,而非 HTTP/1.x 的文本格式。二进制格式在协议的解析和优化扩展上带来更多的优势和可能。 - HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。头压缩能够很好的解决该问题。 - 多路复用,直白的说就是所有的请求都是通过一个 TCP 连接并发完成。HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline 至今也没有被普及应用,而 HTTP/2 做到了真正的并发请求。同时,流还支持优先级和流量控制。 - Server Push:服务端能够更快的把资源推送给客户端。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 再发送这些请求。当客户端需要的时候,它已经在客户端了。