计算机网络基础知识
1.体系结构
物理层
物理层(physical layer)的作用是实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异,
数据链路层
将上层的数据,无比特差错的传输到相邻节点目标机网络层
三个基本问题:
- 封装成帧
- 透明传输
- 差错检测
网络层
实现在复杂的网络上,选择合适的网间路由和交换结点,让主机A尽可能的找到主机B
运输层
为进程之间提供端到端的逻辑通信
应用层
精确定义网络应用进程之间的通信规则,通过应用进程之间的交互来完成特定的互联网应用
2.TCP连接建立—三次握手
过程:
- 客户端A说:我要和你建立连接啦
- 服务端B说:可以,来连接吧
- 客户端A说:好,我们开始吧
为啥需要第三次握手
要不建立连接就太容易了
万一服务器B接收到一个**“失效的连接报文段”,服务器B就会傻傻的等待**客户端A发送数据,从而造成资源浪费。
所以最后一次握手,也说告诉服务器B,我是认真的(有效的),不是闹着玩的。
3.TCP连接释放—四次挥手
过程:
- 客户端A说:我没啥发的了,可以结束了
- 服务端B说:我知道了,等我把剩下的发完,就结束
- 服务端B说:我数据发完了,可以结束了
- 客户端A说:OK,那就结束吧
为啥最后还等2个MSL(Maximum Segment Lifitime)
- 防止出现服务器B无法正常关闭的情况,最后一个ACK报文段丢失,服务器B就认为它发出的释放报文段丢了,就会重新发,如果客户端没有等待2MSL,而是直接关闭,那服务器就会一直傻傻的发送释放报文段,从而无法正常关闭,浪费资源。
- 缓一缓,防止“已经失效的请求连接报文段出现在本次连接中。
TCP三次握手特定导致的SYN洪泛攻击
4.在浏览器中输入url地址 ->> 显示主页的过程(面试常客)
- 域名解析
- 建立TCP连接(三次握手)
- 向服务器发送HTTP请求
- 服务器处理请求
- 服务器返回一个HTML相应
- 浏览器接收到响应,开始渲染页面。
- 断开TCP连接(四次挥手)
细节
域名解析
浏览器搜索自己的DNS缓存(维护一张域名与IP地址的对应表)
若没有,则搜索操作系统中的DNS缓存(维护一张域名与IP地址的对应表)
若没有,则搜索操作系统的hosts文件(Windows环境下,维护一张域名与IP地址的对应表,位置一般在 C:\Windows\System32\drivers\etc\hosts)
若没有,则操作系统将域名发送至 本地域名服务器- -(递归查询方式),本地域名服务器 查询自己的DNS缓存,查找成功则返回结果,否则,(以下是迭代查询方式)
(1) 本地域名服务器 向根域名服务器(其虽然没有每个域名的具体信息,但存储了负责每个域,如com、net、org等的解析的顶级域名服务器的地址)发起请求,此处,根域名服务器返回com域的顶级域名服务器的地址
(2) 本地域名服务器 向com域的顶级域名服务器发起请求,返回baidu.com权限域名服务器(权限域名服务器,用来保存该区中的所有主机域名到IP地址的映射)地址
(3) 本地域名服务器 向baidu.com权限域名服务器发起请求,得到www.baidu.com的IP地址
本地域名服务器 将得到的IP地址返回给操作系统,同时自己也将IP地址缓存起来
操作系统将 IP 地址返回给浏览器,同时自己也将IP地址缓存起来
至此,浏览器已经得到了域名对应的IP地址
5.各个层的协议
6.TCP协议如何保证可靠传输
要解决四个问题:
- 有序的
- 无差错的
- 无遗漏的
- 稳定的
- 切块和编号:数据被分割成 TCP 认为最适合发送的数据块,并编号保证有序性。
- 校验和:保证数据无差错, TCP 将保持它首部和数据的检验和,一旦出错就丢弃
- 停止等待确认:发送方每一次发送数据之后都需要接收方进行确认。
- 超时就自动重传:ARQ协议,自动重传请求,在不可靠服务的基础上实现可靠的信息传输。
- 流量控制:滑动窗口机制,保证接收方来得及接收。
- 拥塞控制:网络堵塞
7.状态码
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
100 | Continue | 继续。客户端应继续其请求 |
101 | Switching Protocols | 切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议 |
200 | OK | 请求成功。一般用于GET与POST请求 |
201 | Created | 已创建。成功请求并创建了新的资源 |
202 | Accepted | 已接受。已经接受请求,但未处理完成 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动(临时重定向)。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
303 | See Other | 查看其它地址。与301类似。使用GET和POST请求查看 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求(爬虫常见) |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
URI与URL
URI是统一资源标识符,是一个抽象概念,只要能唯一标识这个资源就行。(身份证号)
URL是统一资源定位符,是一个具体的地址,根据这个地址,不仅能够唯一标识资源,还能找到它(身份证号+地址)
URL是URI的子集,是它的一种具体实现方式。