Fork me on GitHub

计算机网络

注意:所有文章除特别说明外,转载请注明出处.

计算机网络(针对面试)

网络层

IP协议

​IP 数据报格式

IP 分片

  • 标识:统一数据报的分片使用统一标识,同一个数据报使用同一个标识。
  • DF 不分片标识: DF = 1 禁止分片。 DF = 0 允许分片
  • MF 更多分片标识: MF = 1后面还有分片。 MF = 0,代表最后一片,或者是没分片。
  • 片偏移:指的是分片后在原分组中的位置。单位是 8 字节
如何确定分片顺序

标识 + 片偏移

报文的两大分类

2 种查询报文
5 种差错报文

传输层

UDP协议

UDP特点

  1. 无连接的,减少开销和发送数据之前的时延
  2. UDP 使用最大努力交付,不保证可靠交付
  3. UDP 是面向报文的,适合一次性传输少量数据
  4. UDP 无拥塞控制,适合很多实时应用

    1. UDP 首部开销比较小,8个字节

首部各个字段解析UDP首部格式

  • 16位源端口号

    • 2B 可有可无 看是否要回发
  • 16位目的端口号

  • 16位UDP长度

    • UDP 用户数据报的整个长度
  • 16位检验和

    • 检测整个UDP数据报是否有错

UDP 校验

  • 伪首部只在计算校验和的时候才出现,不会进行传输
    • 17 UDP 协议的值
    • UDP 长度 : UDP 首部 8B + 数据部分长度(不包括伪首部)

发送端: ==加上伪首部之后,二进制反码求和 在取反==

接收端: ==加上伪首部之后,二进制反码求和 在取反 结果为全 1 则代表无差错==

==TCP 协议==

TCP特点

  • 面向连接
  • 每一条连接都是点对点的
  • 提供可靠交付,无差错,不丢失,不重复,按序到达==可靠有序,不丢不重==
  • TCP 提供全双工通信(发送缓存 + 接收缓存)
  • TCP 是面向字节流的

TCP报文

序号: 代表本报文段所发送数据的第一个字节的序号

确认号: 期望收到对方下一个报文段得第一个数据字节的序号

数据偏移: TCP 报文距离数据的距离(可能加了数据填充等)

6个控制位

  • URG 紧急指针:不用在发送缓存中排队,配合紧急指针使用
  • ACK 确认位: ACK = 1,小写的 ack 才有效
  • PSH 推送位: 接受放应该尽快交付上层应用,不用等缓存填满
  • RST 复位: 表示TCP 连接出现了问题,要释放连接,再重新建立连接
  • SYN 同步位:表示是一个连接报文
  • FIN 终止位: 表明发送方已经发送完毕,要求释放连接

窗口位:表示接收方的接收缓存大小

检验和:加上伪包头之后的二进制反码求和在取反

紧急位: 指出本报文段得紧急数据的字节数

可靠手段

TCP连接控制
​三次握手:

四次挥手

==TCP流量/拥塞控制==

超时重传:在规定时间内没有收到确认就重发(RTTs 加权平均往返时间)

快速重传: 连续收到三个冗余ACK之后便认为,该数据报已经丢失,则重新发送

滑动窗口: 让发送方慢点,使得接收方来得及接收,让接收方根据自己的接收缓存的大小,动态的调整发送窗口的大小。(窗口值 取 rrwd 和 crwd 的最小值)

当滑动窗口的值为 0 是,启动一个计时器。进行窗口探测,防止报文丢失,导致窗口一直为0

慢启动: 从一开始,每次扩增二倍

拥塞避免:线性增长

快速恢复:不在回退到0, 而是消减一半

==TCP 和 UDP 的区别==

  • 1、 TCP面向连接 ; UDP是无连接的

  • 2、 TCP提供可靠的服务,不丢不重按序不错。UDP尽最大努力交付

  • 3 、TCP面向字节流,UDP是面向报文的且 UDP没有拥塞控制

  • 4、 每一条TCP连接只能是点到点的 ; UDP支持一对一,一对多,多对一和多对多的交互通信

  • 5 、TCP首部开销20字节 ; UDP的首部开销小,只有8个字节

应用层

==HTTP 协议==

请求报文:

​1.请求行:

​ 请求方式(get post put delete) URL HTTP协议版本

2.请求头:

3.空行:
4.请求体:

​ 你输入的 账号 密码等

响应报文:

1.响应行:

Http 版本 状态码

2.响应头:

3.空行:
4.响应体:

​ html代码 等

HTTP 状态码

2XX——表明请求被正常处理了

200 OK:请求已正常处理。

204 No Content:请求处理成功,但没有任何资源可以返回给客户端,一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。

3XX——表明浏览器需要执行某些特殊的处理以正确处理请求

==301 Moved Permanently==:资源的uri已更新,你也更新下你的书签引用吧。永久性重定向,请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。

==302 Found==:资源的URI已临时定位到其他位置了,姑且算你已经知道了这个情况了。临时性重定向。和301相似,但302代表的资源不是永久性移动,只是临时性性质的。换句话说,已移动的资源对应的URI将来还有可能发生改变。

303 See Other:资源的URI已更新,你是否能临时按新的URI访问。该状态码表示由于请求对应的资源存在着另一个URL,应使用GET方法定向获取请求的资源。303状态码和302状态码有着相同的功能,但303状态码明确表示客户端应当采用GET方法获取资源,这点与302状态码有区别。

4XX——表明客户端是发生错误的原因所在。

400 Bad Request:服务器端无法理解客户端发送的请求,请求报文中可能存在语法错误。

403 Forbidden:不允许访问那个资源。该状态码表明对请求资源的访问被服务器拒绝了。(权限,未授权IP等)

404 Not Found:服务器上没有请求的资源。路径错误等。

5XX——服务器本身发生错误

500 Internal Server Error:貌似内部资源出故障了。该状态码表明服务器端在执行请求时发生了错误。也有可能是web应用存在bug或某些临时故障。

503 Service Unavailable:抱歉,我现在正在忙着。该状态码表明服务器暂时处于超负载或正在停机维护,现在无法处理请求。

==HTTP 过程==

  1. 浏览器 分析 URL
  2. DNS 请求解析 IP 地址
  3. DNS 解析出 IP 地址
  4. 建立 TCP 连接
  5. 取文件
  6. 服务器响应
  7. 释放 TCP 连接
  8. 浏览器显示

==Ping 命令的过程==

同一个网段下

  • 如果主机A,要去ping主机B,那么主机A,他会先查自己的MAC地址表,如果没有B的MAC地址,就会向外发送一个ARP广播包
  • 交换机会收到这个报文后,所以他会检索自己有没有保存主机B的MAC地址,如果有,就返回给主机A,如果没有,就会向所有端口发送ARP广播,其它主机收到后,发现不是在找自己,就纷纷丢弃了该报文,不去理会。直到主机B收到了报文后,就立即响应,我的MAC地址是多少,同时学到主机A的MAC地址,并按同样的ARP报文格式返回给主机A。
  • 这时候主机A学到了主机B的MAC地址,就把这个MAC地址封装到ICMP协议的二层报文中向主机B发送
  • 主机B收到了这个报文后,发现是主机A 的ICPM回显请求,就按同样的格式,返回一个值给主机A,这样就完成了同一网段内的ping过程。

不同网段内(多了一个或者几个路由器的过程)

  • 如果主机A要ping主机C,那么主机A发现主机C的IP和自己不是同一网段,他就去找网关转发,但是他也不知道网关的MAC地址情况下呢?他就会向之前那个步骤一样先发送一个ARP广播,学到网关的MAC地址,再发封装ICMP报文给网关路由器.。
  • 当路由器收到主机A发过来的ICMP报文,根据目的的IP,查路由表,得到一个出口指针,去掉原来的MAC头部,加上自己的MAC地址向主机C转发。(如果网关也没有主机C的MAC地址,还是要向前面一个步骤一样,ARP广播一下即可相互学到。路由器2端口能学到主机D的MAC地址,主机D也能学到路由器2端口的MAC地址。)报文格式如下:
  • 最后,在主机C已学到路由器2端口MAC地址,路由器2端口转发给路由器1端口,路由1端口学到主机A的MAC地址的情况下,他们就不需要再做ARP解析,就将ICMP的回显请求回复过来。

==HTTPS 协议==

什么是 HTTPS

​ HTTP + SSL 安全套接字

==HTTPS 的详细握手过程==

  • 浏览器向服务端发送请求,请求中包含浏览器支持的加密协议,以及一个随机数。
  • 服务器收到请求后,选择一种非对称加密的算法,把数字证书,签名公钥,身份信息,以及一个随机数发送给浏览器。
  • 浏览器收到后,验证证书的真实性,并用服务器的公钥加密握手信息发给服务器。
  • 服务器解密后,用之前的随机数计算出一个 对称加密的秘钥,以此作为加密信息发送
  • 后续所有的信息发送都是以对称加密的方式进行的。
  • 总结一句话:==就是用对称加密加密了非对称加密的秘钥。在进行传输==

本文标题:计算机网络

文章作者:Bangjin-Hu

发布时间:2019年10月15日 - 09:22:26

最后更新:2020年03月30日 - 08:19:56

原始链接:http://bangjinhu.github.io/undefined/计算机网络/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

Bangjin-Hu wechat
欢迎扫码关注微信公众号,订阅我的微信公众号.
坚持原创技术分享,您的支持是我创作的动力.