创业做app哪个网站好,做网站有什么,做网站特别简单的软件,网站项目建设合同目录 网络分层 一. 应用层 http协议 二. 传输层 1. 介绍 2.UDP协议 (1)组成 (2)细节 3.TCP协议 (1)特性如下链接#xff1a; (2)组成 (3)特点 三. 网络层 四. 数据链路层 1.介绍 2.以太网协议 3.mac地址和ip地址 五. 物理层 DNS 网络分层 一. 应用层 应用程序 现成的… 目录 网络分层 一. 应用层 http协议 二. 传输层 1. 介绍 2.UDP协议 (1)组成 (2)细节 3.TCP协议 (1)特性如下链接 (2)组成 (3)特点 三. 网络层 四. 数据链路层 1.介绍 2.以太网协议 3.mac地址和ip地址 五. 物理层 DNS 网络分层 一. 应用层 应用程序 现成的应用层协议有超文本协议http(不仅仅有文本. http协议 http://t.csdnimg.cn/e0e8khttp://t.csdnimg.cn/e0e8k 自定义应用层协议包含需要传输的信息以及格式将信息转为字符串放入TCP或者UDP的socket中。常见传输格式xml最流行的是json但json仍然有网络带宽的消耗protobuffer是将信息压缩为二进制带宽消耗较小。 DNS介绍在最下面 二. 传输层
1. 介绍 关注起点和终点 主要有TCP和UDP : TCP有连接可靠传输面向字节流全双工。适用于需要确保数据完整性和顺序的场景。eg:文件传输状态更新。 UDP无连接不可靠传输面向数据报全双工接收缓冲区。适用于高速传输和对实时性要求较高的应用。 传输层一个重要概念端口号 固定占2个字节 表示范围0~655352^16-1 0一般不用1~1023是知名端口号如80是http的端口号22是ssh的端口号登录远程主机 2.UDP协议 (1)组成 UDP的首部长度固定为8个字节64位64k。它由源端口号、目标端口号、长度和校验和组成。每个字段都占用2个字节。 源端口号Source Port占用2个字节表示发送方使用的端口号。目标端口号Destination Port占用2个字节表示接收方使用的端口号。长度Length占用2个字节表示UDP首部和数据的总长度包括8字节的UDP首部和数据部分的长度。校验和Checksum占用2个字节用于检测UDP首部和数据在传输过程中是否发生错误。 UDP的简洁首部长度是其相对于TCP更轻量级的一个特点但也意味着它没有TCP那样的可靠性保证和流量控制机制。因此在使用UDP时需要注意数据的可靠性和完整性问题并根据具体应用场景决定是否需要额外的机制来处理这些问题。 (2)细节 ✅1.当udp数据报携带信息过大导致服务器与客户端交互的数据量接近64kb超过上限会导致数据阶段数据出错解决办法 1.将数据拆分为多个包使用多个UDP传输✕如何去拆包组包开发测试成本大。 2.使用TCP无包大小的限制✓ 3.升级UDP比较麻烦。✕UDP是在操作系统内核实现的. ✅2.网络传输中数据是有可能出错的如何基于校验和来完成数据校验呢? 1.发送方,把要发送的数据整理好(称为 data1),通过一定的算法, 计算出校验和 checksum1发送方把 data1 和 checksum1 -起通过网络发送出去. 2.接收方收到数据,收到的数据称为 data2 (数据可能和 data1 就不一样了),收到数据 checksum1 3.接收方再根据 data2 重新计算校验和(按照相同的算法)得到 checksum2 4.对比 checksum1 和 checksum2 是否相同.如果不同,则认为 data2 和 data1 一定不相同如 5.checksum1 和 checksum2 相, 则认为 data1 和 data2 大概率是相同的 理论上存在不同的可能性。 ✅3.在UDP中使用循环冗余校验CRC把需要进行校验和的数据的每个字节逐个累加把结果保存在两个字节的变量中累加过程溢出也没事。如果中间出现数据错误第二次的校验和就和第一次不也一样。 更严谨的是md5MD5进行了定长分散一个字节不同差异也很大不可逆。MD5也适合作为hash算法哈希表是把一个key通过hash函数转换为数组下标hash函数尽量分散哈希碰撞的可能从才能降低 ✅4.UDP特点寄信 UDP进行网络通信可以通过java.net包下的DatagramSocket和DatagramPacket类来实现 无连接知道对方ip和端口号即可连接 不可靠发送端发送数据报后如果因为网络问题并没有到接收方UDP协议也不会给应用层返回任何错误信息。 全双工可以通过一个socket进行send和reseive既能读也能写即全双工 缓冲区UDP只有接收缓冲区没有发送缓冲区。 UDP发送的数据会直接发送给内核由内核将数据传给网络层协议进行后续传输动作UDP具有接收缓冲区这个缓冲区不能保证受到道德UDP报的顺序与发送UDP报的顺序一致缓冲区满再到达的UDP报就会被 丢弃。 大小受限UDP协议首部有一个16位的最大长度2个字节也就是UDP能传输的最大长度是64KB包含UDP首部 面向数据报以DataGaramSocket为单位传输 DatagramPacket sendPacket new DatagramPacket(sendData, sendData.length, receiverAddress, receiverPort); UDP是一种面向数据报的无连接协议因此发送方和接收方之间不存在建立连接的过程也没有可靠性保证。每个UDP数据报都是独立的可能会丢失、重复或乱序。实际使用中可能需要考虑超时重传分片传。 import java.net.DatagramSocket;
import java.net.DatagramPacket;
import java.net.InetAddress;public class UDPExample {public static void main(String[] args) {try {// 创建发送方的UDP socketDatagramSocket senderSocket new DatagramSocket();// 准备要发送的数据String message Hello, UDP!;byte[] sendData message.getBytes();InetAddress receiverAddress InetAddress.getByName(127.0.0.1); // 接收方的IP地址int receiverPort 12345; // 接收方的端口号// 创建要发送的数据报文DatagramPacket sendPacket new DatagramPacket(sendData, sendData.length, receiverAddress, receiverPort);// 发送数据报文senderSocket.send(sendPacket);// 创建接收方的UDP socketDatagramSocket receiverSocket new DatagramSocket(receiverPort);// 准备接收数据的缓冲区byte[] receiveData new byte[1024];// 创建接收数据的数据报文DatagramPacket receivePacket new DatagramPacket(receiveData, receiveData.length);// 接收数据报文receiverSocket.receive(receivePacket);// 解析接收到的数据String receivedMessage new String(receivePacket.getData());System.out.println(Received message: receivedMessage);// 关闭socketsenderSocket.close();receiverSocket.close();} catch (Exception e) {e.printStackTrace();}}
}5.UDP无连接不可靠面向数据报的协议如果要基于传输层UDP协议来实现可靠传输应该如何设计大小有限制如果要基于传输层UDP协议传输超过64k的数据如何设计 参考TCP可靠性的实现 5.25.1分片重组序列化保证顺序5.1确认应答超时重传滑动窗口控制流量校验和....... 简单了解基于UDP的应用层协议 NFS: 网络文件系统 TFTP:简单文件传输协议 DHCP:动态主机配置协议 BOOTP:启动协议 (用于无盘设备启动) ·DNS: 域名解析协议 3.TCP协议 (1)特性如下链接 http://t.csdnimg.cn/NHMHb (2)组成 初心可靠传输~ 数据报首部报头载荷一行4个字节 报头长度是不固定的选项也是报头的一部分TCP报头包括固定部分和可选部分。固定部分的长度是20个字节160位包括源端口号、目标端口号、序列号、确认号、数据偏移、控制位、窗口大小、校验和和紧急指针等字 报头最短是20个字节没有选项最长是60个字节选项最多是40字节 保留位6位)有需要就用。比udp的64kb好。扩展余地。 TCP首部长度字段占用4个位即4个二进制位也就是4个字节32个比特位它使用4位来表示长度。由于4位最多能表示16个不同的取值从0000到1111因此TCP首部长度字段的取值范围是0-15表示TCP首部的长度是以32位此处设定4字节所以有4倍的设定关系为单位的倍数。也就是说长度值乘以4才得到TCP首部的实际长度。当TCP首部长度字段取值为5时长度为5 * 4 20字节即TCP首部固定部分的长度。 TCP协议的组成主要包括以下部分 源端口号Source Port占用2个字节表示发送方使用的端口号。目标端口号Destination Port占用2个字节表示接收方使用的端口号。序列号Sequence Number占用4个字节表示本次传输的第一个字节的序列号。确认号Acknowledgment Number占用4个字节表示期望接收到的下一个字节的序列号。数据偏移Data Offset占用4个位表示TCP首部长度单位为4字节因此TCP首部长度最大值为60字节。保留位Reserved占用6个位保留未来使用必须设置为0。控制位Flags占用6个位包含ACK、SYN、FIN等标志位用于控制TCP连接的建立、维护和关闭。其中ack为1表示它表示应答报文ack为0表示普通报文。SYN为。窗口大小Window Size占用2个字节表示接收窗口的缓冲区大小用于流量控制。检验和Checksum占用2个字节用于检测TCP首部和数据在传输过程中是否发生错误。紧急指针Urgent Pointer占用2个字节表示紧急数据的位置用于处理紧急数据。 (3)特点 有连接 Socket clientSocket serverSocket.accept();
accept方法会阻塞当前线程直到有客户端连接请求到达并被接受
记得抛出异常防止网络故障类问题 可靠传输面向字节流全双工既可以读也可以写 // 获取输入输出流
BufferedReader in new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out new PrintWriter(clientSocket.getOutputStream(), true); TCP的可靠不在于它是否可以把数据100%传输过去而是 1.发送方发去数据后可以知道接收方是否收到数据2.如果接收方没收到可以有补救手段 三. 网络层 关注路径规划很多路径到底如何走 地址管理制定一系列规则通过地址描述出网络中一个地址的位置。 路由选择ip数据报在网络中的转发。 IP协议链接如下http://t.csdnimg.cn/53Pts 四. 数据链路层
1.介绍 关注路径中节点的连接相邻节点之间如何转发 数据链路层的作用是在两个相邻节点之间提供可靠的数据传输服务 2.以太网协议 1以太网协议就是一种常见的数据链路层协议通过光纤网线来通信使用的协议以太网协议。横跨数据链路层和物理层。 2组成类型描述载荷数据是什莫类型 MTUMaximum Transmission Unit数据链路层数据包能携带的最大载荷长度。在以太网上传输的数据包大小不能超过1500个字节。会想起ip数据报的拆包组包很可能是因为mtu而不是64kb的上限。不同的数据链路层协议的MTU是不一样的也和物理层介质有关。 下面的两种 这里的6个字节目的地址2^48和源地址指的是mac地址。 .mac地址采用16进制表示两个十六进制数字就是1个字节。4个二进制位数字是一个字节表示0~15的数值 物理地址. . . . . . . . . . . . . : C4-75-AB-5C-9B-BB 在交换机中遇到 以太网数据帧 的时候就需要进行转发转发过程就需要根据mac地址判定数据从哪个网口转发。 转发表主要就通过arp协议生成 。 3.mac地址和ip地址 ip协议立足于全局关注整个网络通信过程的路径规划。 mac地址以太网协议关注相邻两个设备之间的通信过程。 eg:我从西安到北京源ip西安目的ip北京源mac:可能西安目的mac:可能河北 每次到达一个节点源mac和目的mac都会改变 sum: 1. 网络拓扑结构以太网规定了常见的拓扑结构如总线型、星型、环型等并规定了各种拓扑结构下的连接方式和限制条件。 2. 访问控制方式以太网使用CSMA/CD载波监听多点接入/碰撞检测协议来控制节点对共享媒体的访问以避免碰撞和冲突。 3. 传输速率以太网支持多种传输速率如10Mbps、100Mbps、1Gbps等其中10Mbps和100Mbps是最常见的。 4. 以太网帧格式以太网规定了数据在网络上的传输格式也就是以太网帧格式。它包含了目的MAC地址、源MAC地址、类型/长度字段和数据字段等。 5. MAC地址MAC地址是一个48位的硬件地址用于唯一标识网络上的每个设备。以太网使用MAC地址来进行帧的寻址和传输。 6. ARP协议ARP地址解析协议用于将IP地址转换为MAC地址。当一个设备需要与另一个设备进行通信时它需要知道目标设备的MAC地址而ARP协议就是用来解决这个问题的。 7. MTUMTU最大传输单元指的是数据链路层能够承载的最大数据包大小。以太网规定了不同传输速率下的MTU大小例如在10Mbps上MTU为1500字节。 五. 物理层 关注设备 DNS DNS是应用层协议也是一套域名解析系统。它使得域名能够被解析为对应的IP地址并提供了其他与域名相关的信息比如 www.baidu.combaidu就是域名可以把域名和ip地址想象成键值对结构。 最早的域名解析系统就是hosts文件这些都需要手写来维护 于是出现专属dns服务器给dns服务器发起请求查询当前域名对应IP然后再访问目标网站。但是这样会面临高并发的情况。面对高并发我们有开源节流方案 节流减少请求量让每个上网的设备搞本地缓存 开源号召网络运营商搞更多的DNS镜像服务器用户就可以访问离自己最近的镜像 DNS服务器。 ipv6的DNS与ipv4截然不同。ipv6升级有意义