小林code

1.基础篇

应用层

  • 只需要专注于给用户提供应用功能,比如HTTP,FTP,Telnet,DNS等

  • 分层模型中只有应用层是用户态,其他都是在内核态中进行工作

传输层

  • 为应用层提供网络支持

TCP

  • 传输控制协议,大部分应用正是采用该协议,比如HTTP协议,TCP比UDP多了一些特性,比如流量控制,超时重传,拥塞机制等,

  • 目的是为了保证数据包能有效的传输给对方

  • 如果传输的数据包超过了TCP最大报文长度,需要分块进行传输,这个块就叫做TCP段

UDP

  • 更加简单,只需要考虑把数据包发送出去,不保证对方是否能够接受到,所以这点上UDP不是一个可靠的传输。

  • 优点:实时性更好,传输效率也更高

端口

  • 因为一个设备可能有多个应用在接受和发送数据,所以才需要设置多个端口

  • 80一般用于Web服务器,而22通常是用于登录远程服务器用的

网络层

  • 网络层最常用的是IP协议,他会将传输层的报文作为传输数据,再加上IP包头组成IP报文

  • 如果IP报文超过了MTU,此时就会再次进行分片,得到一个即将发送到网络的IP报文

  • 为了实现设备之间的寻址:有了IPv4这样的协议:(e.g. 127.0.0.1)

  • IP地址:网络号(用于标识IP地址是属于哪一个子网的)+主机号(用于标识子网下的不同主机)

    • 网络号 = ip地址&子网掩码

    • 主机号 = ip地址&子网掩码取反

  • IP协议的另一个作用:路由(路由器看到IP地址的网络号就可以进行转发)

网络接口层

  • 网络接口层在IP头部的前面加上MAC头部,并封装成数据帧发送到网络上

  • 以太网是一种在局域网内,把附近的设备连接起来,让他们可以进行通讯

  • 以太网在判断包目的地时和ip的方式不同,所以需要MAC地址,而不是IP地址

  • MAC头部是以太网使用的头部,它包括接收方和发送方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址

  • 所以,网络接口层主要是为网络层提供链路级别的传输服务,负责在以太网、WiFi这样的底层网络上发送原始数据包

2.应用层

HTTP基本概念

HTTP是什么

  • 超文本传输协议:即超越了普通文本的文本(文字、图片、视频等混合体)拥有超链接,能从一个超文本跳转到另一个超文本

  • 定义了计算机世界中超文本数据的约定和规范

HTTP状态码

  • 2开头:200(请求成功) 202(请求成功,无body)206(成功,但部分资源)
  • 3开头:301(资源删除,url重定向)302(临时重定向,url)304(缓存重定向)
  • 4开头:401(请求报文有误) 403(服务器禁止该访问) 404(资源不存在)
  • 5开头:500(服务器混乱) 501(暂不支持)502(服务器正常,访问出错) 503(服务器繁忙)

HTTP常见字段

  • Host: www.A.com 可以将请求发往同一台服务器上的不同网站。
  • Content-Length: 1000 告诉浏览器本次服务器返回的数据长度是1000字节
  • Connection: Keep-Alive 使用HTTP长连接机制,任意一端没有明确提出断开连接,则保持TCP连接状态
  • Content-Type: text/html; Charset=utf-8 服务器告诉客户端这次数据是什么格式
  • Accept: */* 客户端指定需要接受的数据格式
  • Content-Encoding: gzip 表示服务器返回的数据使用了什么压缩格式
  • Accpet-Encoding: gzip, deflate 客户端在请求时表示接受哪些压缩方法

GET和POST

GET和POST的区别

  • GET的意思是从服务器获取指定的资源

  • POST的意思是根据请求负荷(报文body)对指定资源做出处理

GET和POST是安全和幂等的吗

  • 安全:请求方法不会破坏服务器上的资源

    • Get方法是安全的,而POST不是,POST会更改服务器上的资源
  • 幂等:多次进行相同的操作,结果都是相同的

    • GET方法是幂等的,请求的数据可以被作为缓存,在浏览器上,也可以存在代理上,而且浏览器上的GET请求可以被保存为书签
    • POST多次提交数据就会创建多个资源,所以是不幂等的。所以浏览器一般不会缓存POST请求,也不能把POST请求保存为书签

HTTP缓存技术

HTTP缓存有哪些实现方式

  • 对于一些重复性的HTTP来说的话,每次请求得到的数据都是一致的,所以可以把这些数据都缓存在本地,那么下次就再进行资源访问就可以直接访问本地的资源:通过HTTP的一些头部字段

  • 实现方式:强制缓存协商缓存

强制缓存

强缓存是利用两个HTTP相应头部字段实现的,都用来表示资源在客户端缓存的有效期,在size项中标识的是from disk cache,就是使用了强制缓存

  • Cache-Control 相对时间
  • Expires 这是一个绝对时间

协商缓存

  • 响应码304就表示 了在告诉浏览器可以使用本地缓存的资源,通常这种通过服务端告知客户端是否可以使用缓存的方式被称作协商缓存

  • 实现方式:两种

    • 请求头部中的If-Modified-Since字段与响应头部中的Last-Modified字段实现

    • 请求头部中的If-None-Match字段与响应头部中的ETag字段。(优先级跟高)

  • 而且,协商缓存这两个字段都需要配合强制缓存中Cache-Control字段来使用,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求

HTTP特性

HTTP/1.1 优点有哪些?

  • 简单:基本的报文格式就是head + body 头部信息也是key-value简单文本的形式,易于理解,降低了学习和使用的门槛

  • 灵活和易于拓展:HTTP协议里的各类请求方法等,都允许开发人员自定义和补充

    • HTTPS就是在HTTP和TCP层之间增加了SSL/TLS安全传输层
    • HTTP/1.1和HTTP/2.0 传输协议使用的是TCP协议,而到了HTTP/3.0使用的是UDP协议
  • 应用广泛和跨平台

HTTP/1.1的缺点

  • 无状态:

    • 服务器不会去记忆HTTP的状态,所以不需要额外的资源来记录状态信息,这样能减轻服务器的负担,把更多的CPU和内存用来提供对外服务

    • 执行关联性操作时会非常麻烦:解决办法:Cookies技术

  • 明文传输:信息毫无隐私

  • 不安全

HTTP/1.1的性能如何

  • 长连接:

    • 减少了TCP连接时需要的重复建立和断开连接所造成的额外开销,减轻了服务器端的负载

    • 特定:只要任意一端没有明确提出断开连接,则保持TCP连接状态

  • 管道网络传输:

3.传输层

TCP基本认识

TCP建立连接

TCP断开连接

Socket编程

4.网络层