TCP/IP编程基本知识

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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容