
两个主机一系列的约定就叫做协议,协议中约定的细节就表示传输的数据表达的意义,两个主机之间传输数据的本质就是光电信号,表示1/0这样的bit流
由于任意两台主机之间都需要进行通信,所以所有主机都遵守同一个协议,彼此才能进行交流
网络通信要规定的细节是非常多的,如果放在一起就会显得非常复杂,把不同的细节由不同的协议规定,于是就有了很多协议,又根据协议的功能类型,把这些协议分为 协议栈/协议族
OSI:七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范
七层模型:越往上就越接近客户(客户端),越往下就越接近计算机(硬件设备)
优点:将服务、接口、协议这三个概念明确的区分出来,但是既复杂又不实用
应用层:针对特定应用的协议
表示层:设备固有的数据格式与网络标准数据格式的转换
会话层:通信管理,负责建立和断开通信连接,管理传输层以下的分层
传输层:管理两个节点之间的数据传输,确保数据可靠的传送到目标地址
网络层:地址管理和路由选择
数据链路层:互连设备之间传送和识别数据帧
物理层:以0/1表示电压的高低,灯光的闪灭。界定连接器和网线的规格
TCP/IP五层模型(如果是四层,则不包含物理层)
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫他的下一层所提供的网络来完成自己的需求。
物理层:负责光电信号的传递方式,比如现在以太网通用的网线(双绞线),早期采用的同轴电缆、光纤,现在的wifi无线网使用的电磁波都属于物理层的概念,物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器工作在物理层
数据链路层:负责设备之间数据帧的传送和识别,例如网卡设备的驱动、帧同步、冲突检测、数据差错校验等工作。交换机工作在数据链路层
网络层:负责地址管理和路由选择,例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路。路由器工作在网络层
传输层:负责两台主机之间的数据传输,如传输控制协议。能够确保源数据可靠的从源主机发送到目标主机
应用层:负责应用程序间沟通,如简单的电子邮件传输、文件传输协议、网络远程访问协议等,我们网络编程主要就是针对应用层
一般而言,对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。对于一台路由器,它实现了从网络层到物理层的内容(有的路由器也实现了传输层的内容)。对于一台交换机,它实现了从数据链路层到物理层的内容(有的交换机也实现了网络层的转发)。对于集线器,只实现了物理层
应用层,就是和应用程序密切相关的,HTTP协议就是一种常见的应用层协议。程序员可以自己约定一些协议
传输层:传输层和网络层是操作系统内核实现好的,程序员不能对其进行修改,核心功能就是完成 端对端 的数据传输,最常见的协议就是UDP和TCP
端口号标识了一个主机上进行通信的不同的应用程序 在TCP/IP协议中,用 源IP、源端口号、目的IP、目的端口号、协议号 这样的五元组来标识一个通信
端口号的范围区分:
0-1023:知名端口号。HTTP、FTP、SSH这些广为使用的应用层协议,他们的端口号都是固定的
1024-65535:操作系统动态分配的端口号,客户端程序的端口号,就是由操作系统从这个范围进行分配的
如:
22 SSH服务器
21 FTP服务器
23 TELENT服务器
80 HTTP服务器
443 HTTPS服务器
我们自己写程序时,要避开这些端口号
UDP协议端的格式大致分为两部分,UDP报头与UDP数据部分,如图:
16位的校验和:用来验证数据准确无误的数据,但是只能一定程度上来检验数据数据是否准确,并不能百分之百的保证
UDP的特点:
无连接:知道目的端口和目的IP就直接进行传输,不需要建立链接
不可靠:只传输,不论成败,若因为网络故障等传输失败,不会给应用层返回错误信息
面向数据报:不能灵活的控制读写数据的次数和数量,在面对一个较大文件时,不会对其进行拆分、合并,只能一味的进行传输
UDP优点:
传输速度快
能够支持广播
因此 UDP不适合传输比较大的数据,对于要求效率高,可靠性不高的场景下会考虑使用UDP协议,如机房
TCP的核心机制:
确认应答机制(保证可靠性的核心机制。可靠性,就是为了应对丢包)
超时重传机制(避免丢包后重复发送信息,根据序号实现)
TCP保证可靠性就是单纯的 确认应答机制 + 超时重传机制
TCP为了保证可靠性,还有一个重要的机制 连接管理机制
连接管理机制就是在确认建立了连接之后,用一些数据结构/对象来保护连接相关的信息,并为后面的通信进行服务。
三次握手就是形容TCP建立连接的流程
四次挥手就是形容TCP断开连接的流程
建立连接
三次握手的本质就是确认通信双方的发送能力和接收能力都正常
当确定了通信双发发送和接收能力都正常时,再开始传输数据。这个环节就
奠定了可靠性的基础
断开连接
由于建立连接后需要在系统内核中维护这些连接,就导致了系统资源的占用,所以在连接使用完毕时,应当断开连接,释放资源
四次挥手:
其实在三次握手和四次挥手之间也会涉及到 确认应答 和 超时重传 机制
发送方:
假设使用QQ来给另外一个好友发送一条消息,QQ程序接收用户要发送的信息,并把信息包装成一个应用层数据报(包含发送信息等属性)
应用层就把这个应用层协议的数据报交给传输层
传输层的TCP协议把这个应用层的数据打包成一个TCP的数据报(TCP报头)(包含发送信息之外,还包含了源端口和目的端口等信息)
传输层协议把这个数据报交给网络层协议
网络层的IP协议把这个传输层输出的数据打包成一个网络数据报(IP报头)(包含上述信息之外,还包含了源IP和目的IP等信息)
网络层协议把这个数据报交给数据链路层
数据链路层(主要协议 以太网 )把这个数据报在打包成一个数据链路层的数据报(帧头帧尾)(包含了上述信息外,还包含源mac和目的mac等信息)
数据链路层把打包好的数据报交给物理层
物理层把这一串数据转化成光/电信号,进行传输
接收方:
物理层接收到光/电信号,把数据进行分析,还原成二进制的比特流。
物理层把这个二进制的比特流交给数据链路层
数据链路层拿到一个以太网数据帧,以太网协议解析这个数据帧并去掉帧头帧尾
数据链路层把中间的部分交给网络层
网络层拿到一个IP协议数据报,IP协议解析数据报,去掉报头
网络层把剩下的部分交给传输层
传输层拿到一个TCP协议数据报,TCP协议解析数据报,去掉报头
传输层把剩下的部分交给应用层
应用层拿到这个数据报,交给应用程序,应用程序通过分析数据报得到消息本身相关信息。
我们把发送方对数据的处理叫做封装,接受方对数据的处理叫做分用。
协议分层,意义就是为了能够降低模块之间的耦合,降低人们的使用和学习成本,并且可以灵活替换
IP地址和mac地址都代表一个主机,实际上IP地址不能做到一一对应,但是mac地址是可以与主机一一对应的
UDP和TCP 的区别:
UDP协议无连接,TCP协议有链接
UDP协议是不可靠传输,TCP协议是可靠传输(可靠指的是能否知道数据是否发送成功,与安全无关)
UDP协议面向数据报,TCP协议面向字节流(数据报与字节都是传输数据的基本单位,一个数据报等于若干个字节。)
在网络传输中,存在后发先至的机制,比如传输一个比较大的数据报,把它切割成若干份,发送时按照顺序发送,但接收时的顺序就不一定与发送时的顺序一致了