烟台网站定制排名,网站app怎么制作教程,北京网页设计电脑培训,python做网页界面目录
一、网络发展历史和分层
1.1Internet的历史
1.2网络的体系结构
1.2.1OSI模型
1.2.2TCP/IP协议族
1.2.3各层典型协议
1.2.4网络的封包和拆包
二、网络编程的预备知识
2.1Socket
2.1.1概念
2.1.2类型
2.2IP地址
2.3端口号
2.4字节序 一、网络发展历史和分层
…目录
一、网络发展历史和分层
1.1Internet的历史
1.2网络的体系结构
1.2.1OSI模型
1.2.2TCP/IP协议族
1.2.3各层典型协议
1.2.4网络的封包和拆包
二、网络编程的预备知识
2.1Socket
2.1.1概念
2.1.2类型
2.2IP地址
2.3端口号
2.4字节序 一、网络发展历史和分层
1.1Internet的历史 1968年6月提出”阿帕网“是Internet的最早雏形采用NCP网络控制协议。缺点是不能互联不同类型的计算机和不同类型的操作系统且没有纠错功能 1973年由Robert Kahn和Vinton Cerf两人合作为阿帕网开发了新的互联协议1974年12月两人正式发表第一份TCP协议详细说明但此协议在有数据包丢失时不能有效纠正 TCP协议分成两个不同的协议自此TCP/IP协议诞生 用来检测网络传输中差错的传输控制协议TCP可靠传输 专门负责对不同网络进行互联的互联网协议IP不可靠传输 1983年阿帕网上停止使用NCP互联网上的主机全部使用TCP/IP协议。TCP/IP协议成为Internet中的”世界语“
1.2网络的体系结构 网络的层次结构和每层所使用协议的集合网络采用分层思想。每一层实现不同的功能对上层的数据做透明传输。每一层向上层提供服务同时使用下层提供的服务。
两类非常重要的体系结构OSI和TCP/IP
1.2.1OSI模型 OSI模型相关的协议已经很少使用但模型本身非常通用 OSI模型是一个理想化的模型尚未有完整的实现 共有七层 与linux系统对应的话低层相当于内核高层相当于应用层。
网络上与之有关的比如交换机二层交换机对应数据链路层、三层交换机对应网络层偏软件
1.2.2TCP/IP协议族 TCP/IP协议是Internet事实上的工业标准 共有四层 网络接口和物理层这一层有各式各样的硬件主要是屏蔽硬件差异然后为上层提供统一的接口具体地比如net_device 结构体网卡特性通过其中的成员来描述传到上层网络层后主要是实现端到端的通信跨机器、跨操作系统、跨区域典型的比如IP协议再往上传输层会实现通信和数据的完整性比如TCP可靠传输UDP不可靠传输是否可靠只是基于不同应用场景最后应用层是用户和网络之间的接口负责提供具体的应用服务
1.2.3各层典型协议
1.网络接口和物理层 MAC地址48位全球唯一网络设备的身份标识相当于设备的身份证号码 ARP/RARP解析地址比如IP地址----MAC地址MAC地址----IP地址 PPP拨号协议从以前的电话线拨号连接发展到现在的无线GPRS/3G/4G
2.网络层 IPInternet protocol分为IPV4和IPV6IPV4地址是192.168.7.246这种IPV6地址则是十六进制的 ICMPInternet控制管理协议比如ping命令 IGMPInternet分组管理协议广播、组播
3.传输层 TCPTransfer Control protocol传输控制协议提供面向连接的建立虚拟连接一对一的可靠数据传输的协议通过消耗一定资源来实现这种可靠体现在数据无误、数据无丢失、数据无失序、数据无重复到达 SCTPTCP的增强版能实现多主机、多链路通信 UDPuser Datagram protocol用户数据报/包协议提供不可靠无连接的尽力传输协议优点是不需要进行连接高效
4.应用层 网页访问协议HTTP/HTTPS 邮件发送接收协议POP3收/SMTP发、IMAP可接收邮件的一部分 文件传输FTP 远程登录Telnet明文传输/SSH加密传输 嵌入式相关 NTP网络时钟协议 SNMP简单网络管理协议实现对网络设备集中式管理 RTP/RTSP传输音视频的协议安防监控
1.2.4网络的封包和拆包 以该图为例左边server往右边client发送数据发送方经过各层会加上包头进行封包最终通过驱动发送到路由器路由器中间可能会经过不同网络最终发送给接收方存入它的空间读取这个数据包就是不断地拆包环节
相关的概念有 MTUMaximum Transmission Unit 最大传输单元和网络类型相关以太网标准1500字节IPV61280字节 MSSMaximum Segment Size 最大报文段大小基于MTU计算不含各种头部开销
二、网络编程的预备知识
2.1Socket
2.1.1概念 是一个应用编程接口介于应用空间和内核空间 一种特殊的文件描述符可以read、write、close 网络编程的一种资源 并不仅限于TCP/IP协议面向连接----TCP/IP、无连接----UDP和IPX
2.1.2类型 流式套接字SOCK_STREAM唯一对应TCP内设置流量控制避免数据流淹没慢的接收方。数据被看作是字节流无长度限制 数据报套接字SOCK_DGRAM唯一对应UDP独立数据包形式发送 原始套接字SOCK_RAM可跨过、穿透传输层通过IP、ICMP直接访问
2.2IP地址 Internet中主机的标识要与别的机器通信必须具有一个IP地址相当于设备的住址可以变动 分为IPV432位地址和IPV6128位地址常用IPV4 mobile IPV6local IP本地注册的IProam IP漫游IP 每个数据包都必须携带目的IP地址和源IP地址路由器依靠此信息帮数据包选择路由 IPV4地址表示形式点分十进制形式----192.168.7.246、整数形式省资源 特殊IP地址 局域网IP192.XXX.XXX.XXX、 10.XXX.XXX.XXX 广播IPXXX.XXX.XXX.255、255.255.255.255全网广播 组播IP224.XXX.XXX.XXX、239.XXX.XXX.XXX
IP地址转换函数如下
#include arpa/inet.h//将点分十进制形式IP地址的字符串 转换为32位网络字节序整数
//仅用于IPV4出错时返回-1因此不能转换全网广播255.255.255.255的地址
in_addr_t inet_addr(const char *cp)
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h//将点分十进制形式IP地址的字符串 转换为32位网络字节序整数
//IPV4和IPV6都可用能正确处理全网广播的地址
int inet_pton(int af, const char *src, void *dst)params: af----AF_INET或AF_INET6src---源地址---点分十进制形式IP字符串dst---转换结果地址---32位整数return: 成功返回1 出错返回其他值//和它反过来的将32位整数转换为点分十进制形式IP地址字符串
//成功返回非空指针失败返回NULL
const char *inet_ntop(int af, const void * src, char * dst, socklen_t size)
2.3端口号 为了区分一台主机接收到的数据包应该转交给哪个进程/线程来进行处理使用端口号来区别 16位的数字1~65535 知名端口1~1023FTP21、SSH22、HTTP80、HTTPS469 保留端口1024~5000 可使用的端口5000~65535 TCP端口和UDP端口是相互独立的意味着即使端口号相同也不冲突原因如下图 网络通信是由IP地址端口号来决定 2.4字节序 不同的CPU访问内存中的多字节数据所以不包含字符串时存在大小端问题 小端低地址存低位数据高地址存高位数据个人简记为顺端像x86/ARM一般都采用小端 大端低地址存高位数据高地址存低位数据个人简记为逆端像powerpc/mips都采用大端 网络字节序采用大端模式 字节序转换函数 主机-网络 u_long htonl(u_long hostlong) 4字节
u_short htons(u_short hostshort) 2字节 网络-主机 u_long ntohl(u_long netlong)
u_short ntohs(u_short netshort) 字节序转换函数一般用来转换端口号IP地址的转换前面已有API