目录
[一. 网络协议](#一. 网络协议)
[二. OSI 模型与TCP/IP协议](#二. OSI 模型与TCP/IP协议)
[2.1 协议说明](#2.1 协议说明)
[2.2 局域网分类](#2.2 局域网分类)
[2.4 MAC地址与IP地址](#2.4 MAC地址与IP地址)
[三. IP与端口 ⭐](#三. IP与端口 ⭐)
[四. TCP与UDP](#四. TCP与UDP)
[五. 大小端与网络字节序](#五. 大小端与网络字节序)
一. 网络协议
网络协议是一种约定,用于通信双方减少通信成本。并处理网络通信过程中的数据错误,数据丢失等问题。
系统和网络都有很多分层的原因是:
1 低耦合,减少模块之间的联系和依赖,方便调试和拓展
2 高内聚,将功能相似的模块放在一层,专门解决一类问题,方便其他模块使用
3 不同层解决不同的问题,层与层之间出错就容易定位和修改
通信协议需要解决的问题:
1 如何将数据交付给目的主机(或者说协议的上层和下层)?
2 如何处理错误和丢失的数据?
3 通信的路径是如何选择的?
4 数据如何转化为可以应用的数据?
二. OSI 模型与TCP/IP协议
OSI模型从下到上是:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
TCP/IP对OSI模型进行了整合:
物理层:比如集线器,调制解调器就是物理层设备。是数据真实传输的通道
数据链路层:网卡,交换机等设备:用于解决将数据传递给下一台主机
网络层:路由器:管理地址和路由用于解决 网络传输的路径选择问题
传输层:TCP/UDP协议等内容,用于处理数据的错误,丢失,传递速度等问题
应用层:解决抽象问题的层,比如解析数据,合成数据,协议定制等问题
2.1 协议说明
网络协议首先需要有一个协议报头,数据向上层传递的时候,需要去除自己的报头,然后才能向上交付,即解包分用。数据向下层传递的时候,需要添加下一层协议的报头,然后才能向下层交付。
2.2 局域网分类
1 以太网,以太网中,一台主机向所有的主机发送消息。与回复这台主机的主机进行通信,不过这种方式有问题。如果两台或者多台主机同时向某一台主机发送消息,就会导致消息的覆盖。
为了解决这个问题:以太网规定:同一时刻,只能有一台主机可以发送信息。这样就能减少消息的碰撞。其他网络中的资源也是共享资源,需要保护。
2 令牌环网,类似于锁机制。只有拿到令牌的主机才能发送信息。
3 无线LAN:就是常用的WIFI
2.3 路由器
在以太网中,由于同一时刻只有一台主机可以发送信息,随着局域网主机的增多,必然会导致资源竞争。导致网络通信的效率降低。
为了解决这一问题,当代网络通过路由器这个机器解决。
路由器:顾名思义,就是给信息路由的。告诉这条信息应该发送到何处。路由器一般是横跨两个网络的,两个网络主机通过路由器交互。
由于有IP协议,即便硬件使用不同的协议,也能通过IP协议进行通信!
现代网络看上去是任意两台主机通信,本质确实通过一台台主机单对单通信传递过去的!
2.4 MAC地址与IP地址
MAC地址是主机的物理地址用于提供通信的可行性 ,IP地址是网络通信的地址,用于提供通信的来源和目标。
三. IP与端口 ⭐
3.1 源IP与目的IP
源IP是指网络通信发起方主机的IP地址,目的IP是数据发送对象主机的IP地址。网络通信需要源IP和目的IP用于判断这个信息的发送方向和发送方是否正确。
3.2 端口
有了源IP和目的IP就能够保证双方通信的对象不出错误吗?
比如,数据发到目的主机了,数据到底是发送到哪一个进程呢?谁来接收这个数据?
两台主机的通信本质是:主机中的两个进程通信
所以在网络通信中,需要端口来表示通信的进程。所以,网络通信通过 IP + port来标识全网络中的唯一一个进程。这样就能实现两个不同网络进程之间的通信。
问题:不是有pid来标识一个进程吗?为何还需要使用端口来表示进程?
因为这样能够保证系统和网络之间的解耦,符合高内聚,低耦合的设计原理。 一般来说,一个服务器是通过 ip + 固定端口来表示自己的唯一性,如果使用pid,就会不断的改变,不利于其他主机的访问
通信建立的时候,在OS内核会将端口 + pid 建立一个映射关系。通信的时候,通过这个映射关系就能找到进程进行读写数据
四. TCP与UDP
TCP/UDP是传输层协议,**也是网络编程与接口使用的基础,**这里进行简单介绍各自的特定
TCP:可靠传输,面向字节流,有连接
UDP:不保证可靠传输,面向数据报,无连接
注:能否可靠传输是一种特性,无褒贬的意思
五. 大小端与网络字节序
大小端存储是计算机的基础知识
大端存储:符合人类直觉,内存低地址处存储数据的有效高位
小端存储:符合计算机逻辑计算,内存低地址处存储有效数据的低位
举例如下:
数据是 0x 12 34 56 78 那么12是数据高位,78是数据低位
低地址 ------------------------------------------------->高地址
大端 12 34 56 78
小端 78 56 34 12
这个与网络有什么关系呢?目前来说,大部分计算机都采用小端存储方式存储数据。而网络协议是在小端存储成为主流之前就定制好了 ,网络使用大端的方式来存储网络数据。
因为,我们在接收数据的时候,需要将本地的数据转化为大端发送到网络,收到的网络数据也需要转化为小端之后再去读取数据。