计算机网络知识点总结
路由器和交换机位于哪一层
路由器:网络层
交换机:数据链路层
滑动窗口的实现机制
发送方的四种数据
- Sent and Acknowledged:这些数据表示已经发送成功并已经被确认的数据,比如图中的前31个bytes,这些数据其实的位置是在窗口之外了,因为窗口内顺序最低的被确认之后,要移除窗口,实际上是窗口进行合拢,同时打开接收新的带发送的数据
- Send But Not Yet Acknowledged:这部分数据称为发送但没有被确认,数据被发送出去,没有收到接收端的ACK,认为并没有完成发送,这个属于窗口内的数据。
- Not Sent,Recipient Ready to Receive:这部分是尽快发送的数据,这部分数据已经被加载到缓存中,也就是窗口中了,等待发送,其实这个窗口是完全有接收方告知的,接收方告知还是能够接受这些包,所以发送方需要尽快的发送这些包
- Not Sent,Recipient Not Ready to Receive: 这些数据属于未发送,同时接收端也不允许发送的,因为这些数据已经超出了接受端所接收的范围
接收方的三种数据
- Received and ACK Not Send to Process:这部分数据属于接收了数据,已经回复了。但是还没有被上层的应用程序接收,也是被缓存在窗口内
- Received Not ACK: 已经接收并,但是还没有回复ACK,这些包可能输属于Delay ACK的范畴了
- Not Received:有空位,还没有被接收的数据。
IP和TCP传输的都是些什么数据
IP
头部分
IP版本,长度,服务类型,源/目的IP地址。偏移,校验和,TTL。
数据部分
TCP包
TCP
头部分
源/目的端口号,序号,确认号,6个标志位,校验和。
数据部分
应用层数据。
如何将一个长URL转换为一个短URL
- HashMap 短地址长地址一一对应(最烂)
- 短转长,但不存在逆运算(比较烂)
- hash后如果碰撞,后面加123;或者碰撞后多次hash(一般烂)
- 使用发号策略,长地址发号一个短地址。(最好)
- 使用MySQL的自增索引。比如0-9,a-z,A-Z实现62位进制的自增。保存可以用十进制,需要的时候转62位即可。
- 高并发可用:n个发号器,每个发号器每次增长n而不是1。
- 长查短:保存最近生成的一些对应关系,一定时间或者一定数量后开始淘汰。
- 跳转可以用301或者302。301可以减少服务器压力,302的话可以统计次数,原因见下。
分析一个URL各个字段的含义
协议://IP:端口/具体地址
如果没有http2.0 如何解决短连接问题
http状态码301和302的具体区别
在搜索引擎角度,301的话,前后两个网址的PageRank是不一样的,新网址需要重新累加PageRank。302的话前后网址视作和前面一样的同一个。排名也是。
对客户端来说,301的话,会永久记住新网址,如果加到书签,下次访问就是新的了。而302的话每次都得重新请求。
HTTP到HTTPS必须用301。
抓包工具的原理
抓包工具会在网络传输的某个层次或节点截获收发的数据
如http代理,chrome的network。
HTTP报文格式
http2.0针对http1.1的优化有哪些
HTTP/2 | HTTP1.1 | |
---|---|---|
传输协议 | 二进制 | 文本 |
头部信息 | 压缩 | 未压缩的文本 |
各字段长度 | 固定 | 不固定 |
多路复用 | 是 | 否 |
连接与请求的关系 | 单个连接可以发送多个请求和响应 | 只能一个 |
服务器推送 | 支持 | 否 |
http1.1的性能瓶颈
只能逐个顺序响应请求报文,前一个响应未完成就只能一直阻塞等待而无法传输下一个响应报文,这就白白浪费了TCP 连接的带宽资源,同时带来了队头阻塞问题。
重复传输臃肿的首部字段,降低了网络资源利用率。
各字段长度不固定,解析不容易。
只能客户端发起请求。
http1.1相比于http1.0的优化
- 持久连接
- 请求管道化,即流水线化,可以不用等待回复就发请求。
- 增加缓存处理(新的字段如cache-control)
- 增加Host字段、支持断点传输等
对称加密和非对称加密的区别,对称加密是如何保证安全性的
http1.1新增了哪几种请求方法
OPTIONS、PUT、PATCH、DELETE、TRACE 和CONNECT 方法
序号 | 方法 | 描述 |
---|---|---|
1 | GET | 请求指定的页面信息,并返回实体主体。是幂等的方法 |
2 | HEAD | 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头 |
3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。不是幂等的方法 |
4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。是幂等的方法 |
5 | DELETE | 请求服务器删除指定的页面。 |
6 | CONNECT | HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。 |
7 | OPTIONS | 允许客户端查看服务器的性能。 |
8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
9 | PATCH | 是对 PUT 方法的补充,用来对已知资源进行局部更新 。 |
http有哪些常见的请求方法 创建一篇文章用什么请求方法
应该用POST,因为文章创建了不能再创建,应该是非幂等的。
tcp怎么判断丢包
超时,或者接到对一个seq的包的连续3个ACK。
http协议中的cookie和session是什么
参考:http://www.ityouknow.com/it/2019/05/11/cookie-session.html
参考:https://segmentfault.com/a/1190000017831088
- cookie只是实现session的其中一种方案。虽然是最常用的,但并不是唯一的方法。禁用cookie后还有其他方法存储,比如放在url中
不要混淆 session 和 session 实现。
本来 session 是一个抽象概念,开发者为了实现中断和继续等操作,将 user agent 和 server 之间一对一的交互,抽象为“会话”,进而衍生出“会话状态”,也就是 session 的概念。
而 cookie 是一个实际存在的东西,http 协议中定义在 header 中的字段。可以认为是 session 的一种后端无状态实现。
而我们今天常说的 “session”,是为了绕开 cookie 的各种限制,通常借助 cookie 本身和后端存储实现的,一种更高级的会话状态实现。
所以 cookie 和 session,你可以认为是同一层次的概念,也可以认为是不同层次的概念。具体到实现,session 因为 session id 的存在,通常要借助 cookie 实现,但这并非必要,只能说是通用性较好的一种实现方案。
ping实现的原理
发送ICMP报文
什么是ICMP
ICMP协议的功能主要有:
- 确认IP包是否成功到达目标地址
- 通知在发送过程中IP包被丢弃的原因
tracert和ping命令用ICMP
为什么要三次握手
- 三次握手才可以阻止重复历史连接的初始化(主要原因)
- 三次握手才可以同步双方的初始序列号
- 三次握手才可以避免资源浪费
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!