首先需要考虑的问题:
1.计算机是如何进行通信的?
在网络划分中,一般情况下通过网桥设备将同一个网络中的多个主机进行进行隔开,同一个网络中不同主机之间的通信都是通过MAC地址找到对应的网卡,然后向目标发送对应的数据报文,源主机通过TCP/IP协议栈将数据报文进行层层包装,目标主机接收到数据报文后,经由TCP/IP协议栈(4层)进行报文处理;上图中路由器隔离的不同的网络,如果A1想和X2进行通讯必须要经过路由器,首先A1先找到网桥设备,确认了本网络中没有对应的主机,其次找到路由器,确认路由器的吓一跳中是否包含通讯的主机,如果包含,就会根据源主机请求的IP地址到路由表中查询对应的主机,并将IP转换会MAC找到目标主机的网卡,从而可以开始通讯。
2.计算机在传输过程中如何保证传输的二进制串能顺利的从源主机发送到目标主机,并能顺利组合传输的内容?
源主机用户空间进程将数据报文发送外内核空间,内核控件根据TCP/IP协议栈(4层)将数据报文按照TCP/IP协议封装为要传输的数据包,之后将数据包丢给网卡完成数据发送,数据包经由传输介质,经过路由设备找到对应的目标主机,目标主机在接收到数据报文后,经过TCP/IP协议栈将数据包进行拆分、校验等一系列处理,最终将报文发送给用户空间对应的进程。
3.进程间通信
两台主机间通信,其实在实际应用中是两个进程直接的通信,服务端的用户控件中的进程在启动时向内核空间申请注册一个端口(套接字,其实在Linux下套接字也是文件),当客户端通过层层ip路由最终到达服务端主机的时候,内核会根据请求报文解析到对应的端口上,并将数据报文按照TPC/IP协议栈的方式进行接收,真正数据还原的过程由用户空间的进程完成(例如传输的是一张图片,在内核空间中不会将接收到的数据报文真正还原为传输前的文件格式,而是交于用户自己的进程进行处理),从而完成进程间通信。
计算机网络: TCP/IP:协议栈(使用),是一个通信协议家族,由于早期各层之间封装的不规范,因此后期出现了OSI协议栈,尽管如此,其在性能上扔占优势,因此扔是目前网络传输在使用的方式。 ISO,OSI:协议栈(学习),虽然协议栈变的规范了,但是性能方面没TCP/IP好,因此只能用于学习使用。 MAC:Media Access Control 48bits: ICANN:24bits, 2^24 地址块:2^24 网桥(bridge):MAC地址表,网桥设备中包含了记录了一个MAC地址表,这个地址表的构建方式有如下两种: 静态指定: 动态学习:根据原地址学习,当网桥设备接收到了一台主机的发送数据请求,此时网桥就记录了该主机到地址表中 交换机(switch):多端口网桥; IP(Internet protocol)地址:网络号+主机号,IP地址其实不仅仅用来表示一台主机,还用于标识一个网络,下面讲到ABCD网络的时候会说到。
网络划分:在同一个网络中,一般情况下会通过网桥设备将同一个网络中的多台主机进行隔开,网桥设备记录了各个主机的MAC地址,当同一个网络中主机直接进行通信时,通过MAC地址进行通信;在正常情况下,会将一个大的网络再划分为多个子网,每一个子网之间通过路由器进行路由通信,当A网络主机与B网络主机进行通信时,需要通过A中的交换机,找到B网络中的路由器,路由器中同样记录了对应网络的的路由表,通过查找IP地址,并转换为MAC与B网络中主机进行通信。 A<-->B
ip地址中包含的信息: 哪一个网络 的那一台主机 IPv4:32bits,ip地址为四段二进制数值,每一段为8位 8bits.8bits.8bits.8bits 0-255 0.0.0.0-255.255.255.255 IP地址分类: A类: 第一段为网络号(第一段标识哪一个网络),后三段为主机号(标识那一台主机) 网络号:A类地址中第一位固定为0,其余七位任意变化 0 000 0000 - 0 111 1111:0-127 网络数量:由于全0和全1的一般不被使用,去掉两个地址最终剩余126个网络数量可划分 每个网络中的主机数量:2^24-2,后三段都用来给主机使用,一共三个八位,全0标识当前网络全1标识网络中的全部主机(一般用于广播),因此2^24要减去2得到最终可接入的主机数量
默认子网掩码:255.0.0.0,也可以使用简略的表示方式:/8 ,8表示8个1之意,对于A类地址第一段全为1,剩余断全为0用于标识一个网络,也是我们所说的掩码。 用于与IP地址按位进行“与”运算,从而取出其网络地址; 1.3.2.1/255.0.0.0 = 1.0.0.0 ,可以把255看做1,1与任何数都得任何数 1.3.2.1/255.255.0.0= 1.3.0.0 私网地址:10.0.0.0/255.0.0.0 B类: 前两段为网络号,后两段为主机号 网络号:第一段的前两位固定为10,其余6位任意变化 10 00 0000 - 10 11 1111:B类地址ip地址的开头一段只能从:128-191 网络数:2^14 14=6+8 每个网络中的主机数量:2^16-2 默认子网掩码:255.255.0.0,/16 私网地址:172.16.0.0-172.31.0.0 C类: 前三段为网络号,最后一段为主机号 网络号:C类地址的第一段的前三为固定为110,其余的5位可任意变化 110 0 0000 - 110 1 1111:192-223 网络数:2^21 21=5+8+8 每个网络中的主机数量:2^8-2 默认子网掩码:255.255.255.0, /24 D类:组播 1110 0000 - 1110 1111:224-239 E类:科研 240-255 IPv6:128bits 路由器:router 路由表的构建方式: 静态指定 动态学习:rip2, ospf 路由条目: 目标地址 下一跳(nexthop) 目标地址的类别: 主机:主机路由 网络:网络路由 0.0.0.0/0.0.0.0:默认路由 OS:多用户,多任务 多任务:多进程 chrome: QQ: QQ Music: 通信时,进程的数字标识:端口 16bits: 0-65535:1-65535 1-1023:固定分配,而且只有管理员有权限启用; 1024-4W:半固定, 4W+:临时; 进程地址: IP:PORT, socket 总结: MAC:本地通信;范围:本地局域网; IP:界定通信主机,源和目标;范围:互联网; Port:界定进程;范围:主机 ;