Internet历史:
①ARPAnet(阿帕网):采用网络控制协议(Network Control Protocol, NCP); 缺点 ------?
②TCP协议:kahn和vinton cerf提出, 缺点-----?
从此产生TCP/IP协议,
网络体系架构:
①OSI模型
7层:
特点:模型本身通用,理想化模型。
②TCP/IP协议
4层:
应用层: HTTP/FTP/DNS/SMTP/Telnet/
传输层: TCP/UDP
网络层: IP协议:IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务 ICMP /IGMP
网络接口层和物理层:
传输层协议:
①TCP:
特点:面向有连接,可靠
适应范围:传输数据多,传输质量要求高,例如qq登录可采用TCP协议
②UDP:用户数据报协议,在发送数据之前,不需要进行连接,所以可以提高传输效率
特点:无连接,不保证数据可靠
适应范围:1.小尺寸数据,例如:DNS服务器进行IP地址查询时 2.不需要应答或者应答困难时,例如:无线网络 3.广播或者组播通信时 4.qq聊天,多媒体数据传输,质量要求不高
网络套接字socket:加州伯克利大学(BSD)通过标准的UNIX文件描述符和其他程序通信的方法
定义:是一个通用的网络编程接口,是一种特殊文件描述符
作用:不同的进程在不同的电脑上通信,网络通信,在OSI模型中,主要用于会话层与传输层之间
适应对象:TCP协议,UDP协议
socket类型:
①流式套接字(SOCK_STREAM):面向连接可靠的数据传输服务,数据无误差,无重复的发送按发送顺序接收,内设数据流控制,避免数据流淹没慢的接收方。数据被看做是字节流,无长度限制。
②数据报套接字(SOCK_DGRAM):提供无连接服务,不保证数据可靠,顺序发送,有可能乱序接收
③原始套接字(SOCK_RAW):可以对较低层次IP,ICMP提供服务
IP地址:
Internet中的主机要与别的机器通信必须具有一个IP地址
IP地址为32位(IPv4)或者128位(IPv6)
每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由
IP地址转换:
点分十进制转二进制 : in_addr_t inet_addr(const char*strptr);
二进制转点分十进制 : char *inet_ntoa(stuct in_addr inaddr);
端口号: 为了区分数据包应该由哪个任务来处理
1-1023:保留端口
1024-5000:系统分配的端口
5001-65536:自己分配的端口
字节序:
小端序:低数据位存储在低地址,高数据位存储在高地址;
大端序:低数据位存储在高地址,高数据位存储在低地址;
ARM大小端可选;
函数:
TCP通信步骤:
注意:TCP通信用了两个套接字 :sockfd(监听套接字) confd(通信套接字)
服务器:
1.创建套接字:int socket(int domain, int type, int protocol);
2.绑定:int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen);
3.监听:int listen(int sockfd, int backlog); // backlog参数决定了未完成队列和已完成队列中连接数目之和的最大值(从内核的角度,是否这个和就是等于sock->recv_queue ?);
4.接通并获取通信套接字:int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
5.关闭: int close(int fd);
客户端:
1.创建 socket();
2.绑定服务器 bind();
3.连接 connect()
4.发/收 send() / recv()
5.关闭 close();
UDP通信:
步骤:
服务器:
socket();
bind();
sendto();
recvform();
客户端:
socket();
sendto();
recvform();
close();
浙公网安备 33010602011771号