网络编程基础知识笔记(1)
来源:互联网 发布:理正软件 编辑:程序博客网 时间:2024/06/06 00:33
1:网络理论,TCP/IP协议,套接字编程模型
2:网络服务器模型、网络连接的建立和断开,多路复用
3:广播,带外数据,组播
//============网络编程===============
网络协议:网络中各个主机或终端接入互联网锁必须遵循的一种规则
一些代码()
网络协议模型
OSI(Open System Interconnection))模型:OSI是一个理想的模型,没有实现
七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
TCP/IP模型:
网络接口与物理层:通过物理接口发送或接受数据
MAC地址:物理上唯一的标示一台主机,48位
MAC地址是网卡决定的,是固定的。 前三个字节是由IEEE的注册管理机构RA负责给不同厂家分配后三个字节由各厂家自行分配
IP和MAC地址这种映射关系由ARP(Address Resolution Protocol,地址解析协议)协议完成。
网络层:寻找对方的主机在哪里(通过路由器),路由器处于网络层
IP地址:逻辑上标示一台主机
ipv4:32位,主机号 + 网络号
ipv6:128位
四类:A类 1.0.0.1-127.255.255.254
主机号(1字节) + 网络号(3字节)
B类 172.16.0.0--172.31.255.255
主机号(2字节) + 网络号(2字节)
C类 192.0.1.1-223.255.255.254
主机号(3字节) + 网络号(1字节)
D类 224.0.0.1--239.255.255.255
传输层:保证要传输的数据能够正确无误、无丢失、无重传的发送给对方
端口号:
应用层:产生数据,或显示数据
进程的id,pid
//========TCP/IP======================
TCP/IP协议是一个协议族:有多个协议组成,因为TCP,IP是这个协议族
最重要的两个协议
传输层:
TCP协议(Transmission Control Protocol):传输控制协议
UDP协议(User Datagram Protocol):用户数据报协议
网络层协议:
IP协议(Internet Protocol):网际协议
ICMP协议(Internet Control Message Protocol):网际控制报文协议,
ping命令就是发送的该协议包。
ARP协议:地址解析协议,将IP地址转换为MAC地址
RARP协议:反地址解析协议,将MAC地址转换为IP地址
IGMP协议:
应用层协议
FTP协议:文件传输协议 (自己模拟FTP)
HTTP:超文本传输协议 (解析HTTP协议)
SMTP:简单邮件传输协议
DNS:域名解析协议
SNMP:简单网络管理协议
Telnet:远程登录协议
RTP协议(Real-time Transport Protocol):RTP协议详细说明了在
互联网上传递音频和视频的标准数据包格式,是介于应用层和传输层之
间的一种协议
TCP头:
序号:发送端将数据分段的编号
确认号:接收端告诉发送端下一个应该发送的字节编号
窗口(滑动窗口,滑窗管理):接收方发给发送方,告诉发送方,下一次应该发送
的字节的长度
TCP和UDP的区别
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高
可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达
的通信)
适用情况:
适合于对传输质量要求较高,以及传输大量数据的通信。
在需要可靠数据传输的场合,通常使用TCP协议
MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议
UDP,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接
,所以可以进行高效率的数据传输,实时性较好,主要用在直播、视频会议
socket:通信接口、文件描述符、函数API
流式套接字(SOCK_STREAM)----->TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM)----->UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAW)------->协议的开发者
可以对较低层次协议如IP、ICMP直接访问。
IPV4(32位) 和 IPV6(128位)
IP地址 = 网络地址 + 主机地址
A类地址
第1字节为网络地址,其他3个字节为主机地址。第1字节的最高位固定为0
1.0.0.1 – 126.255.255.255
255.0.0.0
B类地址
第1字节和第2字节是网络地址,其他2个字节是主机地址。第1字节的前两位固定为10
128.0.0.1 – 191.255.255.255
255.255.0.0
C类地址 (我们是该类IP)
前3个字节是网络地址,最后1个字节是主机地址。第1字节的前3位固定为110
192.0.0.1 – 223.255.255.255
255.255.255.0
D类地址(组播地址)
不分网络地址和主机地址,第1字节的前4位固定为1110
224.0.0.1 – 239.255.255.255
MAC地址 48位 ,在物理上表示一台唯一的主机
TCP/IP协议分层:
应用层(QQ、游戏终端,飞秋)--->Telnet(远程登录),HTTP(超文本传输协议),DNS(域名解析)、FTP(文件传输协议),SMTP(简单邮件传输协议)
产生数据或显示数据
传输层 --->TCP(传输控制协议) UDP(用户数据报协议)
保证数据能够准确无误的到达对方
网络层 --->IP(互联网协议) ARP(地址解析协议) RARP(反地址解析协议) ICMP(ping命令 网际控制报文协议) IGMP(互联组管理协议)
寻找对方主机的位置(依靠路由器,所以路由器一定处于网络层)
网络接口和物理层 --->网卡和网卡驱动
接受和发送网络包(以太网帧)
TCP(即传输控制协议):是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数据无失序、数据无重复到达的通信)
UDP(User Datagram Protocol)用户数据报协议,是不可靠的无连接的协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
流式套接字(SOCK_STREAM)
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
数据报套接字(SOCK_DGRAM)
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收。
原始套接字(SOCK_RAW)
可以对较低层次协议如IP、ICMP直接访问。
端口号:16位(1-65535)
为了区分一台主机接收到的数据包应该转交给哪个进程来进行处理,使用端口号来区别
1-1024: 系统使用
1025-5000:系统保留
5001-65535:用户使用
TCP/UDP常用端口号
******************************************************
20 /tcp FTP数据
21 /tcp FTP控制 文件传输协议
22 /tcp SSH 安全登录、文件传送(SCP)和端口重定向
23 /tcp Telnet 不安全的文本传送
25 /tcp SMTP 简单邮件传输协议(Simple Mail Transfer Protocol)(E-mail)
53 /tcp 域名服务器
69 /udp TFTP 日常文件传输协议(Trivial File Transfer Protocol)
70 /tcp Gopher
79 /tcp Finger
80 /tcp WWW (HTTP超文本传送协议)
88 /tcp Kerberos Authenticating agent
110 /tcp POP3 邮局协议(Post Office Protocol)(E-mail)
113 /tcp ident old identification server system
119 /tcp NNTP网络新传输协议(Network New Transfer Protocol) used for usenet newsgroups
137 /udp NetBIOS名称服务(NetBIOS Name service,Nbname)
138 /udp NetBIOS数据报服务(NetBIOS Datagram service,Nbdatagram)
139 /tcp NetBIOS会话服务(NetBIOS Sessions service,Nbsession)
161 /udp SNMP 简单网络管理协议(Simple Network Management Protocol)
220 /tcp IMAP3 Internet消息访问协议(Internet Message Access Protocol)
443 /tcp HTTPS 经过加密的HTTP(used for securely transferring web pages)
636 /tcp LDAP 轻量目录存取协议(Lightweight Directory Access Protocol)
1080 /tcp SOCKS
字节序
网络字节序:大端序
主机字节序: ARM(小) IBM(大)
大端序:高字节放在低地址,低字节放在高地址
小端序:高字节放在高地址,低字节放在低地址
主机字节序到网络字节序
u_long htonl (u_long hostlong);
u_short htons (u_short short);
网络字节序到主机字节序
u_long ntohl (u_long hostlong);
u_short ntohs (u_short short);
点分十进制:192.168.7.10
网络二进制:100010001100
应用
/*负责点分十进制和网络二进制之间的转换*/
将strptr所指的字符串转换成32位的网络字节序二进制值
#include <arpa/inet.h>
int inet_aton(const char *strptr, struct in_addr *addrptr);
struct in_addr addrptr;//用来保存32位的网络字节序二进制值
inet_aton(“192.168.7.10”, &addrptr);
功能同上,返回转换后的地址。
int_addr_t inet_addr(const char *strptr);
int_addr_t addr;//用来保存32位的网络字节序二进制值
addr = inet_addr("192.168.7.10");
//将32位网络字节序二进制地址转换成点分十进制的字符串。
char *inet_ntoa(struct in_addr in);
char buf[50];
stuct in_addr inaddr = func(xxxxx);
printf("ip: %s\n",inet_ntoa(inaddr));
strcpy(buf, inet_ntoa(inaddr));
将IPV4/IPV6的地址转换成binary格式
int inet_pton(int af, const char *src, void *dst);
struct in_addr addrptr;
inet_pton(AF_INET, "192.168.7.10", &addrptr);//用于IPV4
inet_pton(AF_INET6, "192.168.7.10", &addrptr);//用于IPV6
- 网络编程基础知识笔记(1)
- 网络编程基础知识笔记(2)
- 网络编程基础知识笔记(3)
- 网络编程(基础知识)
- Linux网络编程-基础知识(1)
- 网络编程(1)——基础知识
- Java 网络编程 学习笔记一 基础知识
- 学习笔记-基础知识12-网络编程
- unix网络编程1 基础知识
- 网络编程基础知识(一)
- 网络编程基础知识(一)
- 网络编程基础知识(一)
- Java 网络编程(一) 网络基础知识
- Java 网络编程(一) 网络基础知识
- 网络编程 网络基础知识
- 网络编程笔记(1)
- 网络基础知识(1)
- 网络基础知识(1)
- Git 提交远程仓库
- ios 如何减小app的大小
- 类似于可滚动的时分秒
- c#循环中计时等待功能实现
- Spring Boot实践-1(基础搭建)
- 网络编程基础知识笔记(1)
- HashMap实现原理分析
- MTU值及查询方法
- 辩论5 辩论圣经
- iOS 使用AFNetworking遇到异常 Request failed: unacceptable content-type: text/html
- 乐观锁和悲观锁
- Android 之ActivityThead、ActivityManagerService 与activity的管理和创建
- 某饭店招待国外考察团
- [PHP学习]PHP中论foreach里面是否可以写数据查询语句?