五 运输层
运输层负责两台主机进程间的通信,提供连通的数据传输服务
端系统之间通信
主机 A 的某个进程和主机 B 上的另一个进程进行通信
UDP与TCP对比
端口
为了标志本计算机应用层中的各进程
UDP特点
- 无连接
- 尽最大努力交付
- 面向报文
- 无拥塞控制
- 支持一对一,一对多,多对一和多对多的交互通信
- 首部开销小
TCP特点
- 面向连接
- 每一条 TCP 连接只能是一对一
- 提供可靠交付
- 提供全双工通信
- 面向字节流
套接字
TCP 用主机的 IP 地址加上主机上的端口号作为 TCP 连接的端点。这样的端点就叫做套接字(socket)
停止等待协议
发送方每发送完一个分组就停止发送,等待对方确认,在收到确认之后再发送下一个分组
- 超时重传
- 分组和确认分组编号
连续ARQ协议
发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了
TCP报文段
- 首部的最小长度是 20 字节
- 紧急字段,URG=1表示有紧急数据,应该尽快发送
- 确认字段,ACK=1表示确认字段有效
- 推送字段,PSH=1表示尽快交付给接收方的应用进程
- 复位字段,RST=1表示出现严重差错,必须释放连接,再重新建立连接
- 同步字段,SYN=1表示一个连接请求/接受报文
- 终止字段,FIN=1表示释放连接
滑动窗口
以字节为单位
发送方和接收方分别维护一个发送窗口和一个接收窗口
流量控制
让发送方的发送速率不要太快,既要让接收方来得及接收,也不要使网络发生拥塞,利用滑动窗口实现流量控制
拥塞控制
防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷
为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口 cwnd 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个
拥塞判断
- 重传定时器超时
- 收到三个重复ACK
拥塞控制算法
-
慢开始
慢开始门限ssthresh
-
拥塞避免
-
快重传
-
快恢复
TCP连接阶段
- 连接建立
- 数据传送
- 连接释放
TCP连接建立
采用客户服务器方式,主动发起 TCP 连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫做服务器
三次握手:
目的:双方确认自己与对方的发送与接收是正常的
第二次握手:接收端传回发送端所发送的 ACK 是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而回传 SYN 则是为了建立并确认从服务端到客户端的通信
为什么TCP客户端最后还要发送一次确认:主要防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误
TCP连接释放
四次挥手:
为什么客户端最后还要等待2MSL:保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失;防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中
如果已经建立了连接,但是客户端突然出现故障了怎么办:
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
六 应用层
应用层的任务是通过应用进程间的交互来完成特定网络应用
DNS
域名系统,将人类可读的域名转换为机器可读的 IP 地址
通用顶级域名
- .com:公司和企业
- .net:网络服务机构
- .org:非盈利性组织
- .edu:教育机构
- .gov:政府部门
- .mil:军事部门
- .int:国际组织
域名服务器
- 根域名服务器
- 顶级域名服务器
- 权限域名服务器
- 本地域名服务器
域名的解析过程
- 递归查询:主机向本地域名服务器查询
- 迭代查询:本地域名服务器向根域名服务器查询
FTP
文件传送协议
"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上
使用TCP控制连接和TCP数据连接
TELNET
远程终端协议,是 Internet 远程登陆服务的标准协议和主要方式
WWW
万维网
-
使用统一资源定位符 URL 来标志万维网上的各种文档
URL形式:<协议>://<主机>:<端口>/<路径>
-
使用超文本传输协议HTTP在万维网客户程序与万维网服务器程序之间进行交互
-
使用超文本标记语言HTML展示万维网文档
HTTP特点
- 使用面向连接的TCP作为运输层协议
- 面向事务
- 1.0协议无状态
代理服务器
又称为万维网高速缓存。 代理服务器把最近的一些请求和响应暂存在本地磁盘中。当新请求到达时,若代理服务器发现这个请求与暂时存放的的请求相同,就返回暂存的响应,而不需要按 URL 的地址再次去互联网访问该资源
HTTP 1.0 请求方法
- get
- post
- head
HTTP 1.1 请求方法
- get:从服务器上获取数据
- post:发送包含用户提交数据的请求,有可能对服务器的数据进行更改
- head:获得报文首部
- put:向指定资源位置上传其最新内容
- delete:删除文件
- options:查询服务器针对特定资源所支持的HTTP请求方法
- connect:将服务器作为代理,让服务器代替用户去访问其他网页,之后将数据返回给用户
- trace:回显服务器收到的请求,主要用于测试或诊断
https://blog.csdn.net/Destiny_shine/article/details/110132315
GET POST 区别
https://www.runoob.com/tags/html-httpmethods.html
HTTP状态码
状态码列表看https://www.runoob.com/http/http-status-codes.html
电子邮件
一个电子邮件系统有三个重要组成构件:用户代理、邮件服务器、邮件协议(包括邮件发送协议,如 SMTP,和邮件读取协议,如 POP3 和 IMAP)
邮件发送
简单邮件传输协议SMTP,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式,基于 TCP 实现客户与服务器的通信
邮件读取
- POP3:邮局协议
- IMAP:网际报文存取协议
MIME
通用互联网邮件扩充
DHCP
在浏览器中输入 url 地址 ->> 显示主页的过程
- 通过DNS查找域名对应的IP地址
- 客户端与服务端建立TCP连接
- 客户端向服务端发送HTTP请求
- 服务端处理请求,返回HTTP响应
- 客户端浏览器解析响应,并渲染到页面
- 客户端与服务端断开TCP连接
HTTP 长连接,短连接
-
HTTP 1.0使用短连接,即客户端和服务器每进行一次 HTTP 操作,就建立一次连接,任务结束就中断连接
优点:管理简单
缺点:客户端请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽
-
HTTP 1.1使用长连接,需要响应头加入
Connection:keep-alive
即当一个网页打开完成后,客户端和服务器之间用于传输 HTTP 数据的 TCP 连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接优点:减少TCP建立和关闭的操作,节省网络资源
缺点:存活功能的探测周期太长;随着客户端连接越来越多,服务端负载过大
参考https://www.cnblogs.com/gotodsp/p/6366163.html
HTTP 是不保存状态的协议,如何保存用户状态
HTTP 协议自身不对请求和响应之间的通信状态进行保存
为了保存用户状态,使用Session机制,Session 的主要作用就是通过服务端记录用户的状态,最常用的就是内存和数据库(比如是使用内存数据库 redis 保存),通过在 Cookie 中附加一个 Session ID 来方式来跟踪Session
若Cookie被禁用,利用 URL 重写把 Session ID 直接附加在 URL 路径的后面
Cookie 和 Session 有什么区别
- Cookie 一般用来保存用户信息,Session 的主要作用就是通过服务端记录用户的状态
- Cookie 数据保存在客户端(浏览器端),Session 数据保存在服务器端
HTTP 1.0 和 HTTP 1.1 的主要区别
- 长连接 : 在 HTTP/1.0 中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP 是基于 TCP/IP 协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP 1.1 起,默认使用长连接 ,默认开启 Connection: keep-alive。 HTTP/1.1 的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到 HTTP 的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
- 错误状态响应码 :在 HTTP1.1 中新增了 24 个错误状态响应码,如 409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。
- 缓存处理 :在 HTTP1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判断的标准,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来控制缓存策略。
- 带宽优化及网络连接的使用 :HTTP1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
URI 和 URL 的区别
- URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
- URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。
HTTP 和 HTTPS 的区别
- 端口:HTTP使用80,HTTPS使用443
- 安全性:HTTPS安全性更高。HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密
- 资源消耗:HTTPS资源消耗更多