计算机之间相互独立
网络互联,多台计算机连在一起,完成数据共享。

局域网LAN,计算机数量更多了,通过交换机和路由器连在一起。

广域网WAN,将远隔千里的计算机连在一起。

一、初识协议
"协议"是一种约定,计算器之间的传输媒介是光信号和电信号,通过"频率"和"强弱"来表示0和1这样的信息,要想传递各种不同的信息,就需要约定好双方的数据格式。
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司。
二、协议分层
软件级别的"协议",协议分层--软件分层。
协议本质上也是软件,在设计上为了更好进行模块化,解耦合,也是被设计为层状结构。
软件分层的好处 
分层可以解耦合,使软件的维护成本更低。

三、OSI七层模型


TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
物理层,数据链路层,网络层,传输层,应用层。
1、物理层
负责光 / 电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的 WiFi 无线网使用电磁波等,都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗干扰性 等。集线器(Hub) 工作在物理层。
2、数据链路层
负责设备之间的数据帧的传送和识别。
例如网卡设备的驱动、帧同步(从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。
有以太网、令牌环网、无线 LAN 等标准。交换机(Switch) 工作在数据链路层。
3、网络层
负责地址管理和路由选择。
例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输线路(路由)。
路由器(Router) 工作在网络层。
4、传输层
负责两台主机之间的数据传输。
如传输控制协议(TCP),能够确保数据可靠地从源主机发送到目标主机。
5、应用层
负责应用程序间沟通。
如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
我们的网络编程主要就是针对应用层。
再谈协议:
图中的协议必须相同,指的是遵守TCP/IP协议,



双方都有同样的结构体类型struct protocol.也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就是具有"共识",能够识别对方发来的数据,这其实就是一种约定 。所谓的协议,就是通信双方都认识的结构化的数据类型。因为协议是分层的,所以每层都有双方协议,同层之间,互相可以认识对方的协议。
四、网络传输基本流程
1、局域网通信
两台主机在同一个局域网,可以直接通信;每一台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac地址。
mac地址,48比特位,硬件固定,一张网卡,一个mac地址,在网卡出厂时就确定了,不能修改,mac地址通常是唯一的。

1、以太网中,任何时刻,只允许一台机器向网络中发送数据。如果有多台发送,会发生数据干扰,我们称之为数据碰撞。
2、所有发送数据的主机要进行碰撞检测和碰撞避免。
3、以太网碰撞域,任何主机都可以进行碰撞检测。(碰撞避免算法(让碰撞的主机进行休眠一段时间进行碰撞避免)那么此时其他的主机就可以趁空发送了!)
4、局域网通信,就是基于碰撞检测和碰撞避免的不断重试的过程。(此过程由数据链路层自主完成)
5、可以把以太网想象为一种临界资源。
6、在局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定的。
如下图就是在同一网段内,两台主机发送消息的过程:

而其中每一层都有协议,所以当我进行上述流程的时候,要进行封装和解包。封装和解包的过程就是一次入栈和出栈的过程。

2、跨网络通信
IP地址:侧重点更多的是:标识公网中唯一一台主机,IP主机定位和路径选择问题(学号)。
IP协议有两个版本,IPv4和IPv6,一般就是IPv4.
IP 地址属于 IP 协议,作用是标识网络中不同主机的地址;
对于 IPv4 协议:IP 地址是 4 字节、32 位 的整数;
日常使用点分十进制 字符串表示 IP 地址,示例:192.168.0.1;
以点分割的每一段数字,对应 1 个字节 ,取值范围:0~255。
Mac地址和IP地址的理解
举个例子,在西游记中唐增取经,他的目的是从东土大唐到西天拜佛求经去,
src:东土大唐dst:西天,这是长远目标,是一直不变的。这就是IP地址
在这个过程中,要经历九九八十一难,例如last_src:车迟国,last_dst:女儿国
上一站从哪里来,下一站到哪里去(是一直在变化的),这就是Mac地址。
总结:IP地址提供长远目标,是路径选择的依据,mac地址是当下或者下一跳地址,解决的是局域网转发的问题。



理解源IP地址和目的IP地址----->保证主机之间进行通信。
数据传输到主机不是目的,而是手段。到达主机内部,再交给主机内的进程,才是目的。
但是系统中会同时存在非常多的进程,当数据到达目标主机之后,如何转发给目标进程?这就需要在网络环境下,在系统中标识主机与进程的唯一性。
3、认识端口号



问题:


Socket
IP地址用来标识互联网唯一的一台主机,port用来标识该主机上唯一的一个网络进程。
IP+Port=标识互联网中唯一的一个进程。
在通信的时候,本质是两个互联网进程代表人来进行通信(srcIP,srcPort,dstIP,dstPort)这样的4元组就能标识互联网中唯二的两个进程。
所以网络通信的本质也是进程间通信,本地进程间的通信System V
网络通信posix通信。
我们把IP+Port=socket套接字
