网络的基本原理
网络:进程和进程间跨主机通信
单主机上,网卡是如何工作的
网卡接受数据
1.接受数据(物理信号转换成数字信号)
2.通过中断把控制权给到OS
3.OS把数据搬给进程
网卡发送数据:
1.填充数据:2.触发数据
进程发送出来的数据,是原封不动给到网卡的发送的吗?
不是,数据需要经过不断地封装之后才会发送,有不同的层次去实现网络,所以现代 网络都是分层去讨论的。
理论层次:OSI 7层
实际层次:TCP/IP 5层(重要)
实际层次:
应用层(application layer)
传输层(transmission layer)
网络层(network layer)
数据链路层(data link layer)
物理层(physical layer)
传输层及以上实现了进程到进程
网络层及以下实现了主机到主机
广域网(Wide Area Network WAN)
局域网组合形成广域网(世界)
局域网(Local Area Network LAN)
被路由器网线连接起来的设备(假设国家)
对于LAN,主机直接是可以直接通信的
网络设备:集线器(hub),交换机(switch)
集线器
就相当于插座,把所有的数据复制一遍,向所有口发送
消息中带有携带目标消息,只要目标主机接受数据,其他主机直接忽略
职责:数据链路层——解决一个局域网内部的数据通信问题
工作在物理层
交换机(swich)
交换机是可以知道数据发送给哪个目标,只会把数据交给对引得主机
工作在数据链路层
路由器(router)
解决跨局域网的通信问题(就相当于海关),这也是网络层要解决的问题
所以路由器工作在网络层
网络层协议:IP、ICMP
传输层
解决进程对进程通信的问题
协议:TCP、UDP
应用层
在解决了通信问题的情况下,各个业务是具体怎样通信的
协议:DNS、HTTP(S)
总结如图所示:
MAC地址
物理地址:绑定在网卡上的一个地址(硬件地址),MAC地址是“绝对唯一”的
用于数据链路层
IP地址
一个网络内部的IP地址,不应该重复。(软件地址)
用于网络层
端口(port)
一个主机内部区分不同进程的;两字节的无符号数(0~65525)
要求在一个进程内不重复
在传输层
在通信上层主要依赖于 IP和port。
通过IP地址,一定可以唯一地 确定网络中的一台主机
通过port,一定可以唯一地确定主机内部的一个进程;
所以ip:port 唯一确定网络中的一个进程
例如:
通信主体A:ip1:port1
通信主体B:ip2:port2
四元组:唯一确定网络中的一条通信“线路”
发送ip:发送port+目标ip:目标port
本地ip:本地port+远端ip:远端port
五元组;协议:ip1:port1:ip2:port2(协议就是传输层的协议TCP/UDP)
进程和端口的关系
一个进程可以同时绑定多个端口
一个端口同一时刻,只能属于一个进程
程序 1:m 进程
协议(Protocol)
封装:
数据链路层:数据帧(frame)
网络层:数据包(packet)
传输层:TCP-段(segment)、UDP-报文(datagram)
应用层:请求-响应 模型,订阅-推送 模型
HTTP:请求(Request),响应(Response)
网络的分布式架构造成以下特点
1.数据在整个通信线路上对于线路中的设备实际上是透明的(存在数据监听和数据篡改的风险)
2.网络在发送中天生是不可靠的(不保证数据一定能发送给对方)
3.来回的线路并不保证一致
应用层协议(请求-响应)
发送请求的:客户端(client)
发送响应的:服务端(server)
时序上:服务端先启动,绑定(bind)一个端口(有可能出现错误)