网络编程预备知识

来源:互联网 发布:电纸书 知乎 编辑:程序博客网 时间:2024/06/05 14:32

Internet中的“世界语”—TCP/IP协议
传输控制/网际协议又称作网络通讯协议

① 网络传输中差错的传输控制协议TCP
② 对不同网络进行互联的互联网协议IP

TCP/IP协议族的体系结构 应用层(FTP、HTTP、DNS、SMTP) 传输层(TCP、UDP) 网络层(IP、ICMP、IGMP) 网络接口和物理层(以太网、令牌环网、FDDI)

数据的封装与传递过程

这里写图片描述

TCP/IP协议下的数据包

这里写图片描述

IP数据报格式

这里写图片描述


TCP(即传输控制协议)
是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)

适用情况:
适合于对传输质量要求较高,以及传输大量数据的通信。
即时通讯软件的用户登录账户管理等相关功能

UDP(User Datagram Protocol)用户数据报协议
是不可靠的无连接的协议。可以进行高效率的数据传输。

适用情况:
发送小尺寸数据
接收到数据,给出应答较困难的网络中(如:无线网络)
广播/组播式通信
即时通讯软件的点对点文本通讯以及音视频通讯
网络多媒体服务中实时数据传输


Socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一个端点称为一个socket(也称套接字)。
每个 socket 都和端口、协议相联系,是一个通用的网络编程接口,提供了网络通信的类似“I/O操作”。

Socket类型
流式套接字(SOCK_STREAM) — 通过TCP 协议访问
数据报套接字(SOCK_DGRAM) — 通过UDP协议访问
原始套接字(SOCK_RAW) — 直接对IP、ICMP访问

这里写图片描述


IP地址
IP地址是Internet中主机的标识
并且每个数据包都携带目的IP地址和源IP地址
IP地址有32位(IPv4)或者128位(IPv6)
常用表现点分形式,最终会转换为一个32位的无符号整数

IP地址分类
A类 0 . 0 .0 .0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255

一个A类网络可容纳的地址数量最大,一个B类网络的地址数量是65536,一个C类网络的地址数量是256。D类地址用作多播地址,E类地址保留未用。


端口号

为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别

TCP端口号与UDP端口号独立

端口号一般由IANA (Internet Assigned Numbers Authority) 管理
众所周知端口:1~1023(1~255之间为众所周知端口,256~1023端口通常由UNIX系统占用)
注册端口:1024~49150
动态或私有端口:49151~65535


字节序
不同的机器HBO(主机字节序)是不一样的,这与CPU的设计有关。
大端(Big-Endian):字节的高位在内存中放在存储单元的起始位置。
小端(Little-Endian):与大端相反。
避免兼容性问题,引入了网络字节序。

数 据 = 大萝卜
内 存 = 放萝卜盒子
HBO = 机器放萝卜的方法
NBO = 网络中规定的放法
有的机器是把萝卜正着放,有的机器是把萝卜反正放,为了保证拿出来还是这个萝卜,就引入了(NBO)

xx序 <———-> 网络字节序 <———-> xx序

字节序API
主机字节序到网络字节序:

u_long htonl (u_long hostlong);u_short htons (u_short short);

网络字节序到主机字节序:

u_long ntohl (u_long hostlong);u_short ntohs (u_short short);

IP地址的转换

将strptr所指的字符串转换成32位的网络字节序二进制值

int inet_aton(const char *strptr, struct in_addr *addrptr);int_addr_t inet_addr(const char *strptr);

将32位网络字节序二进制地址转换成点分十进制的字符串

char *inet_ntoa(stuct in_addr inaddr);

IPV4/IPV6的地址转换成binary格式

int inet_pton(int af, const char *src, void *dst);
原创粉丝点击