网络专题
wǎng luò shí huāng 2021-06-01
network
http
tcp
珠峰讲的网络专题
# tcp
- 作者笔记在:https://gitee.com/wangluoshihuang/whongjiagou-learn/blob/master/turndownMarkdown/markdown/67-1-network.md 这是珠峰架构第2019年的笔记,笔记很全。
# 自己添加的笔记
- OSI七层模型:
- 应用层、表示层、会话层在tcp/ip中是一层。
- 这里也有讲这7层:
- https://zhuanlan.zhihu.com/p/32059190 这个讲得很好
- https://blog.csdn.net/qq_39521554/article/details/79894501
- https://www.jianshu.com/p/9b9438dff7a2
- 这里清晰的表示了各层做了生什么事情 (opens new window)
- 大白话讲这7层:https://chinese.freecodecamp.org/news/osi-model-networking-layers/
- 这个模型是一个概念上的模型,没有人去真正的实现它。工作中,我们常常使用的是tcp/ip5层模型。
- 数据链路层里讲到:早期我们的电脑使用总线拓扑连接,后来使用交换机(使用MAC地址)连接各个电脑。交换机和路由器的区别是什么? (opens new window)
- MAC地址的前3段是网卡生产商到MAc管理机构里面申请的,后面3段是厂家自己定义的。
- 交换机是处理数据链路层数据的,把一个MAC地址里的数据传递给另外一个MAC地址里面去。不涉及ip地址。
- 路由器:主要是处理ip地址的。 主要处理路由寻址的。
- NAT:(network address transform)网络地址转换。路由器里可能会发生这个动作。转换数据帧里数据的目的/源地址。
- 第3.2.5节:
- ARP是据IP地址获取物理地址的一个TCP/IP协议————根据ip地址获取MAC地址
- 怎么根据ip地址获取MAC地址:发信息的计算机怎么知道哪台计算机才是信息的目标
- 发信息的计算机会进行广播,一台一台的去询问是不是目标计算机。
- 怎么根据ip地址获取MAC地址:发信息的计算机怎么知道哪台计算机才是信息的目标
- ARP是据IP地址获取物理地址的一个TCP/IP协议————根据ip地址获取MAC地址
# http
- 作者的笔记在:https://gitee.com/wangluoshihuang/whongjiagou-learn/blob/master/turndownMarkdown/markdown/14.http-1.md https://gitee.com/wangluoshihuang/whongjiagou-learn/blob/master/turndownMarkdown/markdown/14.http-2.md
- 代码在:https://gitee.com/wangluoshihuang/whongjiagou-learn/tree/master/14.tcpip 这个文件夹
- newproject-master/newproject-master/note/zhufeng-blog/html/21.https.html的笔记以及http的笔记对应 珠峰>珠峰专题课>架构-专题-实战-项目-面试-其他-课>2854(计算机网络专题课)里的http课程。上面这些资料对应的课程是2018年的。
- 下面是新的课程:2020年的架构课————珠峰2020node-a阶段课 第 43节
- 笔记在:https://akaileyouyou.gitee.io/jg-vue/node/async-1.html#%E8%AF%BE%E7%A8%8B%E8%A7%84%E5%88%92 使用火狐等其他浏览器访问,因为谷歌不支持http等图片资源。
- 代码在:https://gitee.com/wangluoshihuang/zf2020jiagoukenode/tree/main
- http:通过传输层(TCP)扩展了一些自己的功能/标识/规定/规范。
- 例如:添加的规范有——请求是什么、 请求头是什么、数据是什么、报文。
- http2:keep-alive:多个请求可以复用tcp通道。
# 方法
http中的方法 遵守Restful风格——get(查询) post(添加) put/patch(修改) delete(删除)
一般的开发:强求路径 来区分对资源的操作 /addUser /removeUser /getUser
Restful风格开发: 可以通过方法来区分做什么操作。例如发送 get请求 访问/user时,就知道是拿数据;发送 post请求访问 /user时就知道是添加用户。
跨域请求:options 预检(预先检测)请求,跨域时才会携带(简单请求不会发送options请求——简单的有get、post,其他都是复杂请求。 如果用户添加了自定义信息也算复杂请求)
- 什么叫预检请求:在真的请求发出之前,发出一个请求检测当前请求是否被允许访问。这个是浏览器默认发送的。预检不通过不会发送后续的内容了。 复杂请求并且跨域 就会发生预检。 cookie不允许跨域 --- 预检不通过 不会发送后续的内容
http请求发出去后等待服务器返回结果,服务端不能主动推送消息
# 状态码 服务端跟浏览器商量好的
- 1xx websocket
- 2xx 200成功 204响应体为空 206(范围请求)
- 3xx 304(缓存)-这是服务端配置的 协商缓存 301永久重定向(访问百度 直接重定向到谷歌 域名迁移) 302临时重定向(pc 移动端的域名 发生跳转) 307重定向
- 4xx 400请求出错了/参数有问题 401没权限 403登录了权限不够 404找不到 405方法不允许(get请求 请求发的post)
- 5xx 服务端错误 502 503 504
# 通信 规则
- 客户端访问服务器 postman curl (命令行 curl -v http://www.baidu.com) http2 可以复用通道 静态资源可以用 不限制
# node里http模块的基本使用
- 参考代码:https://gitee.com/wangluoshihuang/zf2020jiagoukenode/blob/main/13.http/1.js
- 创建一个服务器:第22行。启动一个服务器:第59行。
- node端口,尽量使用4000以上,以防被端口被系统占用以及其他莫名奇怪的问题。http可用的端口有65535个。
- http里面的请求和响应都是流。
- 在后台我们拿不到前端路由里的hash,hash只能在前端处理。
- 数据的解析。
- 服务器响应的一些方法:
- 注意:响应行(响应协议、状态码等)、响应头、响应体的顺序从前往后依次写不能变化。