网络编程预备知识

本文详细介绍了网络协议模型,包括OSI七层和TCP/IP四层协议,重点讲解了TCP和UDP的特性及应用场景,IP地址的表示(IPv4和IPv6),以及端口号、字节序和套接字的概念,以及如何在不同格式间转换数据。

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

  • 一、网络协议模型

协议:事先约定好的一组规则。

  • 1、OSI七层协议模型(理性化模型,未完全实现)

上层->底层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

  • 2、TCP/IP四层协议模型

TCP/IP:指一个协议族,TCP、IP为其中最具有代表性的两个协议。

应用层、传输层、网络层、物理网络接口层

1、应用层:应用层、表示层、会话层;

              HTTP(超文本传输协议)、FTP(文件传输协议)、Telnet(远程登录协议)。

2、传输层:TCP协议、UDP协议。

3、网络层:IP协议、ICMP(报文控制协议)、IGMP。

4、物理网络接口层:数据链路层、物理层;

                                  以太网协议、令牌环网、PPP协议。

  • 二、TCP、UDP

TCP(传输控制协议):面向连接,可靠;适用于对数据可靠性要求较高的场景。

应用场景:登录程序、传输重要文件。

UDP(用户数据报协议):无连接、不可靠;适用于对实时性要求较高的场景。

应用场景:流媒体、投屏软件、广播软件。

  • 三、IP地址

IP地址:用于标识网络中的一台主机。

IPV4:32位(4字节),存在大小端问题。

IPV6:128位

IPV4:

一个IPv4地址可以被表示为X.X.X.X,其中每个X代表0到255之间的一个数字。

点分十进制:192.168.17.93

二进制:11000000   10101000   00010001   01011101

转为16进制(高->低):C0   A8    11    5D

大端:低地址存高位

0x001:C0   0x002:A8    0x003:11    0x004:5D

小端:低地址存低位

0x001:5D   0x002:11    0x003:A8    0x004:C0

  • 四、端口号

端口号:用于标识主机当中的一个进程。

unsigned short:0~65535(无符号短整型数据)

1~1024:系统保留端口

1025~5000:常用应用端口

5001~65535:用户端口

  • 五、字节序

字节序:指在存储和传输多字节数据时,字节的排列顺序。

       大端序和小端序是针对数据在内存中的存储顺序,而主机字节序和网络字节序则是针对数据在不同计算机体系结构和网络传输中的字节顺序。

主机字节序:大端、小端

网络字节序:大端

由于主机字节序不确定,在通信中将主机字节序转为网络字节序(大端)。

大端:数据高字节存放到低地址空间

小端:数据低字节存放到低地址空间

  • 六、套接字

套接字:网络中两个通信的进程所抽象出来的两个端点。

linux中的套接字(socket):是linux提供给用户使用其内核集成网络协议的接口。

套接字是一个文件描述符:系统能够分配的最小的非负整数。

       套接字是一种用于在网络上进行通信的文件描述符。它可以像文件描述符一样被用于读取和写入数据,因此也被认为是一种文件描述符。套接字和其他文件描述符一样,可以通过系统调用来进行操作,如读取、写入、关闭等。因此,可以说套接字是一种特殊的文件描述符,用于网络通信。

套接字的类型:

                       SOCK_STREAM(流式套接字):唯一对应传输层TCP协议。

                       SOCK_DGRAM(数据报套接字):唯一对应传输层UDP协议。

                       SOCK_RAW(原始套接字):本机通信。

  • 七、转化

IP地址

1、将点分十进制的IP地址转化为对应的网络字节序(用于通信)

      inet_addr("192.168.17.93");

2、将网络字节序的IP地址转化为对应的点分十进制(用于打印地址):

      inet_ntoa("caddr.sin_addr");

端口

1、将主机字节序的端口号转换为网络字节序的端口号(用于通信)host to network short:

      htons(6666);

2、将网络字节序的端口号转换为主机字节序的端口号(用于打印端口号)network to host short:

      ntohs(caddr.sin_port);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值