图解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协议组分别作用在数据传输的七层模型之上
- 七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
计算机网络的脉络
协议
- 协议是一个抽象概念,是一些网络技术结构的统称
- 在不同的公司当中有自己的不同的协议
- 协议与硬件息息相关,改变协议需要对应硬件上的修改,因此统一的协议是使得各种各样的设备得以互联的基础
- 协议比作人与人对话的语言
- 将汉语和英语比作 “协议”
- 将聊天的内容比作 “通信”
- 将说话的内容比作 “数据”
- 分组交换协议
协议由谁制定
数据传输的分类
网络通信的分类
我认为通信表示建立连接的方式,数据传输则说的是我们传输的时候面临的两种情况
- 电路交换,历史悠久逐渐被分组交换取代
- 分组交换(积蓄交换),处理过程:
- 发送端计算机将数据分组发送给路由器
- 路由器将收到的一部分分组数据以后,缓存到自己的缓冲区
- 然后路由器再将缓存的分组转发给目标计算机
- 分组交换的弊端:
接收端数量分类
地址
地址很多表示方式,可以简单理解为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地址
- IP地址现存的是IPv4,是用32位正整数来表示的
- 最多可允许43亿台计算机连接到网络
- IP地址分类
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协议
序列号与确认应答
- 当发送端的数据到达接收主机时,接收端主机会返回一个已接受到的消息通知 (这个消息叫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
以段发送数据
窗口控制提高速度
窗口控制与重发控制
如果在窗口中出现数据段丢失怎么办?有两种情况
流控制
让发送端根据接收端的实际接受能力控制发送的数据量
通过在TCP首部添加字段,告知发送端
当接收端的缓冲区发生溢出时,同样会将窗口大小的值修改为更小的值
阻塞控制
为了防止共享网络发生阻塞,在建立连接的开始,通过算法来控制窗口的大小,随着阻塞概率的减小将窗口增大
Nagle算法提高网络利用率
核心思想是,即使还有应该发送的数据,但如果这部分数据很少的话则进延迟发送
这个算法一般都会导致数据发生延迟,因此很多场景不会启用
UDP首部格式
TCP首部格式
路由协议
目前不做深入了解
应用协议
SSH、FTP、等等很多本书没有做详细介绍,都是一些介绍和特性
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Q's blog!
评论