要成为技术牛人,搞定大系统,一定要过网络这一关,而网络协议在网络中占有举足轻重的地位

我把这样的网络协议学习过程总结为:一看觉得懂,一问就打鼓,一用就糊涂。

一种学习知识的方法和态度:看似最枯燥、最基础的东西往往具有最长久的生命力。

只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。

一些术语:
URL DNS HTTPDNS
应用层
传输层 TCP UDP
网络层 IP协议
网关 DHCP协议配置IP地址
MAC 地址 ARP协议
路由协议 OSPF BGP

【精华】趣谈网络协议 - 图1

—- 补充 —- :::info OSI 七层模型:

  • 应用层:网络服务与最终用户的一个接口
  • 表示层:数据的表示、安全、压缩
  • 会话层:建立、管理、终止会话
  • 传输层:定义传输数据的协议端口号,以及流控和差错校验
  • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择
    • ICMP
    • IGMP
    • IP V4V6
  • 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能
  • 物理层 :::

网络分层的真实含义是什么?

TCP三次握手

复杂的程序都要分层;

这里要记住一点:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。

所以如果一个 HTTP 协议的包跑在网络上,它一定是完整的。
无论这个包经过哪些设备,它都是完整的。

所谓的二层设备、三层设备,都是这些设备上跑的程序不同而已。
一个 HTTP 协议的包经过一个二层设备,二层设备收进去的是整个网络包。
这里面 HTTP、TCP、 IP、 MAC 都有。
什么叫二层设备呀,就是只把 MAC 头摘下来,看看到底是丢弃、转发,还是自己留着。
那什么叫三层设备呢?就是把 MAC 头摘下来之后,再把 IP 头摘下来,看看到底是丢弃、转发,还是自己留着。

ipconfig ;ifconfig ;ip addr

NAT

NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。
这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。
另外,这种通过使用少量的公有IP 地址代表较多的私有IP 地址的方式,将有助于减缓可用的IP地址空间的枯竭。在RFC 2663中有对NAT的说明。

NAT不仅能解决IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。
1.宽带分享:这是 NAT 主机的最大功能。
2.安全防护:NAT 之内的 PC 联机到 Internet 上面时,他所显示的 IP 是 NAT 主机的公共 IP,所以 Client 端的 PC 当然就具有一定程度的安全了,外界在进行 portscan(端口扫描) 的时候,就侦测不到源Client 端的 PC 。

A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255

UDP 协议

传输层

TCP UDP 区别 前者面向连接,后者面向无连接

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

TCP 提供可靠交付:无差错,不丢失,不重复,按序到达
TCP 面向字节流的,UDP 基于数据报的
TCP 可以有拥塞控制
TCP 有状态服务,UDP 无状态服务

【精华】趣谈网络协议 - 图2

UDP 使用场景

  • 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用
  • 不需要一对一沟通,建立连接,而是可以广播的应用
  • 需要处理速度快,时延低,可以容忍少数丢包

  • QUIC 快速UDP互联网络连接

  • 流媒体的协议 RTMP
  • 实时游戏
  • IoT 物联网
  • 移动通信领域 GTP-U

Q1: TCP 是面向连接的,在计算机看来,怎样才算是一个连接呢?
Q2:TCP 的连接如何建立,如何关闭?

TCP 协议

【精华】趣谈网络协议 - 图3

序号:解决乱序的问题
确认序号:
状态位:

  • SYN 发起一个连接
  • ACK 回复
  • RST 重新连接
  • FIN 结束连接

为什么要三次握手:保证双方的消息都有去有回

状态图

Advertised window

  • 发送、已确认
  • aw 发送、未确认
  • aw 未发送、可发送
  • 未发送、不可发送

Socket

IPv4 AF_INET
IPv6 AF_INET6
TCP SOCK_STREAM
UDP SOCK_DGRAM

C10K 问题
IO 相关的知识点

IO多路复用

  • select
  • epoll

Linux 中的内核函数

【2020-9-1 13:59:50】二刷有感:还是有很多细节不够深入,毫无疑问,后面还有三刷,四刷…

HTTP 协议

URL 统一资源定位符

【精华】趣谈网络协议 - 图4
Accept-Charset
Content-Type
Cache-control

HTTP2.0

HTTP 2.0 成功解决了 HTTP 1.1 的队首阻塞问题,同时,也不需要通过 HTTP 1.x 的 pipeline 机制用多条 TCP 连接来实现并行请求与响应;减少了 TCP 连接数对服务器性能的影响,同时将页面的多个数据 css、js、 jpg 等通过一个数据链接进行传输,能够加快页面组件的传输速度。

QUIC

  • 自定义连接机制 替换四元组(源IP端口目的IP端口)64位随机数ID
  • 自定义重传机制
  • 无阻塞的多路复用(多个stream之间没有依赖)
  • 自定义流量控制

深入学习QUIC

HTTPS

看的头好大…