要成为技术牛人,搞定大系统,一定要过网络这一关,而网络协议在网络中占有举足轻重的地位
我把这样的网络协议学习过程总结为:一看觉得懂,一问就打鼓,一用就糊涂。
一种学习知识的方法和态度:看似最枯燥、最基础的东西往往具有最长久的生命力。
只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。
一些术语:
URL DNS HTTPDNS
应用层
传输层 TCP UDP
网络层 IP协议
网关 DHCP协议配置IP地址
MAC 地址 ARP协议
路由协议 OSPF BGP
—- 补充 —- :::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 无状态服务
UDP 使用场景
- 需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用
- 不需要一对一沟通,建立连接,而是可以广播的应用
需要处理速度快,时延低,可以容忍少数丢包
QUIC 快速UDP互联网络连接
- 流媒体的协议 RTMP
- 实时游戏
- IoT 物联网
- 移动通信领域 GTP-U
Q1: TCP 是面向连接的,在计算机看来,怎样才算是一个连接呢?
Q2:TCP 的连接如何建立,如何关闭?
TCP 协议
序号:解决乱序的问题
确认序号:
状态位:
- 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 统一资源定位符
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之间没有依赖)
- 自定义流量控制
HTTPS
看的头好大…