目录
1.网络基础模型
1.OSI七层模型
2.TCP/IP五层(或四层)模型
2.网络协议数据传输过程
1.同一个局域网中
2.主机之间的传输过程
3.不同局域网中
编辑
网络通信的基本脉络示意图:
3.端口号
1.网络基础模型
相同层的协议一定是相同的,但是不同层影响不大,一层协议改变了,不会导致其他层的改变,体现了不同层的低耦合,相同层的高耦合的性质。
1.OSI七层模型
1.把网络从逻辑上分为7层,每一层都有相关、相对应的物理设备,比如路由器,交换机;
2.OSI七层模型是一种框架的设计方法,其主要的功能就是帮助不同类型的主机实现数据传输;
3.它最大的优点是将服务、接口和协议这三个概念明确地分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统的网络之间实现可靠的通讯;
4.但是,他既复杂又不实用,所以我们大部分使用的是TCP/IP四层模型来讲解;
2.TCP/IP五层(或四层)模型
物理层我们考虑的比较少,因此很多时候也可以TCP/IP四层模型。
1.应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层。
2.传输层:负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
3.网络层:负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
4.数据链路层:负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层。
一般而言:
1.对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。
2.对于一台路由器,他实现了从网络层到物理层的内容。
3.对于一台交换机,他实现了从数据链路到物理层。
4.对于集线器,他只实现了物理层。
但并不绝对,很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)。
2.网络协议数据传输过程
1.同一个局域网中
1.网络协议栈的层状结构中,每一层都有协议。
每一层都要添加报头(相当于添加当层的协议)
1.由上述可知,几乎任何层的协议,都要提供一种能力,将报头和有效载荷分离的能力。
2.几乎任何协议,都要在报头提供,决定将自己的有效载荷交付给上层的哪一个协议的能力。
2.主机之间的传输过程
他们都同时暴露在一个局域网中,那么H1发送数据,其他主机也一定可以看到。那么其他主机也可以发送数据,那么数据之间就会发生碰撞,所以每一台主机都要进行碰撞避免的算法。(其实原理很简单,是否判断接受的主机是否可以接受正确的数据,那么既然数据是裸露的,那么主机自己也可以接受到自己发送的数据,那么就自己接受看看是否正确就好了)。但是可以通过像进程通信那样加锁也一样可以解决!所以网卡的工作
还有减少上述功能的复杂度的方法,就是在这些中间加一个交换机:划分碰撞域。
3.不同局域网中
其中的IP是不会改变的,它是记录的是来源是哪?去哪里?但是mac地址记录的则是中途的一些路径,所以会不断地改变。
令牌环协议,就是让不同地方的以太网协议可能不一样,通过令牌环改变就好了。
linux指令也可以看自己的主机IP
这个是windows系统的:
网络通信的基本脉络示意图:
3.端口号
1.网络协议的下三层主要解决的是:数据可靠的送到远端机器。
2.用户使用应用层软件,完成数据发送和接收的。
可以注意到,把软件启动起来,其实就是进程的执行:
但是当一个信号传输到该手机上,那么如何去识别是哪一个软件(哪一个进程)呢?这已经不管IP地址的事了!所以就有了端口号(也可以理解为应用层报头所要添加的内容)这一说:
但是我就要有一个疑问了,端口号是可以识别唯一进程的,但是进程的pid也是唯一的吧,为什么不直接使用pid呢?
1.不是所有的进程都要网络,但是所有进程都要pid(这只是一个很小的理由)
2.使用端口号,可以让系统和网络功能解耦。也对应上了第一句话:不同层的低耦合,相同层的高耦合的性质。
1.所以自己的应用是可以该端口的,服务器一般是不改的!(应用发给服务器时,应该就带有自己的端口号一起发给服务器,这样服务器就可以发送你当前用户了)。
2.一个进程可以绑定多个端口号,但是一个端口号不可以被多个进程绑定(符合从哈希表能对应到应用上就可以了)