图解TCP/IP读书笔记
Reference
- <图解TCP/IP>
- 谈谈网络通信中的 ACK、NACK 和 REX ** **https://zhuanlan.zhihu.com/p/104322256
- SYN 报文什么时候情况下会被丢弃?https://www.cnblogs.com/xiaolincoding/p/15710376.html
- 目前博客还没有用图床,先在语雀看吧 https://www.yuque.com/bcodesheep/cg3moq/iga7nwrsk9zmxd5o?# 《图解TCP/IP》
简要的正确认识
- 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首部
- 版本
- 首部长度 IHL
- 区分服务 TOS
- DSCP / ECN
- 总长度 TL
- 片偏移 FO
- 生存时间 TTL
- 协议 P
- 首部校验
- 源地址
- 目标地址
- 可选项
- 填充
- 数据
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、等等很多本书没有做详细介绍,都是一些介绍和特性
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Q's blog!
