网络编程概述

进程间通信(消息、队列、共享内存、管道、信号、信号量)依赖于内核,就导致无法进行多机通信,比如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 大端字节序:**将高序字节存储在起始地址。

网络字节序=大端字节序

相关推荐
Tingjct14 分钟前
【初阶数据结构-二叉树】
c语言·开发语言·数据结构·算法
一只自律的鸡25 分钟前
【Linux驱动】bug处理 ens33找不到IP
linux·运维·bug
17(无规则自律)40 分钟前
【CSAPP 读书笔记】第二章:信息的表示和处理
linux·嵌入式硬件·考研·高考
!chen41 分钟前
linux服务器静默安装Oracle26ai
linux·运维·服务器
REDcker1 小时前
Linux 文件描述符与 Socket 选项操作详解
linux·运维·网络
飞机和胖和黄1 小时前
考研之王道C语言第三周
c语言·数据结构·考研
蒹葭玉树1 小时前
【C++上岸】C++常见面试题目--操作系统篇(第二十八期)
linux·c++·面试
醉颜凉1 小时前
【LeetCode】打家劫舍III
c语言·算法·leetcode·树 深度优先搜索·动态规划 二叉树
一匹电信狗1 小时前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
2501_927773071 小时前
imx6驱动
linux·运维·服务器