网络编程其实就是计算机网络编程,通常牵扯到计算机通信,所以对于嵌入式也尤为重要,也是面试一热点,今天我来分享一下我所了解的计算机网络!欢迎大神指教!
关于计算机发展至今,有很多历程,首先在1946至1969年计算机网络在此期间萌芽,1946年第一台计算机的诞生,其后20多年,计算机一直在寻求发展,最先开始是以主机为中心通信,至1969年后,发展位15个站点,23台主机,1973年,ARPANet发展成为国际互联网,阿帕网标志着多台计算机网络实现通信!到1970后IOS国际标准化组织进行10年努力,确立了TCP/ip协议。到1986年后NSF国家科学基金网实现了全美以及后来到现在的全球化互联网。
一、IOS模型和TCP/IP体系结构
1.网络体系结构是什么?
网络体系结构即指网络的层次结构和每层所使用协议的集合
2.网络体系结构(IOS模型和TCP/IP)
IOS模型是一个理想化的模型,尚未完整的实现
TCP/IP协议是工业标准
3.传输层协议(TCP和UPD)
TCP:有连接,可靠
UDP:无连接,不保证可靠
TCP: (Transfer Control Protocol 传输控制协议)
(1).是一种面向连接的传输层协议 (三次握手)
(2).它能提供高可靠性通信(即数据无误,数据无丢失,数据无失序,数据无重复到达)
适用情况:
适合于对传输质量要求较高,以及传输大量数据的通信.
在需要可靠数据传输的场合,通常适用TCP协议
MSN/QQ等即时通讯软件的用户登录账户管理相关的功能采用TCP协议
UDP: (User Datagram Protocol 用户数据报协议)
UDP:不保证可靠的无连接协议,在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。
适用情况:
-
- 发送小尺寸数据(如对DNS服务器进行IP地址查询时)
- 在接收到数据,给出应答较困难的网络中使用UDP。(如:无线网络)
- 适合于广播/组播式通信中。
- MSN/QQ/Skype等即时通讯软件的点对点文本通讯以及音视频通讯通常采用UDP协议
- 流媒体、VOD、VoIP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输
4.TCP网络通信
(1)tcp网络通信是靠什么通信?
socket需要一种通用的网络编程接口,它是一个特殊的文件描述符,(read,write,close)。
流式套接字(SOCK_STREAM) ----TCP
提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。
(2)字节序存储
小端序:低字节存储在低地址处。
大端序:低字节存储在高地址处
(3)IP地址
在网络中,IP地址是主机的唯一标识,32位的数---->点十进制”192.168.2.67”
A类:地址范围是1.0.0.0~126.0.0.0
B类:地址范围是128.0.0.0------191.255.255.255
C类:地址范围是192.0.0.0~223.255.255.255
D类:组播地址范围是224.XXX.XXX.XXX-----239.XXX.XXX.XXX
E类:XXX.XXX.XXX.255该网段的广播地址 255.255.255.255全网广播
(4)端口号
1~~~~~~~~1023 (SSH:22 HTTP:80 HTTPS:469)各种系统的端口
保留端口:1024~~~~5000(不建议使用)
可以使用:5000-----65535
(5)通信
5.UPD网络通信
(1)UDP网络通信是靠什么通信?
数据报套接字(SOCK_DGRAM)--->UDP
提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可能丢失或重复,顺序发送,可能乱序接收
(2)通信
二、IO模型
1.阻塞IO
- 阻塞I/O 模式是最普遍使用的I/O 模式,大部分程序使用的都是阻塞模式的I/O 。
- 读操作中的read、recv、recvfrom
- 写操作中的write、send,sendto
- 其他操作:accept、connect
2.非阻塞IO
- 当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不停地测试是否一个文件描述符有数据可读(称做polling)。
- fcntl()函数
当你一开始建立一个套接字描述符的时候,系统内核将其设置为阻塞IO模式。
可以使用函数fcntl()设置一个套接字的标志为O_NONBLOCK 来实现非阻塞。
int fcntl(int fd, int cmd, long arg);
int flag;
flag = fcntl(sockfd, F_GETFL, 0);
flag |= O_NONBLOCK;
fcntl(sockfd, F_SETFL, flag);
3.IO多路复用并发服务器
- 其基本思想是:
- 先构造一张有关描述符的表,然后调用一个函数。当这些文件描述符中的一个或多个已准备好进行I/O时函数才返回。
- 函数返回时告诉进程那个描述符已就绪,可以进行I/O操作。
1.创建监听队列(fd_set xx xx)
2.监听的套接字加入到监听队列FD_SET (listenfd &xx)
3阻塞监听select函数
4.遍历哪个文件描述符发生变化先找到监听套接字然后接收链接将新的套接字加入监听队列然后通信。
这样就能多个客户端连接服务器,服务器也能处理。
计算机网络编程要学习的还很多这只是一部分内容,欢迎补充!