网络编程概述

进程间通信(消息、队列、共享内存、管道、信号、信号量)依赖于内核,就导致无法进行多机通信,比如Linux和安卓手机,树莓派和51单片机等。

网络编程关心IP地址、端口号、协议(http、tcp、udp)。

TCP和UDP的区别及各自的优缺点

TCP和UDP的区别:

|-------|------|--------|
| | TCP | UDP |
| 是否连接 | 面向连接 | 面向非连接 |
| 传输可靠性 | 可靠 | 不可靠 |
| 应用场合 | 少量数据 | 传输大量数据 |
| 速度 | 慢 | 快 |

  1. TCP面向连接(如打电话要先拨号建立连接),UDP是无连接的,即发送数据之前,不需要建立连接
  2. TCP童工可靠的服务。也就是说通过TCP连接传送的数据无差错、不丢失、不重复并且按序到达。UDP尽最大努力交付,即不保证可靠交付。
  3. TCP面向字节流,实际上是TCP把数据看成一串无结构的字节流。UDP是面向报文的,UDP没有拥塞机制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)。
  4. 每一条TCP连接只能是点到点的。UDP支持一对一、一对多、多对一和多对多的交互通信。
  5. TCP首部开销20字节。UDP的首部开销小,只有8个字节。
  6. TCP的逻辑通信信道是全双工的可靠信道。UDP则是不可靠信道。

TCP和UDP的优缺点:

TCP协议的优点:

可靠、稳定,TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传输之前,会有三次握手来建立连接,而且在数据传输时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

TCP缺点:

慢,效率低,占用系统资源高,易被攻击,TCP在传输数据之前,要先建立连接,这会消耗时间,而且在数据传递时,确认机制,重传机制,拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。而且,因为TCP有确认机制、三次握手机制,这些也导致了TCP容易被人利用,实现DOS,DDOS,CC等攻击。

UDP的优点:

快速,比TCP稍安全,UDP没有TCP的握手,确认,窗口,重传,拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一点。

UDP的缺点:

UDP是无法避免攻击; 不可靠,不稳定 因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就很容易丢失包。

什么时候使用TCP和UDP

什么时候应该使用TCP:

当对网络通信质量有要求的时候,比如: 整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,如QQ,游览器, HTTP,HTTPS,FTP等传输文件的协议,POP,SITP等邮件传输的协议。

什么时候应该使用UDP:

当对通信质量要求不高的时候,要求网络通讯能尽量的快,这时就可以使用UDP,比如qq语音,qq视频FTFP。

端口号:

一台拥有IP地址的主机可以提供许多服务,比如Web服务、FTP服务、SMTP服务等。这些服务完全通过1个IP地址来实现,那么主机是怎么区分不同的网络服务呢?实际上是通过IP地址加端口号来区分不同服务的。端口提供了一种访问通道。服务器一般都是通过知名端口号来识别的。例如,对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。

字节序:

字节序是指多字节数据在计算机内存中存储或网络传输是个字节的存储顺序。下6系列CPU都是小段字节序的,所以发送数据时也要是小端,防止网络传输数据时数据出错。

**Little endian小端字节序:**将低序字节存储在起始地址。

**Big endian 大端字节序:**将高序字节存储在起始地址。

网络字节序=大端字节序

相关推荐
云飞云共享云桌面31 分钟前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
励志成为嵌入式工程师31 分钟前
c语言简单编程练习9
c语言·开发语言·算法·vim
Peter_chq1 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮2 小时前
Linux 使用中的问题
linux·运维
hikktn3 小时前
如何在 Rust 中实现内存安全:与 C/C++ 的对比分析
c语言·安全·rust
观音山保我别报错3 小时前
C语言扫雷小游戏
c语言·开发语言·算法
dsywws3 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零4 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程5 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
墨墨祺5 小时前
嵌入式之C语言(基础篇)
c语言·开发语言