网络编程相关知识

文章介绍了OSI七层模型和TCP/IP四层模型的层次结构,包括应用层的协议,传输层的TCP和UDP特性,网络层的IP协议,以及网络接口层的功能。此外,还讨论了IP地址的管理,端口号的作用,字节序的概念,以及socket在网络编程中的应用。TCP和UDP的主要区别在于连接性、可靠性、首部开销和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OSI七层模型和TCP/IP协议四层模式

层次(level): 模块

应用层: 负责应用协议

传输层: 规定数据在网络中是怎样传输的

TCP: Transport Control Protocol传输控制协议,是一种面向连接的传输层协议。

在通信之前要先建立连接 ==> "三次握手"

它能提供高可靠性通信(即数据无误,数据无丢失,数据无失序,数据无重复)

UDP: User Datagram Protocol 用户数据协议

不需要连接,也没有握手

是不可靠的无连接的协议,在数据发送前,因为不需要进行连接,所以可以进行

高效的数据传输。

网络层: IP协议,给每一台联网的主机分配一个逻辑上的地址(编号)。

网络接口层: 网卡以及网卡驱动,MAC地址(网卡物理地址)以及数据传输信道。

封装和拆包

网络数据在两台主机之间到底是怎样传输的呢?

因特网(互联网)地址(IP地址)

互联网上的每个接口(网卡)必须有一个唯一的internet地址(也称为IP地址)

它是协议上的一个逻辑地址。IPV4 协议规定一个IP地址用一个无符号的32bits的整数来表示。也就是说有2^32个地址。

那么这么多的地址,如何去管理呢?

类似像日常生活中的座机号码,分"区号"和"主机号"

IP地址也分为两个部分: 网络号 和 主机号

网络号:属于哪一个网络,不同网络里的主机不能直接通信。

主机号: 某个网络里的主机的编号(也叫子网主机号)。

端口号

TCP和UDP都是采用无符号16bits的端口号来识别不同的应用程序的。

IP地址只能唯一标识网络中的主机,但每台主机上并不是只跑一个网络应用程序,

它可以跑多个网络应用程序,而且网络应用从传输层来看可以分为TCP应用和UDP应用。

所以为了区分这些不同的网络应用,故提出了端口号的概念。

字节序

在CPU内部数据是存放在寄存器(16bits,32bits,64bits)中,分高bit位和低bit位

但是内存却是按字节来编号的, 0x3000800,0x3000801

那么如果一个寄存器的数据要存放到内存中,该怎么存放呢?

1) 大端(Big-Endian)模式: 数据的高字节存放在内存的低地址存储单元

2) 小端(Little-Endian)模式: 数据的低字节存放到内存的低地址存储单元

我们怎么知道我们自己的处理器采用的是大端模式还是小端模式呢?

网络字节序:

网络字节序规定发送到网络上的数据统一采用大端模式的字节序。

网络通信是在不同的主机之间进行通信,但我们发送一个整数的时候,如果都采用自己的字节序

去处理就发生问题。

因此所有的主机在进行网络通信时,都必须采用网络字节序。

socket

socket 即套接字文件,是一种网络编程接口,一种特殊的文件描述符,并不限于TCP/IP协议。

独立于具体协议栈的网络编程接口,位于应用层与传输层之间。

socket 类型:

(1)SOCK_STREAM: 流式套接字

主要针对的是 TCP传输层协议

(2)SOCK_DGRAM: 数据报套接字

主要针对的是 UDP传输层协议

(3)SOCK_RAW: 原始套接字

直接跳过传输层

UDP与TCP的区别

UDP

TCP

是否连接

无连接

面向连接

是否可靠

不可靠传输,不使用流量控制和拥塞控制

可靠传输,使用流量控制和拥塞控制

连接对象个数

支持一对一,一对多,多对一和多对多交互通信

只能是一对一通信

传输方式

面向报文

面向字节流

首部开销

首部开销小,仅8字节

首部最小20字节,最大60字节

适用场景

适用于实时应用(IP电话、视频会议、直播等)

适用于要求可靠传输的应用,例如文件传输

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值