TCP/IP五层模型:
模型介绍:
分层的好处:
对通信协议在不同的通信环境中进行封装,不同层次使用不同的协议,提供不同的服务;将通信环境划分出来,通信的实现更加简单,容易形成规范
网络协议分层主要有OSI七层模型与TCP/IP五层模型,我们主要学习的是TCP/IP五层模型
ISO:OSI七层模型:应用层/表示层/会话层/传输层/网络层/数据链路层/物理层
TCP/IP五层模型:应用层/传输层/网络层/链路层/物理层
TCP/IP是一组协议簇,其中TCP IP只是其中比较典型的两种而已
应用层:负责应用程序之间的数据沟通,例如QQ与QQ之间的通信协议协商QQ的数据格式;典型协议:HTTP/DNS/FTP
传输层:负责不同主机上进程间的数据传输,因为传输层的协议中包含的主要信息就是端口;典型协议:TCP/UDP
网络层:负责地址管理与路由选择;为网络中的数据选择合适的路径;关键信息是IP信息;典型协议:IP协议/NAT,NATP/ICMP;典型设备:路由器
链路层:负责相邻设备之间的数据帧识别以及传输;网卡设备的MAC地址信息;典型协议:以太网协议;典型设备:交换机
物理层:负责物理光电信号的传输;典型协议:以太网协议;典型设备:集线器
网络通信中数据传输的流程:
数据链路层不仅会加一个头部,还会为数据包加一个用于CRC校验的尾部
网络字节序:
字节序:CPU在内存中对数据的存取顺序 – 取决于CPU架构
Cpu架构:x86架构cpu – 小端 / mips架构cpu – 大端
0x 01020304 01是高位,04是低位
大端字节序:低地址存高位 a[0] = 01 a[1] = 02…
小端字节序:低地址存低位 a[0] = 04 a[1] = 03…
主机字节序:当前主机的字节序
为什么要对主机字节序进行转换?
网络通信是不同主机上的通信,但是不同的主机上的主机字节序会对通信造成极大的影响:数据二异
因此网络通信中必须统一字节序,才能避免出现这种问题,不管主机是大端还是小端,网络通信的时候统一将数据转换为网络字节序—大端字节序
并不是所有的数据都需要转换:只有在内存中一次存取大小超过一个字节的数据才需要转换—字符串不需要转换
如果主机是小端主机则在网络通信时需要将数据进行字节序转换才能发送
需要转换的是小端主机,大端是不需要转换的
如何判断一个主机的字节序是大端还是小端
Union tmp
{
Int a;
Char b;
};
tmp.a = 1;
If(Tmp.b == 1) 小端
多进程/多线程的TCP服务器程序编写:一个执行流负责获取新连接,新连接到来创建新的执行流与客户端进行通信
等待客户端连接、与客户端进行通信都可能会使进程阻塞,所以我们使用多进程/线程的方式,把可能会阻塞的地方分摊到执行流当中
应用层:
应用层协议在之前的博客中有详细描述,戳他!👇
应用层协议
传输层:
传输层协议在之前的博客中有详细描述,戳他!!👇
传输层协议
网络层:
传输层协议在之前的博客中有详细描述,戳他!!!👇
网络层协议
数据链路层:
数据链路层协议在之前的博客中有详细描述,戳他!!!!👇
链路层协议
物理层:
物理层就是负责电信号与光信号的传输的,传输数据的单位是比特
代理:
一台主机想上谷歌网站,但是因为谷歌是国外的,不能直接上,我们可以采取"曲线救国"
打游戏时如果我们上的是国外的服务器,通常会要使用加速器,否则丢包延迟会很严重,加速器的原理也是代理
代理和NAT的区别:
买东西,让我同学给我捎一个----我要在厂家买,只是让同学捎了一下(NAT)
买东西,直接在本地商店买----直接在商店买(代理)
NAT服务通常部署在网关设备上,运行在网络层,进行源地址替换,目的主机一直是指定服务器
代理服务是一种应用,可以部署在任意设备上,运行在应用层,目的主机首先请求代理服务器,是为了让代理服务器替自己请求