概述
计算机网络基础:
基础知识
1. 网络模型:
OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。
每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS
每一层的作用如下:
1.物理层:主要定义物理设备标准,他的主要作用是传输比特流,这一层的数据叫做比特
2.数据链路层:主要将从物理层接收到的数据进行mac地址的封装与解封装,这一层的数据叫做帧
3.网络层:主要将从下层接收到的数据进行IP地址的封装与解封装,常把这一层的数据叫做数据包
4.传输层:定义了一些传输数据的协议和端口号,主要是讲从下层接收的数据进行分段传输,这一层叫段
5.会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。
6.表示层:主要进行对接收的数据进行解释,加密与解密,压缩与解压缩等
7.应用层:终端应用
2. 常见状态码
200:请求成功
204:No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不包含实体的主体部分
206:表示客户端进行了范围请求,并且服务器执行了这部分GET请求,响应报文中包含Content-Range指定范围的实体内容
301:永久性重定向,表示请求的资源被分配了新的URL,之后应使用更改后的URL
302:临时重定向,表示请求的资源被分配了新的URL,希望本次使用更改后的URL
303:表示请求的资源被分配了新的URL,并明确表示使用GET方式获取资源
304:服务端已经执行了GET,但文件未变化。
307:临时重定向,与303有着相同的含义,307会遵守浏览器标准,不会从POST编程GET
400:表示请求报文中有语法错误
401:未经许可,需要http认证
403:服务器拒绝该访问(访问权限出现问题)
404:找不到
500:表示服务器在执行请求时发生错误
503:服务器暂时处于超负荷或正在停机的状态
3. 输入url后执行的流程
1.URL地址解析
2.DNS域名解析
3.客户端与服务端建立TCP 连接(三次握手)
4.把客户端信息(携带cookies)传递给服务端(发送HTTP请求)
5.服务端得到并处理请求(HTTP响应内容)
6.客户端渲染服务器返回的内容
7.和服务端断开TCP连接(四次挥手)
4. DNS解析过程
1.首先在本地域名服务器中查询IP地址
2.如果没有找到的情况下,本地域名服务器会向根域名服务器发送一个请求
3.如果根域名服务器也不存在该域名时,本地域名会向com顶级域名服务器发送一个请求,依次类推下去。
4.直到最后本地域名服务器得到google的IP地址并把它缓存到本地,供下次查询使用。
DNS缓存:
浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。
关于http
Http原理
介绍:无状态(客户机和服务器之间不需要建立持久的连接),请求->响应->关闭
4.4.1输入url后的解析:http://localhost.com:8080/index.html
1.从中分解出:协议号,主机名,端口,对象路径等部分
协议号:http 主机名:localhost 端口:8080 对象路径:/index.html
需要DNS解析域名localhost.com,得到主机的IP地址
2.封装HTTP请求数据包
把以上部分结合本机信息,封装成一个HTTP请求的数据包
3.封装成TCP包,建立TCP连接包
封装成TCP包,建立TCP连接(TCP的三层握手)
4.客户机发送请求命令
建立连接后,客户机发送一个请求给服务器,请求格式为:
统一资源标识符,协议版本号,MIME信息(请求修饰符,客户机信息和可内容)
5.服务器响应
服务器给予响应信息,其格式为一个状态行,包括:
信息的协议版本号,一个成功或错误的代码,MIME(服务器信息,实体信息,可能的内容)
6.服务器关闭TCP连接
服务器关闭TCP连接后,如果浏览器或者服务器在其头信息加入了Connection:keep-alive,TCP连接在发送后仍然将仍然保持打开状态,这样浏览器可以继续通过相同的连接发送请求。保持连接节省了每个请求建立新连接所需要的时间,还节约了带宽
HTTPS的原理
介绍:以安全为目标的HTTP通道,简单讲是HTTP安全版。既在HTTP下加入SSL层,HTTPS的安全基础是SSL,其所用的端口号是443
特点:主要依赖于三类基本算法:散列函数 、对称加密和非对称加密,其利用非对称加密实现身份认证和密钥协商,对称加密算法采用协商的密钥对数据加密,基于散列函数验证信息的完整性。
过程:
1.客户端先发起一个https请求,端口是443
2.服务器端把实现配置好的公钥证书返回给客户端
3.客户端验证公钥证书:比较是否在有效期内,证书的用户是不是匹配Client请求的站点,是不是在CRL吊销列表里面,他的上一级证书是否有效,这是一个递归过程,知道验证到根证书(操作系统内置的root证书或者client内置的root证书)。如果验证通过则继续,不通过则显示警告信息
4.客户端使用伪随机数生成器生成加密所使用的对称密钥,然后用证书的公钥加密这个对称密钥,发给服务端
5.服务端使用自己的私钥解密这个信息,得到对称密钥。
6.服务端使用对称密钥加密“明文内容A”,发送给客户端
7.客户端使用对称密钥解密响应密文,得到“明文内容A”
8.Client再次发起HTTPS的请求,使用对称密钥加密请求的“明文内容B”,然后Server使用对称密钥解密密文,得到“明文内容B”。
http和https有什么区别?
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。所以说,HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源。
- HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。
关于tcp
tcp的原理
tcp协议是端到端的传输控制协议,之所以"端对端"的协议,是因为路由是由IP协议负责的,TCP协议负责为两个通信端点提供可靠性保证
三次握手四次挥手
-
客户端–发送带有 SYN 标志的数据包–一次握手–服务端
-
服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端(确认序号为收到的序号加1 )
-
客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端(确认序号为收到的序号加1 )
-
客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
-
服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
-
服务器-关闭与客户端的连接,发送一个FIN给客户端
-
客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1
为什么连接关闭的时候是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
握手失败后的操作
1.首先查看tcp状态机变化
2.当失败时服务器会根据设定的重传定时器,重传ack报文
3.但是之后客户端的第三次握手的ack报文还是失败,超过了可允许重传的时间了
4.那么服务端就发送RTS报文段,自身进入CLOSED状态。
5.当客户端接收到RTS报文段后,也由established状态进入closed状态。这样做的目的是为了防止SYN洪泛攻击。
TCP 协议如何保证可靠传输
- 应用数据被分割成 TCP 认为最适合发送的数据块。
- TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
- 校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- TCP 的接收端会丢弃重复的数据。
- 流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)
- 拥塞控制: 当网络拥塞时,减少数据的发送。
- ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
- 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
可靠性通过以下方式来保证:
1.超时重传:TCP每发送出一个报文段后,都会启动一个定时器,对目的端传回的确认信息进行确认计时,超时后便重传。
2.确认信号:当TCP收到一个来自TCP的报文段后,便会发送回一个确认信号。
3.校验和:TCP将始终保持首部和数据的检验和,如果收到的报文段的检验和有差错,便将其丢弃,希望发送端超时重传。
4.重新排序:由于IP数据报的达到可能失序,因此TCP将会数据进行重新排序,以正确的顺序交给应用层。
5.丢弃重复:由于IP数据报有可能重复,因此TCP将会丢弃重复的数据。
6.流量控制:TCP连接的两端都有固定大小的缓冲区空间,TCP接受端只允许对端发送本端缓冲区能容纳的数据。
拥塞控制算法
-
慢启动算法
- 设定一个慢启动阀值:ssthresh
- 在刚加入网络开始传输数据的时候,cwnd=mss
- 每当收到一个新的ack确认报文段cwnd+=mss
- 每当过了一个RRT(发送接收的一个来回时间),cwnd=cwnd*2,成指数增长;
- 当cwnd超过ssthresh的时候,进入拥塞避免算法。
-
拥塞避免算法
- cwnd按线性增长,每经过一个RTT,cwnd+=mss;
-
快重传(这里第三节里已经讲过)
-
快恢复(配合快重传使用)
-
设置cwnd = sshthresh + 3 * MSS
-
重传Duplicated ACKs指定的数据包
-
如果再收到 duplicated Acks,那么cwnd = cwnd +1 (继续慢增长,等待是否有新的ack或者超时)
-
如果收到了新的Ack,那么,cwnd= sshthresh ,然后就进入了拥塞避免的算法了(说明已经进入网络正常阶段了)
-
简述 tcp 和 udp的区别?
tcp 和 udp 是 OSI 模型中的运输层中的协议。tcp 提供可靠的通信传输,而 udp 则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:
- tcp 面向连接,udp 面向非连接即发送数据前不需要建立链接;
- tcp 提供可靠的服务(数据传输),udp 无法保证;
- tcp 面向字节流,udp 面向报文;
- tcp 数据传输慢,udp 数据传输快;
关于 socket:
socket
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
前人已经给我们做了好多的事了,网络间的通信也就简单了许多,但毕竟还是有挺多工作要做的。以前听到Socket编程,觉得它是比较高深的编程知识,但是只要弄清Socket编程的工作原理,神秘的面纱也就揭开了。
一个生活中的场景。你要打电话给一个朋友,先拨号,朋友听到电话铃声后提起电话,这时你和你的朋友就建立起了连接,就可以讲话了。等交流结束,挂断电话结束此次交谈。 生活中的场景就解释了这工作原理,也许TCP/IP协议族就是诞生于生活中,这也不一定。
WebSocket
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。
HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。
最后
以上就是传统薯片为你收集整理的计算机网络基础知识归纳总结整理计算机网络基础:的全部内容,希望文章能够帮你解决计算机网络基础知识归纳总结整理计算机网络基础:所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复