图解 TCPIP.md
5.3 ARP
5.3.1 ARP 概要
以目标 IP 地址为线索, 用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址.
ARP 只适用于 IPv4, 不能用于 IPv6. IPv6 中可以用 ICMPv6 替代 ARP 发送邻居探索消息.
5.3.2 ARP 的工作机制
ARP 借助:
- ARP 请求 (请求获取 MAC 地址)
- ARP 响应 (返回 MAC 地址)
两种类型的包确定 MAC 地址.
通过广播发送 ARP 请求包, 这个包中包含了想要了解其 MAC 地址的主机 IP 地址.
ARP 请求包还有一个作用就是将自己的 MAC 地址告诉给对方.
通常获取到的 MAC 地址会缓存一段时间. 以映射关系存储在 ARP 缓存表.
5.3.3 IP 地址和 MAC 地址缺一不可?
5.4 ICMP (Internet Control Message Protocol)
5.3.4 RARP (Reverse Address Resolution Protocol)
从 MAC 地址定位 IP 地址的一种协议.
5.4.1 辅助 IP 的 ICMP
ICMP 的主要功能包括, 确认 IP 包是否成功送达目标地址, 通知在发送过程当中 IP 包被废弃的具体原因, 改善网络设置等.
ICMP 的通知消息会使用 IP 进行发送.
ICMP 的消息大致可以分为两类:
- 一类是通知出错原因的错误消息
- 另一类是用于诊断的查询消息
5.4.2 主要的 ICMP 消息
IP 路由器无法将 IP 数据包发送给目标地址时, 会给发送端主机返回一个目标不可达 (Destination Unreachable Message) 的 ICMP 的信息, 并在这个消息中显示不可达的具体原因.
ICMP 重定向消息
返回更合适的路由信息.
ICMP 超时信息
TTL (Time To Live) 的值减到 0 时 IP 包会被丢弃.
此时, IP 路由器将会发送一个 ICMP 超时的消息给发送端主机,并通知该包已被丢弃.
设置 TTL 可以避免循环. 有时可用于控制包的到达范围 .
traceroute
命令, 可以显示出由执行程序的主机到达特定主机之间历经多少路由器. 原理就是利用 IP 包的生存期限从 1 开始按照顺序递增的同时发送 UDP 包.
使用:
1 |
|
ICMP 回送消息
ping
命令依靠此消息实现. 判断所发送的数据包是否已经成功到达对端的一种消息.
对协议的理解
协议是信息传递的规范,只有两台计算机使用相同的协议进行交流,数据才能够被传达。
分组交换协议
数据被拆分为包,包上有报文首部,含有原主机地址,目的主机地址等信息。
协议分层
每个分层接受它的下一层提供的服务并向它自己的上一层提供服务。就是底层向上层服务。
便于区分功能。
层与层之间有接口,同层之间有协议。
通过OSI参考模型,可以得知每一层大致的作用。
OSI各层的作用:
- 应用层,确定数据内容,发送者,目的地址
- 表示层,用于数据的主机特有格式和网络统一格式的转换。即格式化编码。
- 会话层,确定主机间的连接方式,建立几次连接之类。即标记发送顺序。管理何时建立连接,何时发送数据。
- 传输层,进行实际上连接的建立和断开。确保数据传送至目的地,没有到达则重发。可能这里就是一次握手发生的地方。所以传输层的作用是确保通信的可靠性。逻辑上的连接。
- 网络层,负责将数据发送至最终目标地址。
- 数据链路层,负责传输介质设备之间的数据处理。物理上的连接
- 物理层,将数据的0,1转换为电压和脉冲光传送给物理的传输介质。
MAC地址(media access control介质访问控制),即物理地址、硬件地址。
对各层作用的理解
可能是每一层将自己的工作成果标记在表头报文中,然后接收方一一解析这些报文。
传输方式
两种:
- 面向连接
- 面向无连接
分组交换,每个包上标记有发送端和接受端的地址。
传输速率又称宽带
主机之间实际的传输速率称为吞吐量
物理设备的兼容性很重要。
计算机与外界连接的接口称作端口。
网络设备
网卡
用于接入网络。
中继器
位于OSI模型的物理层。
对电信号或光信号进行波形调整和放大。
用于延长网络。
信号在传输的过程中会减弱,中继器就是把信号调整正常和加强。
集线器
多口中继器。
网桥
位于OSI模型的第二层,数据链路层。可存储数据帧,连接网段。可学习。
又称2层交换机。
具有网桥功能的Hub叫做交换集线器,只有中继器功能的Hub叫集线器。
路由器
位于OSI模型的第三层,网络层,可以连接不同的数据链路。
网桥是根据MAC地址进行处理,路由器是根据IP地址进行处理。
4~7层交换机
处理传输层以上。其包含负载均衡器。
交换机
交换机内部有一张MAC地址表,记录每一个MAC地址的设备,连接在其哪一个端口。
网关
协议的转换与数据的收发。
以太网
通过交换机小范围传输数据的网络。
网络流量
网络上传输的数据报文的数量。
云
动态调整。
客户端/服务端模型
来自知乎上一个回答的理解
路由器的每一个端口,都有独立的MAC地址。
自我理解
集线器集主机的线,交换机是高级的集线器,路由器集交换机的线。
MAC地址
一般48位,前24位代表网络硬件制造商的编号,后24位是厂家自己分配的,一般表示系列号。
通过IP号可以实现向一个区域内的主机发送数据。
报文首部由几个头部组成,比如网络层头部,数据链路层头部。
IP地址作用
便于将信息发送给一群设备。
IP地址可以随时修改。
子网的作用
如果源IP与目标IP处于一个子网,直接将包通过交换机发出。
如果源IP与目标IP不处于一个子网,则交给路由器处理。
子网号就是IP地址中的网络号。
子网掩码用于判断IP地址中那一部分表示子网,即网络号,那一部分表示主机号。
网络号是多个主机共有的、相同的。
默认网关
默认网关也是一个IP地址。
在主机发送给不同子网的主机时,就发送给默认网关。
所以说,路由器在交换机面前就是一个有IP地址、MAC地址的一个主机。
路由器中有路由表,记录子网号。
ARP协议
通过IP地址,找到MAC地址。电脑中有ARP缓存表。
数据信息最终是通过MAC地址到达。
数据传输的过程
过程中,数据包中IP地址不变,MAC地址在变化。
数据链路层记录MAC地址,网络层记录IP地址。
交换机只处理MAC地址。
路由器路由表中,若匹配上了吓一跳,即是发给下一个路由器。
发给交换机的数据中,必须包含MAC地址。
最终梳理,部分知识点
含有APR表的为主机和路由器,APR表记录IP地址和MAC地址的对应关系。
交换机中有MAC地址表,能够学习,记录MAC地址和端口的对应关系。
路由器中还有路由表,记录子网和端口的关系,通过下一跳表项决定是否传给下一个路由器。
数据包首部
每个分层,都会对所发送的数据附加一个首部。
数据包都是由两部分组成,一部分是首部,一部分是数据。
每个包首部都至少包含两个信息:
- 发送端和接受端的地址。
- 上一层的协议类型。
每个分层包首部中还包含一个识别位,用来表示上一层协议的种类信息。
每一种协议对应一种处理程序。
以太网
Ethernet一词源于Ether(以太),意为介质。
以太网的发展可以看成电缆的改变。
以太帧
前端有八个字节的前导码,本体首部十四个字节,帧尾有FCS,四个字节,检验帧是否损坏,通过计算余数。
Wi-Fi
Wireless Fidelity,指高质量的无限LAN。
VPN
Virtual Private Network虚拟专用网络。
数据链路
就是数据传输方式,如以太网、无线等,对应不同的通信媒介。
网络层与数据链路层的关系
数据链路层负责直连的两个设备之间的通信,网络层负责没有直连的两个网络之间的通信。
不同网络区间的数据传递称跳hop,下一跳,即指定下一个路由器或主机的位置。IP地址,比MAC地址更易组织。
不同数据链路—-不同介质—-不同传输速率。
IP面向无连接,简单、高速化。
IP负责发送,TCP负责保证主机确实收到数据。
同一网段,即IP地址中的网络号相同。
IP地址
ABCD四类地址对应多种功能。
有了子网掩码以后,就没有ABCD的IP地址分类了。
数据链路不同,对应的MTU(最大传输单元)不同,因为其传输用途不同。
面对网络过滤是否可模拟参数。
分片的坏处,一块碎片丢失会导致整个数据作废.
TTL(Time To Live)生存周期。
DHCP
解决了移动通信时的IP分配问题。
避免重复分配,发送ICMP回送请求包。
NAT
Network Address Translator,解决IPv4地址枯竭问题,以及IPv6的安全问题。
私有IP地址和全局IP地址的转换。
NAT-PT(Protocol Translation)
IP任播,指为提供同一种服务的服务器配置同一个IP地址。
路由器有对某些包优先处理的方式。
包中的各个标记
每一层的标识,上一层的标识。
守护进程
服务端的程序。
通过目的端口号可以识别数据包发送给哪一个守护进程。
流
指不间断的数据结构,可以想象成排水管道中的水流。
TCP
使用TCP时,发送端的信息中含有数据段的长度信息。
UDP
User Datagram Protocol,用户数据报协议。
TCP的特征:
- 面向连接
- 具备顺序控制、重发机制等机制
UDP的适用区:
高速传输和实时性较高要求的通信或广播通信。
socket
即套接字。套接,是建立网络通讯和进程间通讯,字,是可交互的有序指令串。
socket原意是物理上的插座,电器的插头插上插座就会从电网获取电力供应,这里可为逻辑上的,比如web和浏览器可视为socket。
socket可能用于创建连接。
文件描述符
fd,file descriptor, 为了表示和区分已经打开的文件,UNIX/Linux给每个文件分配的ID,通常:
- 用0表示标准输入文件(stdin),对应硬件设备的键盘
- 用1表示标准输出文件(stdout),对应硬件设备的显示器
- 用2表示标准错误输出文件(stderr)
系统创建的每一个进程都会默认打开这三个文件。
UNIX/Linux执行的任何I/O操作都是在读取或写入文件描述符—-一个整数,关联一个打开的文件。
网络连接也是一个文件。
每个文件的文件描述符不是固定的。
文件描述符也不是递增的,其被回收后可被重新分配。
每个进程都维护一个文件描述符的集合。
新的文件描述符从3开始分配。
总结:
1.文件描述符是一个整型
2.每个进程默认打开0、1、2三个文件描述符,新的文件描述符都是从3开始分配
3.一个文件描述符被回收后可以再次被分配
4.每个进程单独维护一个文件描述符的集合
fork函数
用于创建进程,其返回一个int值,当返回值为0时表明当前是子进程正在执行,非0就为父进程在执行。
端口号
几个地址:
- MAC地址,对应数据链路层的地址
- IP地址,对应网络层的地址
- 端口号,对应传输层的地址
用于识别同一台计算机中进行通信的不同应用程序,因此,也叫程序地址。
TCP/IP或UDP/IP通信中采用的五个信息识别:
- 源IP地址
- 目标IP地址
- 协议号
- 源端口号
- 目标端口号
端口号可动态分配和静态分配。
不同的传输协议可以使用不同的端口号。
连接
指各种设备、线路,或网络中进行通信的两个应用程序为了相互传递消息而专有的、虚拟的通信线路,也叫做虚拟电路。
窗口控制和重发控制的理解
通过确认应答来决定重发哪一部分数据。比如窗口大小为400字节,一段为一百字节。
0~100字节发送后,还未收到确认应答,可继续发送。此时发送了101~200的字节。
这时,可能收到了0~100的确认应答,这个时候表明0~100字节的数据已到达。
若没收到0~100的确认应答,此时的原因有两种,一是数据丢失,而是确认应答丢失。
先说第一种,数据丢失后,由于发出了101~200的数据,也会产生一个确认应答,若这个确认应答成功返回,它会请求0~100的数据,然后0~100的数据就会重发。
第二种,确认应答丢失,通过对第二个确认应答的判断,若是请求201~300的数据,说明前两个数据段都已到达。
因此,窗口控制和重发控制的核心就是,通过后面的应答判断前面的传输情况。
互联网的结构
网络之间由NOC(Network Operate Center)连接。
异构网络之间由IX(Internet Exchange)连接。
连接互联网需要向ISP(Internet Service Provider)或区域网提交申请。
远程登录
为了实现TSS(Time Sharing System)
SSH(Secure SHell)协议
NVT(Network Virtual Terminal)仿真终端.
域名
分层。
DNS
含有MX(Mail Exchange)记录,其记录有邮件地址及其作为发送地址时对应的邮件服务器的域名。
URI
Uniform Resources Identifier.广义概念
URL(Uniform Resources Locator).狭义概念
URI可用于www以外的协议。
URI的http方案的具体格式
http://主机名/路径
http://主机名:端口号/路径
http://主机名:端口号/路径?访问内容#部分信息。
Cookie
用于保存登录信息或网络购物中放入购物车的商品信息。