网络编程预备知识
来源:互联网 发布:电纸书 知乎 编辑:程序博客网 时间:2024/06/05 14:32
Internet中的“世界语”—TCP/IP协议
传输控制/网际协议又称作网络通讯协议
① 网络传输中差错的传输控制协议TCP
② 对不同网络进行互联的互联网协议IP
数据的封装与传递过程
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);
- 网络编程预备知识
- linux网络编程的预备知识
- Linux网络预备知识
- 网络编程预备
- C语言编程预备知识
- C语言编程预备知识
- C语言编程的预备知识
- 嵌入式串口软件编程预备知识
- C++基础编程----1.1预备知识
- socket套接字编程预备知识
- C编程预备计算机专业知识 _ 数据类型
- C编程预备计算机专业知识 _ 变量
- 预备知识
- 预备知识
- 预备知识
- 预备知识
- 预备知识
- 预备知识
- 【操作系统】文件管理(六)
- andriod item内checked的setOnClickListener事件和setOnItemClickListener事件冲突解决办法
- Python CGI编程
- 聊聊并发--原子操作的实现原理
- 实验预备工作
- 网络编程预备知识
- EASYUI DATAGRID 多列复选框CheckBox
- Android零基础入门第56节:翻转视图ViewFlipper打造引导页和轮播图
- oracle数据库编码转换
- Spring-Data—介绍(学习笔记)
- IntelliJ IDEA搭建Spring环境
- HTTPS 相关
- 机器学习中的Bias(偏差),Error(误差),和Variance(方差)有什么区别和联系?
- java中synchronized详解