一、C++网络编程概述(上)

网络协议

什么是网络协议

网络协议是计算机网络中用于在不同设备之间进行通信的规则和约定的集合。它定义了数据的传输方式、数据的格式、错误处理等方面的规则,以确保在网络中的设备之间能够正确地发送、接收和解释数据。
    网络协议可以比喻为人类之间的语言,为设备之间的通信提供了一种标准化的方式。这些协议允许不同类型的设备(如计算机、服务器、路由器等)在网络上相互协作,共同完成数据的传输和交换。

常见的网络协议

1. 传输层协议:
TCP(传输控制协议):提供可靠的、面向连接的数据传输服务。确保数据在发送和接收之间没有丢失,而且按照正确的顺序到达。
UDP(用户数据报协议):提供无连接的、不可靠的数据传输服务。适用于一些对实时性要求较高,可以容忍少量数据丢失的场景。
2. 网络层协议:
IP(Internet协议):负责在网络上寻址和路由数据包。IP地址用于唯一标识网络上的设备。

3. 应用层协议:
HTTP(超文本传输协议):用于在Web浏览器和Web服务器之间传输超文本数据,是Web通信的基础。
FTP(文件传输协议):用于在计算机之间传输文件。
SMTP(简单邮件传输协议):用于在网络上传输电子邮件。
DNS(域名系统):用于将域名解析为IP地址。

这些协议通常按照OSI模型(开放系统互联模型)或TCP/IP协议栈进行组织和分类。OSI模型将网络通信划分为七个层次,而TCP/IP协议栈则包括四个层次。每个层次都有其特定的功能,各层之间通过定义好的接口进行通信。

总体而言,网络协议是确保不同设备之间能够有效通信的基础,它们使得互联网和其他计算机网络能够正常运作。

OSI模型和TCP/IP协议栈

OSI模型(开放系统互联模型):


OSI模型是一个用于理解和设计网络体系结构的框架,被国际标准化组织(ISO)定义为ISO 7498。它将网络通信划分为七个层次,每个层次负责特定的功能,从物理层到应用层,逐步实现网络通信。以下是OSI模型的七个层次:

  1. 物理层(Physical Layer):

    负责传输比特流,定义物理介质(如电缆、光纤)的特性,以及电压、电流等传输细节。
  2. 数据链路层(Data Link Layer):

    提供可靠的点对点数据传输,将物理层的比特流组织为帧。负责物理地址寻址、流量控制和错误检测等。
  3. 网络层(Network Layer):

    处理在不同网络中的数据包传输,提供数据包的路由和转发。负责逻辑地址寻址,实现跨网络的通信。
  4. 传输层(Transport Layer):

    负责端到端的通信,提供可靠的数据传输服务。常见的协议有TCP和UDP,分别提供面向连接和无连接的服务。
  5. 会话层(Session Layer):

    管理两个应用程序之间的对话,负责建立、管理和终止会话连接。
  6. 表示层(Presentation Layer):

    处理数据格式的转换,确保不同系统上的应用能够正确地交换信息。负责数据的加密和解密、数据压缩和格式转换。
  7. 应用层(Application Layer):

    提供网络服务给用户和应用程序。包括网络协议,文件传输协议、电子邮件、远程登录等。

TCP/IP协议栈:

  • TCP/IP协议栈是实际应用最广泛的网络协议栈,它基于OSI模型,但将其划分为四个层次。以下是TCP/IP协议栈的四个层次:
  1. 网络接口层(Network Interface Layer):

    对应于OSI模型的物理层和数据链路层,负责将比特流转换为帧并进行物理传输。包括以太网、Wi-Fi等协议。
  2. 网络层(Internet Layer):

    对应于OSI模型的网络层,负责数据包的路由和转发。包括IP协议,实现跨网络的通信。
  3. 传输层(Transport Layer):

    对应于OSI模型的传输层,负责端到端的通信。包括TCP(传输控制协议)和UDP(用户数据报协议)。
  4. 应用层(Application Layer):

    对应于OSI模型的会话层、表示层和应用层。包括各种应用层协议,如HTTP、FTP、SMTP等。

在TCP/IP协议栈中,网络接口层和网络层对应于OSI模型的底层,而传输层和应用层对应于OSI模型的高层。TCP/IP协议栈是互联网上通信的基础,它的应用广泛,并且大多数互联网协议都是基于TCP/IP协议栈的。

常见网络协议:

以下是一些常见的网络协议的简要介绍,包括它们的用途和特点:

  1. HTTP(超文本传输协议):

    用途: 用于在Web浏览器和Web服务器之间传输超文本数据,是Web通信的基础协议。
    特点: 无状态、面向连接、基于请求-响应模型,使用明文传输数据,常用于传输HTML页面。
  2. HTTPS(HTTP安全):​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

    用途: 在HTTP的基础上添加了安全性层,通过加密传输数据,用于保护用户隐私和防止信息被窃取。
    特点: 使用SSL/TLS协议进行加密通信,通过数字证书验证服务器的身份,确保通信的机密性和完整性。
  3. TCP(传输控制协议):

    用途: 提供可靠的、面向连接的数据传输服务,确保数据在发送和接收之间没有丢失,而且按照正确的顺序到达。
    特点: 面向连接、可靠的、基于字节流的协议,适用于对数据传输的可靠性要求较高的场景,如文件传输、网页访问等。
  4. UDP(用户数据报协议):

    用途: 提供无连接的、不可靠的数据传输服务,适用于对实时性要求较高,可以容忍少量数据丢失的场景。
    特点: 无连接、不可靠的、面向数据包的协议,适用于实时音视频传输、在线游戏等应用。
  5. IP(Internet协议):

    用途: 提供计算机在网络上的唯一标识,负责在网络上寻址和路由数据包。
    特点: 将数据包从源主机传输到目标主机,使用IP地址进行寻址,支持IPv4和IPv6两个版本。
  6. DNS(域名系统):

    用途: 将域名解析为IP地址,使人类更容易记忆和使用域名,而不是直接使用IP地址进行访问。
    特点: 提供域名到IP地址的映射,包括域名解析、域名注册等功能。
  7. SMTP(简单邮件传输协议):

    用途: 用于在网络上传输电子邮件。
    特点: 通过SMTP服务器进行邮件的发送,支持文本和附件的邮件传输。
  8. FTP(文件传输协议):

    用途: 用于在网络上传输文件。
    特点: 提供文件的上传和下载功能,支持匿名登录和身份验证登录两种方式。

这些协议在网络通信中发挥着重要的作用,每个协议都有其独特的特点和适用场景,根据实际需求选择合适的协议非常重要。

TCP和UDP的区别:

TCP(传输控制协议)和UDP(用户数据报协议)是两种不同类型的传输层协议,它们在连接性、可靠性等方面有很大的区别。以下是它们主要的区别:

1. 连接性:

  • TCP:
    • 面向连接: TCP是一种面向连接的协议,建立连接、传输数据,然后释放连接。这确保了数据的可靠性和有序性。
    • 三次握手: 在建立连接时,TCP使用三次握手来确保通信的双方都能够接收和发送数据。
  • UDP:
    • 无连接: UDP是一种无连接的协议,通信双方在发送数据时不需要建立连接。每个数据包都是独立的,不依赖于之前或之后的数据包。

2. 可靠性:

  • TCP:
    • 可靠性: TCP提供可靠的数据传输,确保数据在传输过程中不丢失、不重复、按照正确的顺序到达。如果发生丢失或错误,TCP会重新发送数据。
    • 流控制和拥塞控制: TCP具有流控制和拥塞控制机制,以防止发送方发送速度过快,导致接收方无法处理或网络拥塞。
  • UDP:
    • 不可靠性: UDP不提供可靠的数据传输。它不会重新发送丢失的数据包,也不保证数据包的顺序。因此,对于实时性要求较高的应用,UDP更为适用。

3. 数据包大小:

  • TCP:
    • 面向字节流: TCP是面向字节流的协议,没有固定大小的数据包。数据被划分为小的数据块,然后传输。
  • UDP:
    • 固定大小的数据包: UDP是面向数据包的协议,每个UDP数据包具有固定的大小。如果应用层发送的数据超过了该大小,UDP会将其分割成多个数据包。

4. 应用场景:

  • TCP:
    • 适用于对数据完整性和顺序性要求较高的应用,如文件传输、Web浏览、电子邮件等。
    • 在可靠性较为重要的场景中,TCP是首选的协议。
  • UDP:
    • 适用于对实时性要求较高、能够容忍少量数据丢失的应用,如实时音视频传输、在线游戏等。
    • 在延迟较为敏感的场景中,UDP更为适用。

总体而言,选择使用TCP还是UDP取决于应用的需求。如果数据的完整性和可靠性是首要考虑的因素,那么TCP是更合适的选择。而如果实时性和低延迟是更为重要的因素,那么UDP可能更适合。很多应用中,TCP和UDP可能会结合使用,根据具体需求灵活选择。

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当涉及到C语言网络编程推荐书籍时,我推荐以下几本经典的书籍: 1. 《UNIX网络编程 卷1:套接字联网API》(作者:W. Richard Stevens)- 这是一本经典的网络编程教材,详细介绍了UNIX环境下的套接字编程。它深入讲解了网络编程的基本概念、技术和实践,是学习网络编程的首选之一。 2. 《TCP/IP详解 卷1:协议》(作者:Douglas E. Comer)- 这本书详细讲解了TCP/IP协议栈的原理、协议和实现,适合想要深入了解网络协议的读者。它对C语言网络编程提供了很好的理论基础和实践指导。 3. 《UNIX网络编程 卷2:进程间通信》(作者:W. Richard Stevens)- 这本书是《UNIX网络编程》系列的第二卷,主要介绍了UNIX环境下进程间通信(IPC)的各种机制和技术,包括管道、消息队列、共享内存等。对于想要深入了解进程间通信的读者来说,这本书是一本非常好的参考资料。 4. 《Linux高性能服务器编程》(作者:游双)- 这本书主要介绍了Linux环境下高性能服务器的设计和编程技巧。它包含了网络编程、多线程、IO模型、性能调优等方面的内容,对于想要开发高性能网络应用程序的读者来说是一本很有价值的书籍。 5. 《C语言socket网络编程实战》(作者:方倍工作室)- 这本书以实战为主线,通过多个具体的网络编程案例,详细讲解了C语言下的socket编程。适合初学者快速入门和实践。 这些书籍都是在C语言网络编程领域内比较有影响力和口碑的经典之作。阅读它们可以帮助你深入理解网络编程原理和技术,并提升你在这方面的实践能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值