首页 > 其他分享 >学习笔记11

学习笔记11

时间:2023-11-26 15:55:31浏览次数:28  
标签:11 CGI Web 协议 编程 笔记 学习 TCP 接字

第13章 TCP/IP和网络编程

1.网络编程基础:

网络编程基础主要包括计算机网络基本概念、OSI七层模型、TCP/IP协议族等。了解这些基本概念和协议有助于理解网络编程的原理和机制。

2.TCP/IP协议:

TCP/IP协议是网络通信的基础,包括TCP(传输控制协议)、UDP(用户数据报协议)、IP(互联网协议)等。TCP协议提供可靠的数据传输,适用于对数据可靠性要求较高的场景;UDP协议则提供不可靠的数据传输,但传输速度快,适用于对实时性要求较高的场景。

  • 链路层(有时称数据链路层或网络接口层):这一层主要负责计算机设备驱动程序和计算机网络接口卡的通信。

  • 网络层:网络层主要负责IP协议(网际协议)、ICMP协议(互联网控制协议)和IGMP协议(互联网组管理协议)等。网络层的主要功能是给数据包添加目标主机地址,以确保数据能够准确地传输到目的地。

  • 传输层:传输层主要负责端到端通信,主要包括TCP(传输控制协议)和UDP(用户数据报协议)。TCP协议提供可靠的数据传输,确保数据完整性和可靠性,而UDP协议则提供不可靠的数据传输,速度更快但稳定性较差。

  • 应用层:应用层面向应用程序,为用户提供各种网络服务,如远程登录、文件传输和电子邮件等。应用层协议包括HTTP、FTP、SMTP等。

TCP/IP协议的基本传输单位是数据包(datagram),其中TCP协议负责将数据分成若干个数据包,并给每个数据包加上包头(类似于信封),以确保数据的完整传输。IP协议则在每个包头上添加接收端主机地址,使数据能够找到自己要去的地方。如果传输过程中出现数据丢失或失真等情况,TCP协议会自动要求数据重新传输,并重新组包。

3.套接字编程:

套接字(Socket)是网络编程中的核心概念,它是一种抽象的通信接口,允许在不同主机之间进行数据传输。套接字编程主要包括套接字创建、连接、接收和发送数据、关闭等操作。
套接字基础:套接字是基于操作系统层次的结构,用于实现网络通信。套接字分为本地套接字和远程套接字。本地套接字用于同一台计算机上的进程间通信,而远程套接字则用于不同计算机之间的进程间通信。

  1. 套接字类型:套接字有多种类型,包括TCP套接字(面向连接、可靠传输)、UDP套接字(无连接、不可靠传输)、SCTP套接字(面向连接、可靠传输)等。

  2. 套接字编程步骤:套接字编程通常包括以下几个步骤:

    创建套接字:使用socket()函数创建一个套接字对象。
    配置套接字:使用bind()函数将套接字与本地地址和端口绑定。
    连接套接字:使用connect()函数将套接字连接到远程地址和端口(仅适用于TCP和SCTP套接字)。
    发送数据:使用send()函数将数据从进程发送到套接字,然后通过套接字发送到远程进程。
    接收数据:使用recv()函数从套接字接收远程进程发送的数据。
    关闭套接字:使用close()函数释放套接字资源,终止通信。

  3. 错误检测与处理:套接字编程过程中,可能会遇到各种错误,如连接失败、网络中断等。为了确保程序的稳定运行,需要对错误进行检测和处理。通常使用errno变量和perror()函数来获取和处理错误信息。

  4. 并发与多线程:套接字编程通常涉及到并发和多线程。进程需要处理多个套接字连接,或者在一个线程中处理多个套接字。这时需要使用多线程或多进程技术来高效地管理套接字连接。

  5. 安全性:套接字编程需要考虑网络安全性,如防止数据泄露、拒绝服务攻击等。使用加密算法、认证协议和访问控制等技术来确保通信安全。

4.常见网络编程应用:

网络编程应用广泛,包括HTTP、FTP、SMTP、DNS等。这些应用基于TCP/IP协议和套接字编程实现。

5.网络编程库:

Unix/Linux系统提供了丰富的网络编程库,如Berkeley socket库、System V socket库等。这些库提供了简化套接字编程的函数,使得开发人员可以更轻松地实现网络通信功能。

6.Web和CGI编程

Web编程:Web编程是指通过HTTP协议在客户端和服务器之间进行数据交换的过程。Web应用程序通常使用HTML、CSS和JavaScript等技术构建前端界面,后端则采用各种编程语言(如Python、PHP、Ruby等)实现业务逻辑。Web编程的核心是HTTP协议,它定义了客户端和服务器之间数据传输的规范。

CGI编程:CGI(Common Gateway Interface)是一种用于在Web服务器和客户端之间传递数据的规范。CGI脚本通常使用Perl、Python、Ruby等编程语言编写,它们能够接收来自Web浏览器的请求,处理数据并返回给浏览器。CGI编程的核心是CGI规范,它定义了如何在Web服务器和CGI脚本之间进行通信。

Web服务器和CGI脚本的交互过程:

客户端(如Web浏览器)发送HTTP请求到Web服务器。
Web服务器接收请求后,根据请求路径找到对应的CGI脚本。
CGI脚本接收服务器传递的请求参数,进行相应的处理。
处理完成后,CGI脚本将结果返回给Web服务器。
Web服务器将结果返回给客户端,客户端显示在浏览器上。

CGI编程优点:

跨平台:CGI脚本可以在多种操作系统和Web服务器上运行。
易于扩展:CGI脚本可以方便地与其他编程语言和模块(如数据库、加密库等)集成。

CGI编程缺点:

资源消耗:CGI脚本每次执行都会创建一个新的进程,可能导致系统资源消耗较大。
性能瓶颈:多个并发请求时,CGI脚本可能成为性能瓶颈。

解决方案:

使用服务器端技术(如Java Servlet、ASP.NET、PHP等)代替CGI脚本,以减少资源消耗和性能瓶颈。
使用缓存技术(如Memcached、Redis等)提高性能。

7.网络编程实例:

了解网络编程的实例有助于更好地掌握这一知识点。例如,可以研究Linux下的TCP/IP服务器和客户端的实现,以及如何使用套接字编程实现自定义的网络协议。

8.安全性与隐私:

网络编程需要考虑安全性与隐私问题,如使用加密技术、防范黑客攻击等。了解这些策略和技巧有助于提高网络编程的安全性。

苏格拉底挑战
image
image
image
image
image

标签:11,CGI,Web,协议,编程,笔记,学习,TCP,接字
From: https://www.cnblogs.com/1104dd/p/17855867.html

相关文章

  • 2023-2024-1 20232322 《#2023-2024-1 20232314杨红星《网络》第三周学习总结
    教材学习内容总结 教材学习中的问题和解决过程问题:如何防范安全攻击解决方案:通过查询得知 对于黑客一是及时更新服务器系统安全漏洞补丁二是要加强服务器安全防护能力三是制定有效的风险预警机制,重要数据一定要备份四是发现被“黑客”入侵时,要立即断网,保存好现场的犯罪......
  • Segment Anything笔记
    title:SegmentAnything笔记banner_img:https://drive.studyinglover.com/api/raw/?path=/photos/blog/background/1679396994125.pngdate:2023-4-721:40:00categories:-笔记tags:-图像分割-多模态SegmentAnything笔记SegmentAnythingproject是一个用于图像分......
  • StableDiffusion笔记
    title:StableDiffusion笔记banner_img:https://drive.studyinglover.com/api/raw/?path=/photos/blog/background/1679396994125.pngdate:2023-5-2915:36:00categories:-笔记tags:-文字生成图片StableDiffusion是一个图像生成方法,由 StabilityAI and Runway......
  • RoboTAP笔记
    title:RoboTAP笔记banner_img:https://drive.studyinglover.com/api/raw/?path=/photos/blog/background/1679396994125.pngindex_img:https://cdn.studyinglover.com/pic/2023/08/15ff4915dff842e47e91d580d0d0fe5c.pngdate:2023-9-112:35:00categories:-笔记tags:-......
  • Paper Gestalt笔记
    title:PaperGestalt笔记banner_img:https://cdn.studyinglover.com/pic/2023/07/5deff473fdf93539d3952d3d6894add3.pngdate:2023-7-2710:57:00PaperGestalt笔记最近读到了一篇CVPR2010非常优秀的论文,叫做PaperGestalt,他考虑到近年来(2010年的近年来)CVPR的投稿两......
  • LoRA笔记
    title:LoRA笔记banner_img:https://proxy.thisis.plus/202305091237913.pngdate:2023-6-130:12:40tags:-文字生成图片LoRA笔记自然语言处理的一个重要范式包括对一般领域数据的大规模预训练和对特定任务或领域的适应。当我们预训练更大的模型时,重新训练所有模型参数......
  • Imagic笔记
    title:Imagic笔记banner_img:https://drive.studyinglover.com/api/raw/?path=/photos/blog/background/1679397008541.pngdate:2023-3-2919:42:00categories:-笔记tags:-文字生成图片Imagic笔记先前的工作大多数方法目前仅限于以下一种:特定的编辑类型(例如,对象叠......
  • LISA(推理分割)笔记
    title:LISA(推理分割)笔记banner_img:https://cdn.studyinglover.com/pic/2023/08/10f885319b150cc20093124185e25c3b.pngindex_img:https://cdn.studyinglover.com/pic/2023/08/ded90e7e3f84739b187dd679c39bd8dd.pngdate:2023-8-1815:05:00categories:-笔记tags:-......
  • 进程间通信--学习笔记
    #进程间通信--pipe、FIFO、共享内存、消息队列、信号量pipe(无名管道)​ 只能实现有亲缘关系进程之间的通信,它是单向的,intpipe(intpiped[2])//创建管道fd[0]:读文件,fd[1]:写文件。之后可以用open()、write()函数进行对管道进行操作,创建管道要在fork()之前以保证......
  • Netty源码学习5——服务端是如何读取数据的
    系列文章目录和关于我零丶引入在前面《Netty源码学习4——服务端是处理新连接的&netty的reactor模式》的学习中,我们了解到服务端是如何处理新连接的,即注册ServerSocketChannel对accept事件感兴趣,然后包装ServerSocketChannel为NioServerSockectChannel,最后由主Reactor在循环中利......