TCP/IP编程基本知识
[TOC]
网络定义
TCP协议分为两个不同的协议
TCP:用来检测网络传输中差错的传输控制协议
IP:专门负责对不同网络进行互联都的互联网协议
分层思想
每一层实现不同的功能,对上层的数据做同名传输
OSI模型
七层
应用层
各种应用程序协议:HTTP、FTP、SMTP、POP3
表示层
信息的语法语义以及他们的关联,如加密解密、转换翻译、压缩解压缩
会话层
不同机器上的用户之间建立及管理回话
传输层
接受上一层的数据,在必要的时候把数据进行分割,并将这些数据交给网络层并且保证这些数据段有效到达对端。
网络层
控制子网的运行,如逻辑编制、分组传输、路由选择
数据链路层
物理寻址,同事将原始比特流转变为罗技传输线路
物理层
机械、电子、电视接口通信信道上原始比特流传输
四层
应用层
Telnet,FTP,HTTP,DNS,SMTP
传输层
TCP和UDP
网络层
IP,ICMP,IGMP
网络接口和物理层
以太网,令牌环网,FDDI
协议解释
网络接口与物理层
MAC地址:48位全球唯一,网络设备的身份标识
ARP/RARP:
ARP:地址解析协议,IP地址解析成MAC地址
RARP:MAC地址解析成IP地址
PPP协议
拨号协议(GPRS/3G/4G),从有线发展成无线
网络层
IP协议:身为IPV4和IPV6协议
ICMP:Internet控制管理协议,ping命令属于ICMP
IGMP:Internet分组管理协议,广播、组播
传输层
TCP:传输控制协议,提供面相连接的,一对一的可靠数据传输协议(即数据无误、数据无丢失、数据无失序,数据无重复)
UDP:用户数据报协议,提供不可靠,无连接的尽力传输协议(实时性好于TCP,不需要进行连接,可以进行高效率的数据传输)
SCTP:流控制传输协议,TCP增强版,能实现多主机、多链路的通信
应用层
网页访问协议:HTTP/HTTPS
邮件发送接收协议:POP3(收)/SMTP(发)、IMAP
文件传输:FTP
远程登录:Telnet/SSH
Telnet:明文传输
SSH:加密传输
嵌入式相关
网络时钟协议:NTP
简单网络管理协议(实现对网络设备集中式管理):SNMP
用传输音视频的协议(安防监控):RTP/RTSP(基于TCP与UDP共通实现)
编程
socket编程
Socket是一个应用编程接口
是一种特特殊的文件描述符(可执行IO操作,比如read(),write(),close())
不仅限于TCP/IP
面向链接(TCP/IP)
无链接(UDP,IPX)
代表网络的一种资源
Socket类型
流式套接字
唯一对应TCP
提供一个面向链接,可靠的数据传输服务,数据误差错,无重复,且按发送数据接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作时字流,无长度限制
数据报套接字
唯一对应UDP
提供五连接服务,数据包已独立数据包的形式被发送,不提供无差错保证数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字
对应多个协议,发送穿透了传输层
可以对较低层次协议直接访问,如IP/ICMP
IP地址
分类
IPV4:采用32位整数表示
IPV6:采用128位整数表示
mobileIPV6:local IP-本地注册的IP,roam IP-漫游IP
IPV4
形式
点分形式:192.168.1.201
32位整数形式
特殊IP地址
局域网:192.XXX.XXX.XXX;10.XXX.XXX.XXX
广播IP:xxx.xxx.xxx.255;255.255.255.255(全网广播)
组播IP:224.XXX.XXX.XXX~239.XXX.XXX.XXX
IP地址转换函数:
inet_addr()
in_addr_t inet_addr(const char *cp)
参数:
cp:点分形式的IP地址,结果时32位(内部包含了字节序的转换,默认时网络自己序模式)
特点
仅适用于IPv4
出错时返回-1
不能用于255.255.255.255的转换
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
特点
适用于IPv4和IPv6
能正确处理255.255.255.255(-1)的转换
参数
成功返回1,出错返回0,或-1
af:地址协议族(AF_INET或AF_INET6)
src:源IP的指针[点分形式]
dst:转换结果
int inet_ntop(int af, const char *src, char *dst, socklen_t size);
特点
成功返回非空的指针,失败返回NULL
适用于IPv4和IPv6
能正确处理255.255.255.255(-1)的转换
参数
af:地址协议组(AF_INET或AF_INET6)
src:源IP的指针[32位网络字节序IP地址]
dst:转换结果给到dst[点分形式的IP地址,主要指IPv4]
大低高网(大端低地址存高字节,网络字节序为大端)
端口号
16位数字,1-65535
预留端口,1-1023
FTP:21
SSH:22
HTTP:80
HTTPS:469
保留端口,1024-5000
可使用的5000-65535
TCP端口和UDP的端口相互独立
字节序
定义
不同的CPU访问内存中的多字节数据的时候,存在大小端的问题
如果CPU访问的是字符串,则不存在大小端的问题
小端模式
低对低
低序字节存储在低地址
x86 / ARM
大端模式
高对低
高序字节存储在低地址
PowerPC / MIPS / ARM作为路由器
本地字节序(HBO-Host Byte Order)
与所使用的处理器有关
网络字节序(NBO-Network Byte Order)
必为大端字节序
转换函数
主机字节序到网络字节序
u_long htonl(u_long hostlong)
u_short htons(u_short short)
网络字节序到主机字节序
u_long ntohl(u_long hostlong)
u_short ntols(u_short short)