计算机网络

计算机网络

网络模型

OSI 开放系统互连参考模型(7层)

TCP/IP 传输控制协议/网际协议参考模型(5层)

TCP/IP(4层)

img

传输层

描述

传输层的两个重要协议是用户数据报协议 UDP传输控制协议 TCP

UDP 的主要特点是

  1. 无连接
  2. 尽最大努力交付
  3. 面向报文
  4. 无拥塞控制
  5. 支持一对一,一对多,多对一和多对多的交互通信
  6. 首部开销小(只有四个字段:源端口,目的端口,长度和检验和)

TCP 的主要特点是

  1. 面向连接
  2. 每一条 TCP 连接只能是一对一的
  3. 提供可靠交付
  4. 提供全双工通信
  5. 面向字节流

TCP

  • TCP 用主机的 IP 地址加上主机上的端口号作为 TCP 连接的端点。这样的端点就叫做套接字(socket)或插口。套接字用(IP 地址:端口号)来表示。每一条 TCP 连接唯一被通信两端的两个端点所确定
  • 网络层为主机提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。
  • 运输连接的三个阶段,即:连接建立数据传送连接释放
  • 主动发起 TCP 连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器TCP 连接采用三报文握手机制(三次握手)。服务器要确认用户的连接请求,然后客户要对服务器的确认进行确认。
  • TCP 的连接释放采用四报文握手机制(四次挥手)。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送时,则发送连接释放通知,对方确认后就完全关闭了 TCP 连接 。

三次握手

第一次握手

建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认。

第二次握手

服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

第三次握手

客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

四次挥手

第一次挥手

首先客户端想要释放连接,向服务器端发送一段TCP报文

第二次挥手

服务器端接收到从客户端发出的TCP报文之后,确认了客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文

第三次挥手

服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文

第四次挥手

客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文

网络通信三要素

IP地址

网络中计算机的唯一标识,不易记忆,可用主机名。

端口号

用于标识进程的逻辑地址,不同进程的标识,netstat -ano
用来唯一标识一个进程。每一个程序都要有一个端口号。

传输协议

通讯的规则常见协议:TCP(传输控制协议),UDP(数据报协议)。

URL

简述

URL 统一资源定位符的简称,Uniform Resource Locator,常常被称为网址,是因特网上标准的资源地址。

https://www.baidu.com/s?tn=baidu&bar=&wd=TianTian#anchor

这个URL中,https就是协议,www.baidu.com就是域名,默认端口是443,/s就是请求的path,tn=baidu&bar=&wd=TianTian这个就是query(查询参数)

  • URL 只能使用 ASCII 字符集来通过因特网进行发送。

  • 由于 URL 常常会包含 ASCII 集合之外的字符,URL 必须转换为有效的 ASCII 格式。

  • URL 编码使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 字符。

  • URL 不能包含空格。URL 编码通常使用 + 来替换空格。

URL的构成

名称 功能
scheme 访问服务器以获取资源时要使用哪种协议,比如:http,https 和 FTP 等
host HTTP 服务器的 IP 地址或者域名
port HTTP 服务器的默认端口是 80,HTTPS默认端口是443,这种情况下端口号可以省略,如果使用了别的端口,必须指明。不同的端口,你可以认为是不同的应用程序。
path 访问资源的路径
query-string 发给 http 服务器的数据(参数)。从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。
anchor 锚点:从“#”开始到最后,都是锚部分,#是用来指导浏览器动作的,#后面的字符串,都会被浏览器解析为位置标识符。

HTTP请求报文和响应报文

HTTP 报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的响应。它们由三个部分组成:对报文进行描述的 起始行(start line)、包含属性的 首部(header) 块,以及可选的包含数据的 主体(body) 部分。

HTTP-message   = start-line(起始行 )
                *( header-field CRLF )(头部)
              CRLF(空行)
              [ message-body ](数据体)

HTTP状态码

1xx 信息类

接受的请求正在处理,信息类状态码

2xx 成功

  • 200 OK 表示从客户端发来的请求在服务器端被正确请求。

  • 204 No content,表示请求成功,但没有资源可返回。

  • 206 Partial Content,该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的 GET 请求 响应报文中包含由 「Content-Range」 指定范围的实体内容。

3xx 重定向

  • 301 moved permanently,永久性重定向,表示资源已被分配了新的 URL,这时应该按 Location 首部字段提示的 URI 重新保存。

  • 302 found,临时性重定向,表示资源临时被分配了新的 URL。

  • 303 see other,表示资源存在着另一个 URL,应使用 GET 方法获取资源。

  • 304 not modified,当协商缓存命中时会返回这个状态码。

  • 307 temporary redirect,临时重定向,和302含义相同,不会改变method

    4XX 客户端错误

    • 400 bad request,请求报文存在语法错误。

    • 401 unauthorized,表示发送的请求需要有通过 HTTP 认证的认证信息。

    • 403 forbidden,表示对请求资源的访问被服务器拒绝。

    • 404 not found,表示在服务器上没有找到请求的资源。

    • 405 Method Not Allowed,服务器禁止使用该方法,客户端可以通过options方法来查看服务器允许的访问方法

5XX 服务器错误

  • 500 internal sever error,表示服务器端在执行请求时发生了错误。

  • 502 Bad Gateway,服务器自身是正常的,访问的时候出了问题,具体啥错误我们不知道。

  • 503 service unavailable,表明服务器暂时处于超负载或正在停机维护,无法处理请求。

GET 和 POST 的区别

GET 用于获取资源,POST 用于提交资源。

  • GET 请求后浏览器会主动缓存,POST 默认情况下不能。
  • GET请求一般放在URL中,因此不安全,POST请求放在请求体中,相对而言较为安全。
  • GET请求幂等,POST请求不幂等。
  • GET请求会一次性发送请求报文,POST请求通常分为两个TCP数据包,首先发 header 部分,如果服务器响应 100(continue), 然后发 body 部分。

传输数据大小区别:

  • GET:特定浏览器和服务器对URL长度有限制
  • POST:由于不是通过URL传值,理论上数据不受限

在浏览器地址栏键入URL,按下回车之后会经历以下流程

  1. 浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址
  2. 解析出 IP 地址后,根据该 IP 地址和默认端口80,和服务器建立TCP连接
  3. 浏览器发出读取文件(URL中域名后面部分对应的文件)的HTTP请求,该请求消息作为 TCP三次握手的第三个报文的数据发送给服务器
  4. 服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器
  5. 释放TCP连接
  6. 浏览器加载该 html 文本并显示内容

HTTPS和HTTP区别

HTTPS 要比 HTTP 多了 secure 安全性这个概念,实际上, HTTPS 并不是一个新的应用层协议,它其实就是 HTTP + TLS/SSL 协议组合而成,而安全性的保证正是 SSL/TLS 所做的工作。

SSL

安全套接层(Secure Sockets Layer)

TLS

传输层安全(Transport Layer Security)

具体区别

  • HTTP 是明文传输协议,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。

  • HTTPS比HTTP更加安全,对搜索引擎更友好,利于SEO,谷歌、百度优先索引HTTPS网页。

  • HTTPS标准端口443,HTTP标准端口80。

  • HTTPS需要用到SSL证书,而HTTP不用。

posted @ 2021-09-04 00:04  林教授i  阅读(148)  评论(0)    收藏  举报