固原网站建设,wordpress mysql储存,网站建设客户需求分析调研表,企业网络建站文章目录一、前沿知识应用层传输层二、UDP协议一、前沿知识
应用层
应用层#xff1a;描述了应用程序如何理解和使用网络中的通信数据。 我们程序员在应用层的主要工作是自定义协议#xff0c;因为下面四层都在系统内核/驱动程序/硬件中已经实现好了#xff0c;不能去修改… 文章目录一、前沿知识应用层传输层二、UDP协议一、前沿知识
应用层
应用层描述了应用程序如何理解和使用网络中的通信数据。 我们程序员在应用层的主要工作是自定义协议因为下面四层都在系统内核/驱动程序/硬件中已经实现好了不能去修改。 自定义协议需要做好两件事 1.明确协议要传递那些信息 2.确定数据组织格式: xml,json,protobuffer 当然我们的应用层也有一些成品的协议HTTP协议
传输层
传输层是紧接着应用层的一层虽然传输层已经被操作系统内核实现好了但是我们在写代码的时候要调用系统的Socket api去完成网络编程
端口号 IP是用来确定网上上的一台主机那么端口号就是用来确定主机上的一个进程的端口号是传输层的一个概念 TCP和UDP协议的报头中都会包含源端口和目的端口并且都是使用2个字节16bit来表示端口号的范围是 0 - 65535但是我们日常使用一般都是从1024开始的因为0 - 1023这个范围的端口系统已经分配给了一些知名的应用程序了也称这些端口为 知名端口号/具名端口号. 虽然我们建议1023以下的端口别使用但不代表完全不能使用虽然这些端口分配给了特定程序但是这些程序是否在主机运行着是否安装了这些程序都是不确定的如果我们想要使用1023以下的这些端口需要注意以下2点 1.确定这个端口是否有程序在绑定 2.是否具有管理员权限。
二、UDP协议
我们在前面为大家介绍过了UDP协议的一些特点无连接不可靠面向数据报全双工这些特性在我们实现回显UDP服务器客户端程序的时候有所体现那么今天我们来研究以下UDP协议的报文结构。 相信学过计算机网络这门课的小伙伴们看到这张图都不陌生但实际上我们课本这样画是为了排版方便。 UDP的载荷数据就是通过UDP socket send()要发送的数据在前面拼接上8个字节的报头) 我们来看一下UDP报头所包含的信息UDP报头一共8个字节4个部分每部分占2个字节但正是因为我们的UDP报文的长度也受到了限制UDP报文长度是用2个字节表示的2个字节表示0 - 65535(64KB)也就表示了我们UDP数据报最大只能传输64KB的数据。 相信有同学会问如果我想传一个大于64KB的数据报呢 有两种解决办法 1.我们应用层在代码层面将我们要传输的数据报进行分包通过多个UDP数据报进行发送。 如果采用1本来我们send一次现在需要多次send就好比我们扔垃圾垃圾太多一个小袋子装不下需要装许多个装垃圾提垃圾倒垃圾都比较麻烦基于上面这种情况我们可以直接用一个超大垃圾袋一次性就搞定了这也是第二种方案。 2.不使用UDP使用TCPTCP没有长度限制。
我们报头信息中还有源端口和目的端口信息我们的一次网络通信涉及到五元组源IP源端口目的IP目的端口协议类型端口信息就是由我们传输层体现的。
校验和验证传输的数据是否是正确的我们在网络传输中往往不是一帆风顺的可能会受到一些干扰在这些干扰下可能会出现比特翻转的现象 0 - 11 - 0的现象。 我们网络传输中物理层传输的本质就是光信号/电信号这些信号会受到一些物理环境的影响比如电磁场高能射线等等有时候仅仅是一个比特位的变化对于原本数据的含义就发生了致命的变化我们对于这些不可避免的现象只能是及时识别当前的数据是否出现问题。 因此就引入了校验和来干这一项工作针对数据内容进行一系列的数学运算得到一个短小的结果如果我们的数据内容一定那么我们得到的校验和就是一定的如果我们的数据变了那么我们的校验和就变了。 我们接收方在接收到数据之后会在计算一边校验和看看是否和发送方发来的校验码对的上如果对上了就证明传输没问题如果对不上证明传输出错了。 我们根据收到的数据我要吃火锅计算出了0x1122发现和接收到校验码一致证明我们这次数据传输没问题。 我们根据接收到的数据我要吃烤肉计算出来0x5566发现和接收到的校验码不一致证明我们的传输出错了。 当然有同学肯定想到了是否存在一种这样的情况我们接收到不同的数据但是计算出的校验码恰好相同这种情况理论上是存在的但是概率特别小就忽略不计了。
我们网络传输中生成校验和的算法有很多我们这里只介绍比较知名的几个 CRC(循环冗余校验) 实际的CRC校验码生成是采用二进制的模2算法即减法不借位、加法不进位计算出来的这是一种异或操作。这种方法比较好算但是校验的效果不够理想。 MD5 MD5是使用一系列公式来进行更复杂的数学运算具有以下几个特点 1.定长无论原始数据多长得到的MD5值都是固定长度(4/8字节) 2.冲突概率小我们的原始数据即使变动了一点点算出来的MD5值的差别都很大(MD5结果更分散了) 3.不可逆我们通过原始数据即使出MD5比较容易但是通过MD5还原成原始数据很难理论上是不可实现的。 基于MD5的这些特点MD5的应用场景就有许多了 1.校验和 2.加密 3.计算Hash值 可能大家在网上会看到一些MD5的方法其实也很好理解有人将一些常见的字符串的MD5值进行汇总成一张表解密的过程相当于查表但仅限于一些常见的字符串其他也查不到。 SHA1 SHA1和MD5类型这里就不具体介绍了感兴趣的同学可以上网查询下资料。