一、协议初识
1.协议是一种约定
计算机之间的传输媒介是光信号和电信号,通过'频率'和'强弱'来表示0和1这样的信息,要传递各种不同的信息,就需要约定好双方的数据格式
2.软件分层
协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计为层状结构
二、OSI七层模型
OSI(open system interconnection 开放系统互连)七层网络模型称为开放式系统互连参考模型,是一种逻辑上的定义和规范
把网络从逻辑上分成了7层,每一层都有相关、相对应的物理设备
OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同的主机实现数据传输
其最大的优点是将服务、接口和协议这三个概念明确地区分开来,理论也较完整,通过七个层次化的结构模型使不同系统的网络之间实现可靠的通讯,但复杂且不实用


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

物理层我们考虑的比较少,我们只考虑软件相关的内容,很多时候我们直接称为TCP/IP四层模型
一般而言:
对于一台主机,其操作系统内核实现了从传输层到物理层的内容;
对于一台路由器,它实现了从网络层到物理层
对于一台交换机,它实现了从数据链路层到物理层
对于集线器,只实现了物理层
四、再识协议
1.为什么要有TCP/IP协议
首先,即便是单机,你的计算机内部其实都是存在协议的,比如其他设备和内存通信,会有内存协议,其他设备和磁盘通信,会有磁盘相关的协议,不过我们感知不带,这些协议都在主机各自的硬件通信中,通信的成本、问题都较少
其次,网络通信最大的特点就是主机之间变远了,任何通信特征的变化,一定会带来新的问题,也就需要新的协议
TCP/IP协议本质上是一种解决方案
TCP/IP协议能分层,前提是因为问题本身能分层
2.TCP/IP协议与操作系统的关系(宏观)

协议的朴素理解:
所谓协议,就是通信双方都认识的结构化的数据类型
五、网络传输基本流程
1.局域网网络传输流程
MAC地址:
MAC地址用来识别数据链路层中相连的结点
长度为48个比特位,六个字节,一般用16进制数字加上冒号的形式来表示
MAC地址在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的2
在以太网中,任何时刻都只允许一台主机向网络中发送数据
如果有多台同时发送,会产生数据干扰,我们称之为数据碰撞
发送数据的主机要进行碰撞检测和碰撞避免
没有交换机的情况下,一个以太网就是一个碰撞域
局域网通信的过程中,主机收到的报文确认是否是发给自己的,是通过目标MAC地址判断

同一网段内的两台主机进行发送消息的过程:

每一层都有协议,所以当我进行上述传输流程时,要进行封装个解包


报头部分,就是对应协议层的结构体字段,我们一般叫做报头
除了报头,剩下的叫做有效载荷,所以报文 = 报头 + 有效载荷
明确一下不同层的完整报文的叫法:
不同的协议层对数据包有着不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)
应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装
首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息
数据封装成帧后发到传输介质上,到达目的的主机后每层协议再剥掉相应的首部,根据首部中的上层协议字段,将数据交给对应的上层协议处理


在网络传输的过程中,数据不是直接发送给对方主机,而是先要自定向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来接受,自底向上交付:

2.跨网络传输流程
网络中的地址管理:IP地址
IP协议有两个版本,IPV4和IPV6,IP地址是在IP协议中用来标识网络中不同主机的地址
对于IPV4来说,IP地址是4个字节,32位整数
跨网段主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器

对比IP地址和MAC地址的区别:
IP地址在整个路由过程中,一直不变
MAC地址一直在变
目的IP是一种长远的目标,MAC地址是下一阶段目标,目的IP是路径选择的重要依据,MAC地址是局域网转发的重要依据

IP网络层存在的意义:提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽最底层网络的差异
六、Socket编程预备
1.理解源IP地址和目的地址IP
IP在网络层:用来标识主机的唯一性
2.认识端口号
端口号(port)是传输层协议的内容
端口号是一个2字节16位的整数
端口号用来标识一个进程,告诉操作系统,当前的这个数据要交给哪一个进程来处理
IP地址+端口号能够标识网络上的某一台主机的某一个进程
一个端口号只能被一个进程占用

端口号范围划分:
0~1023:知名端口号,HTTP,FTP,SSH等这些广为使用的引用层协议,他们的端口号都是固定 的
1024~65535:操作系统动态分配的端口号,客户端程序的端口号就是由操作系统 从这个范围分配的
理解端口号和进程ID:
一个进程可以绑定多个端口号,但是一个端口号不能被多个进程绑定
进程PID属于系统概念,技术上也具有唯一性,确实可以用来标识唯一的一个进程,但是这样做,会让系统进程管理和网络强耦合
3.理解socket:
综上,IP地址用来标识互联网中唯一的一台主机,port用来标识该主机上唯一一个网络进程
IP+Port就能表示互联网中唯一的一个进程
所以通信时,本质是两个互联网进程代表人来进行通信
{srcip,srcport,dstip,dstport}这样的四元组就能标识互联网中唯二的两个进程
所以网络通信的本质就是进程间通信
我们把IP+Port叫做套接字socket
传输层的典型代表:
TCP协议:
传输层协议、有连接、可靠传输、面向字节流
UDP协议:
传输层协议、无连接、不可靠传输、面相数据报
4.socket编程接口
socket常见API
