深入了解计算机系统读书笔记
读书笔记——网络编程篇:
一:将网络当做一个外接I/O设备
ALU:CPU算数逻辑运算单元
DMA:(Direct Memory Access,直接存储器访问)指外部设备不通过CPU而直接与系统内存交换数据的接口技术。这样数据的传送速度就取决于存储器和外设的工作速度。
1.1网络分级
局域网—集线器,复制每个数据包到每个口
局域网通过网桥联合:
网桥已经开始学会丢弃帧了,与路由器区别是他是在数据链路层工作,路由器在网络层。
局域网到广域网
1.2协议
协议是为了让不同网络间也能互相通讯,实现了两点:
命名(IP/MAC地址)
传送(包头+有效载荷)
传送数据包八个步骤:
(1)客户端触发系统调用,从虚拟地址复制数据到内核
(2)附加协议报头+LAN1帧头,分别寻址最后主机B和路由器,
(3)LAN1适配器复制帧到网络上
(4)到达路由器,路由器读取,传送到协议软件
(5)路由器提取IP地址,作为索引确定转发路径,剥落旧帧头,换上新帧头。
(6)路由器LAN2复制帧到网络
(7)到达主机B读取帧,上传到协议软件
(8)解开包头,帧头,复制数据包到虚拟地址空间
1.3socket所在层数
图中套接字调用便是socket,sendto之类函数所在位置,了解这个对于网络编程我觉得挺重要的。之后会写一个博客单独说一下。
2.1TCP/IP-UDP相关
2.1.1IP地址
struct in_addr
{
unit_32 s_addr;//32位无符号整形代表IP地址,IPV4下。这就是为什么近年来IP地址越来越少的原因之一,IPV6即将抵达
}
为了统一,网络字节序是大端字节,如果想要探究一下自己电脑的字节序,可以用强制转换类型,将4字节的int类型转换成1字节的char,去读取,看看第一个字节是什么。
htonl主机(host)转网络(net)
ntohl网络转主机
点分十进制和IP地址转换
inet_pton(点分十进制转网络)返回>0成功,网络字节序
inet_ntop(网络转点分十进制)返回一个指向字符串指针
不过我一般使用
inet_addr 将字符串形式的IP地址 -> 网络字节顺序 的整型值
inet_ntoa 网络字节顺序的整型值 ->字符串形式的IP地址
2.2网络进程间通讯
首先通信的基础:IP地址+端口,客户端端口一般是随机,服务器端口为指定,和服务对应
十二点了=-=先写到这