Reference

简要的正确认识

  • TCP/IP是一个协议组包含了许多子协议,比较常见的就是HTTP
  • TCP/IP是类似数据结构的通用规范,用于构建我们现在的互联网
  • TCP/IP协议组分别作用在数据传输的七层模型之上
  • 七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

计算机网络的脉络

  • 网络规模
    • 广域网 WAN
    • 局域网 LAN
  • 计算机网络虽计算机的发展而发展,在不同时期的作用不同
  • 分组交换技术的计算机网络
  • 电话网络逐渐被IP取代
  • 到最后逐渐演变为如今的TCP/IP互联网

协议

  • 协议是一个抽象概念,是一些网络技术结构的统称
  • 在不同的公司当中有自己的不同的协议
  • 协议与硬件息息相关,改变协议需要对应硬件上的修改,因此统一的协议是使得各种各样的设备得以互联的基础
  • 协议比作人与人对话的语言
    • 将汉语和英语比作 “协议”
    • 将聊天的内容比作 “通信”
    • 将说话的内容比作 “数据”
  • 分组交换协议
    • 将一整块数据分成小包,在包的首部添加描述信息,使得接收包的一方可以顺利将小包拼成一整块数据

协议由谁制定

  • 开始是OSI协议(由国际标准委员会制定),但是没普及,但是OSI提出的协议分层是被后来者更广泛借鉴的,也就是互联网的七层模型
  • 后来IETF推出的标准得以普及

数据传输的分类

  • 面向有连接型,即在收发数据之前已经有了连接
  • 面向无连接型,即在收发数据之前没有建立连接

网络通信的分类

我认为通信表示建立连接的方式,数据传输则说的是我们传输的时候面临的两种情况

  • 电路交换,历史悠久逐渐被分组交换取代
  • 分组交换(积蓄交换),处理过程:
    • 发送端计算机将数据分组发送给路由器
    • 路由器将收到的一部分分组数据以后,缓存到自己的缓冲区
    • 然后路由器再将缓存的分组转发给目标计算机
  • 分组交换的弊端:
    • 只有一条线路
    • 路由器可能发生缓存饱和或溢出

接收端数量分类

  • 单播
  • 多播
  • 任播

地址

地址很多表示方式,可以简单理解为IP地址

  • 地址具有唯一性
  • 地址可以表示多层次

MAC地址是在手机中通常使用的,根据场商可以一定程度上判断,但是对寻找地址的帮助很少
IP地址则更多的使用在互联网中,并且IP地址的形式对寻找地址很有帮助

网络的构成要素

  • 网卡
    • 使计算机联网的设备,现在的电脑通常自带网卡,但是也可以外接,可以抽象的理解为一个接口
  • 中继器
    • 从物理层延长网络的设备
  • 网桥/2层交换机
    • 从数据链路层上延长网路的设备
  • 路由器/3层交换机
    • 通过网络层转发分组数据的设备
  • 4-7层交换机
    • 处理传输层以上各层网络传输的设备
  • 网关
    • 转换协议的设备

不同的数据链路

数据链路有不同的技术,不同的技术可以使用不同的通信媒介。
通信媒介可以简单理解为不同材料的网线

MAC地址

  • 用于识别数据链路中互联的节点
  • 有线/无线均可
  • 通常不会有重复,有重复在不通的网络就没事

TCP/IP规范RFC

是IETF讨论制定的文档,是开放的,目的是像社会公开各种协议的规范

互联网的基础知识

  • 互联网协议就是TCP/IP,TCP/IP就是互联网的协议
  • ISP表示互联网运营商,提供网络服务
  • OSI 注重 通信协议必要的功能
  • TCP/IP强调 计算机上实现协议应该开发哪种程序
  • TCP/IP远程登录 TELNET和SSH两种协议

TCP/IP分层模型与通信示例

  • 每个层次的数据都可以称为各自层次的包
  • 每个包包首部包含了该层次的协议信息

IP协议

  • IP协议是面向无连接型
  • 数据链路的抽象化,对于下层是LAN还是PPP,对于IP来说的都是相同的
  • IP包分片为小的IP包

IP地址

  • IP地址现存的是IPv4,是用32位正整数来表示的
  • 最多可允许43亿台计算机连接到网络
  • IP地址分类
    • A类地址 二进制以0开头的地址
    • B类地址 是前两位为10的地址
    • C类地址 110
    • D类地址 1110
    • 这个地址分类知道就行,现在已经没有太大意义

IPv4首部

IPv6 首部

  • 版本
  • 通信量类
  • 流标号
  • 有效荷载长度
  • 下一个首部
  • 跳数限制
  • 源地址
  • 目标地址

IP的技术支持

到目前为止,仅仅靠IP协议是无法完成通信的,还需要许多IP协议的技术

  • DNS 域名解析
  • ARP 地址互通
  • RARP
  • 代理ARP
  • 辅助IP的ICMP
  • DHCP 实现自动设置IP、统一管理IP地址分配
  • NAT技术 本地网络地址和全局地址的转换,IPv4续命的技术
  • NAT-PT 实现IPv4和IPv6兼容
  • IP隧道

TCP和UDP

  • TCP是面向连接的可靠的流协议,流表示不间断的数据结构
  • UDP是不可靠协议,但是并不代表UDP协议不好,IP电话的场景表现出UDP在这种高速传输和实时性有较高要求的场景有很好的体验
  • 操作系统提供了TCP和UDP的API用于实现 Socket

端口号

  • 用来识别同一台计算机中通信的不同应用程序,将数据发送给对应端口好的应用程序
  • TCP/IP和UDP/IP通常采用5个信息才能准确识别一个通信
    • 源IP地址
    • 目标IP地址
    • 协议号
    • 源端口号
    • 目标端口号
  • 端口号是如何确定的
    • 标准既定的端口号
    • 时序分配
  • 知名端口号,通常是一些协议所通用,查询地址:
  • 端口号由其使用的传输层协议决定,不同的传输协议可以使用相同的端口号,各个协议会传到各自的模块处理传来的数据,然后对应到具体的端口号

什么是连接?

  • 一种虚拟的通信线路

UDP协议

  • 不是重点,无连接的通信服务
  • 应用:
    • 广播
    • 视频、音频
    • 包总量较少的通信

TCP协议

  • 需要解决的问题:
    • 数据的破坏、丢包、重复、顺序混乱
  • TCP的解决发方案
    • 检验和、序列号、确认应答、重发控制、连接管理、窗口控制

序列号与确认应答

  • 当发送端的数据到达接收主机时,接收端主机会返回一个已接受到的消息通知 (这个消息叫ACK,也就是确认应答,这本书的翻译是这样),确切的说是一个 SYN+ACK 包,SYN包是建立连接时发送端发送给接收端的
  • 当接受主机没有收到,或者发现缺失则会返回**NACK **,否定应答
  • 通过数据包的序列号来判断是否出现丢包、跳变、缺失 ,详细实现:https://zhuanlan.zhihu.com/p/104322256

重发超时

  • 发送端未收到确认应答,在一个时间间隔之后,重复发送数据
  • 为了保证速度,每次往返会计算往返时间,修改这个时间间隔

连接管理

  • 开始建立连接,先发送一个SYN包 SYN is a single-bit flag in the header of a TCP segment,

about SYN https://www.quora.com/What-is-a-SYN-packet-in-TCP

  • 建立连接到断开流程:

以段发送数据

  • 最大消息长度:MSS Maximum Segment Size
  • 理想情况:IP中不被分片的最小长度
  • 何时计算:三次握手时动态计算得出,两种在TCP首部写入自己的mss,然后选最小

窗口控制提高速度

  • 按最小单位段来确认应答会导致随着往返时间越长,网络吞吐量越差,类似于指数爆炸
  • 通过窗口,即用更大的单位来进行一次确认应答
  • 窗口的大小**:**无需等待确认应该而可以继续发送数据的最大值

窗口控制与重发控制

如果在窗口中出现数据段丢失怎么办?有两种情况

  • 确认应答未能返回的情况
    • 如果只有一些没有应答,无需重复发,只需要在下一个窗口中确认即可
  • 报文段丢失的情况
    • 高速重发机制,接受端在短时间内大量返回需要的序列号,通常一定次数后发送端就会将对应的数据重发

流控制

让发送端根据接收端的实际接受能力控制发送的数据量
通过在TCP首部添加字段,告知发送端
当接收端的缓冲区发生溢出时,同样会将窗口大小的值修改为更小的值

阻塞控制

为了防止共享网络发生阻塞,在建立连接的开始,通过算法来控制窗口的大小,随着阻塞概率的减小将窗口增大

Nagle算法提高网络利用率

核心思想是,即使还有应该发送的数据,但如果这部分数据很少的话则进延迟发送

这个算法一般都会导致数据发生延迟,因此很多场景不会启用

UDP首部格式

TCP首部格式

路由协议

目前不做深入了解

应用协议

SSH、FTP、等等很多本书没有做详细介绍,都是一些介绍和特性