热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络编程基础:指针、引用与可重入函数,及网络模型详解

本文深入探讨了网络编程中的基本概念,如指针、引用和可重入函数,并详细介绍了OSI七层模型和TCP/IP四层模型的功能与协议。同时,文章还对比了HTTP与HTTPS的区别,分析了HTTP请求报文的结构,讨论了TCP与UDP的主要差异,以及滑动窗口协议的工作原理。

1. 网络编程基础概念


- 指针: 指向内存区域的一个变量,其值为该内存区域的地址。


- 引用: 是现有变量的别名,提供了一种访问变量的替代方式。


- 可重入函数: 在多线程环境中可以被多次调用而不影响程序执行的函数。



2. 网络模型概述


网络通信遵循一定的协议栈,主要分为OSI七层模型和TCP/IP四层模型。































层次名称

功能

协议

网络接口层 (Host-to-Net Layer)

负责实际的数据传输,对应OSI模型的物理层和数据链路层。

HDLC, PPP, SLIP

网际层 (Internet Layer)

负责网络间的寻址和数据传输,对应OSI模型的网络层。

IP, ICMP, ARP, RARP

传输层 (Transport Layer)

提供可靠的数据传输服务,对应OSI模型的传输层。

TCP, UDP

应用层 (Application Layer)

实现与应用程序相关的功能,对应OSI模型的应用层、表示层和会话层。

FTP, HTTP, DNS, SMTP, NFS



3. HTTP与HTTPS的区别


- HTTP: 超文本传输协议,数据以明文形式传输。


- HTTPS: 安全的超文本传输协议,使用SSL/TLS加密传输数据,提供更高的安全性。



4. HTTP请求报文结构


- 请求行 (Request Line): 包含请求方法、请求URI和协议版本。


- 请求头部 (Header): 包含关于请求的元信息。


- 空行: 分隔请求头部和请求数据。


- 请求数据: 实际的请求内容,如表单数据。



5. GET与POST请求方法的区别



  • GET: 数据在URL中可见,适合传输少量数据,不安全。

  • POST: 数据在请求体中,适合传输大量数据,更安全。



6. TCP的三次握手与四次挥手


- 三次握手: 用于建立TCP连接,确保双方都能正常收发数据。


- 四次挥手: 用于断开TCP连接,确保所有数据都已传输完毕。



7. Session与COOKIE的区别



  • COOKIE: 存储在客户端,用于记录用户的偏好设置。

  • Session: 存储在服务器端,用于跟踪用户的会话状态。



8. Redirect与Forward的区别

















RedirectURL重新定向,可以是任意URL不能共享request数据适用于用户注销后返回主页等场景
Forward页面转发,仅限同一Web应用内的组件可以共享request数据适用于用户登录后的角色跳转等场景


9. TCP与UDP的区别



  • TCP: 面向连接,提供可靠的数据传输,适合需要高可靠性的应用场景。

  • UDP: 无连接,轻量级,适合实时传输和对延迟敏感的应用场景。



10. 滑动窗口协议


- 概念: 允许发送方在未收到确认前发送多个数据包,提高传输效率。


- 工作原理: 发送方和接收方各有一个滑动窗口,窗口大小动态调整,用于控制数据传输速率和流量。


- 慢启动算法: 初始时缓慢增加发送窗口大小,逐步提高传输速率,避免网络拥塞。



11. 名词解释



  • 停止等待协议: 每发送一个数据包后等待确认,信道利用率低。

  • 回退N步协议 (GBN): 允许发送多个数据包,但一旦出错需重传所有未确认的数据包。

  • 选择重传 (SR): 只重传出错的数据包,提高传输效率。


推荐阅读
  • 深入探讨PHP中的输出缓冲技术(Output Buffering)
    本文深入解析了PHP中输出缓冲(Output Buffering)的原理及其在Web开发中的应用,特别是如何通过输出缓冲技术有效管理HTTP头部信息,提高代码的灵活性与健壮性。 ... [详细]
  • 本文提供了一套实用的方法论,旨在帮助开发者构建能够应对高并发请求且易于扩展的Web服务。内容涵盖了服务器架构、数据库管理、缓存策略以及异步处理等多个方面。 ... [详细]
  • 一面问题:MySQLRedisKafka线程算法mysql知道哪些存储引擎,它们的区别mysql索引在什么情况下会失效mysql在项目中的优化场景&# ... [详细]
  • python爬虫Demo
    1爬虫功能:爬取某域名下所有网页,比如爬取python文档 https:docs.python.orgzh-cn3 ,爬取之后, ... [详细]
  • Struts2(六) 用Struts完成客户列表显示
    Struts完成客户列表显示所用的基础知识在之前的随笔中已经讲过。这篇是介绍如何使用Struts完成客户列表显示。下面是完成的代码执行逻辑图:抽取项目部分代码相信大家 ... [详细]
  • 本文详细介绍了 SVN 中的 switch 命令及其使用方法,包括如何切换工作副本到新的 URL 和如何处理版本库迁移等情况。 ... [详细]
  • Linux环境下Redmine快速搭建指南
    本文将详细介绍如何在Linux操作系统中使用Bitnami Redmine安装包快速搭建Redmine项目管理平台,帮助读者轻松完成环境配置。 ... [详细]
  • 本文深入探讨了服务器的主要作用,包括加速访问、增强安全性和绕过访问限制等,并详细介绍了如何正确配置代理服务器。 ... [详细]
  • 本文从数据埋点的设计者视角出发,全面解析数据埋点的技术原理、应用场景及其管理方法,涵盖基础知识、实施策略、数据处理流程等内容。 ... [详细]
  • 博主从零开始学习HTML(入门基础)
    从零开始学习HTML(入门基础)互联网三大基石HTTP协议URL:统一资源定位符HTML:超文本标记语言HTML的Head标签中的常用元素<!--告知 ... [详细]
  • 本文详细介绍了 Nginx 中用于端口监听的核心配置指令,包括其基本用法和高级选项。 ... [详细]
  • socket函数SOCKET()我们使用系统调用socket()来获得文件描述符:#include#includei ... [详细]
  • 深入浅出HTTPS机制
    本文旨在通过通俗易懂的方式介绍HTTPS的工作原理,包括其构成、认证过程以及安全性考量,为初学者提供一个清晰的学习路径。欢迎提出宝贵意见。 ... [详细]
  • 本文介绍了如何处理在使用 aiohttp 进行 HTTPS 请求时遇到的 SSL 证书验证错误,包括忽略证书验证和使用自定义证书的方法。 ... [详细]
  • .NET Core 与 MySQL 的集成:API 和 Entity Framework Core 的应用
    本文介绍了如何在.NET Core 2.2环境中构建一个基于API的应用,并通过Entity Framework Core (EF Core) 连接MySQL数据库。包括项目的创建、必要的NuGet包安装以及数据库上下文的配置。 ... [详细]
author-avatar
到底是谁额额额
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有