游戏怎么做充值网站,纪检监察门户网站建设论证报告,Https全局wordpress,厦门外贸公司做网站文章目录#xff1a;
1.协议
2.锁
3.网络层次模型
4.以太网帧和ARP协议
5.IP协议
6.UDP协议
7.TCP协议
8.BS模式和CS模式
9.网络套接字(socket)
10.网络字节序
11.IP地址转换函数
12.sockaddr地址结构 学习Linux的网络编程原则上基于#xff1a;Linux的系统编程…文章目录
1.协议
2.锁
3.网络层次模型
4.以太网帧和ARP协议
5.IP协议
6.UDP协议
7.TCP协议
8.BS模式和CS模式
9.网络套接字(socket)
10.网络字节序
11.IP地址转换函数
12.sockaddr地址结构 学习Linux的网络编程原则上基于Linux的系统编程 和 Linux基础的Shell编程第十章除此之外还包含了计算机网络的知识 Linux基础shell编程——Linux 系统编程——Linux 网络编程 1.协议 互联网协议Internet Protocol Suite 什么是协议从应用的角度出发协议可理解为“规则”是数据传输和数据的解释的规则典型协议传输层 常见协议有TCP/UDP协议应用层 常见的协议有HTTP协议FTP协议网络层 常见协议有IP协议、ICMP协议、IGMP协议网络接口层 常见协议有ARP协议、RARP协议 TCP传输控制协议Transmission Control Protocol是一种面向连接的、可靠的、基于字节流的传输层通信协议UDP用户数据报协议User Datagram Protocol是OSI参考模型中一种无连接的传输层协议提供面向事务的简单不可靠信息传送服务HTTP超文本传输协议Hyper Text Transfer Protocol是互联网上应用最为广泛的一种网络协议FTP文件传输协议File Transfer ProtocolIP协议是因特网互联协议Internet ProtocolICMP协议是Internet控制报文协议Internet Control Message Protocol它是TCP/IP协议族的一个子协议用于在IP主机、路由器之间传递控制消息IGMP协议是 Internet 组管理协议Internet Group Management Protocol是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间ARP协议是正向地址解析协议Address Resolution Protocol通过已知的IP寻找对应主机的MAC地址RARP是反向地址转换协议通过MAC地址确定IP地址 2.锁 如何避免死锁保证资源的获取顺序要求每个线程获取资源的顺序一致当得不到已有的资源时放弃已经获取的资源等待读写锁当读次数远大于写次数时写独占读共享写锁优先级高锁只有一把条件变量指明了共享数据区值不值得访问有无空位或产品锁是访问共享数据区的通行证信号量可以看作进化版互斥锁1--N保证同步的同时提高了并发sem_wait给信号量加锁sem–locksem_post给信号量解锁semunlock同时唤醒阻塞在该信号上的线程 3.网络层次模型 物理层主要定义物理设备标准如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等它的主要作用是传输比特流就是由1、0转化为电流强弱来进行传输到达目的地后再转化为1、0也就是我们常说的数模转换与模数转换这一层的数据叫做比特数据链路层定义了如何让格式化数据以帧为单位进行传输以及如何让控制对物理介质的访问这一层通常还提供错误检测和纠正以确保数据的可靠传输如串口通信中使用到的115200、8、N、1网络层在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择Internet的发展使得从世界各站点访问信息的用户数大大增加而网络层正是管理这种连接的层传输层定义了一些传输数据的协议和端口号WWW端口80等如TCP传输控制协议传输效率低可靠性强用于传输可靠性要求高数据量大的数据UDP用户数据报协议与TCP特性恰恰相反用于传输可靠性要求不高数据量小的数据如QQ聊天数据就是通过这种方式传输的主要是将从下层接收的数据进行分段和传输到达目的地址后再进行重组。常常把这一层数据叫做段会话层通过传输层(端口号传输端口与接收端口)建立数据传输的通路主要在你的系统之间发起会话或者接受会话请求设备之间需要互相认识可以是IP也可以是MAC或者是主机名表示层可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取例如PC程序与另一台计算机进行通信其中一台计算机使用扩展二一十进制交换码(EBCDIC)而另一台则使用美国信息交换标准码ASCII来表示相同的字符如有必要表示层会通过使用一种通格式来实现多种数据格式之间的转换应用层是最靠近用户的OSI层。这一层为用户的应用程序例如电子邮件、文件传输和终端仿真提供网络服务 OSI七层模型结构我的记忆方法_巫术网传会报应 物、数、网、传、会、表、应TCP/IP 4层模型结构网链路层/网络接口层、网、传、应应用层http、ftp、nfs、ssh、telnet。。。传输层TCP、UDP网络层IP、ICMP、IGMP链路层以太网帧协议、ARP网络传输数据封装流程 数据没有封装之前是不能在网络中传递。数据-》应用层-》传输层-》网络层-》链路层 --- 网络环境只有应用层协议在用户态可见往下的都处在内核中什么是内核 4.以太网帧和ARP协议 以太网帧协议根据mac地址完成数据包传输以太网帧中的目的地址和源地址是指MAC地址ARP协议数据报格式根据 Ip 地址获取 mac 地址5.IP协议 版本 IPv4、IPv6 -- 4位TTL time to live 。 设置数据包在路由节点中的跳转上限。每经过一个路由节点该值-1 减为0的路由有义务将该数据包丢弃源IP 32位。--- 4字节 192.168.1.108 --- 点分十进制 IP地址string --- 二进制 目的IP32位。--- 4字节 6.UDP协议 源端口号 目的端口号序号确认序号数据偏移 保留 URG/ACK/PSH/RST/SYN/FIN 窗口检验和 紧急指针选项和填充从这开始往上是首部数据 IP地址可以在网络环境中唯一标识一台主机端口号可以网络的一台主机上唯一标识一个进程多数应用程序使用5000以下的端口80端口http协议ip地址端口号可以在网络环境中唯一标识一个进程 7.TCP协议 16位源端口号 16位目的端口号32序号32确认序号4位首部长度 保留6位 URG/ACK/PSH/RST/SYN/FIN 16位窗口大小16位检验和 16位紧急指针选项从这开始往上是报头数据 8.BS模式和CS模式 C/SClient/Server B/SBrowser/Server优点 缓存大量数据、协议选择灵活、速度快 安全性、跨平台、开发工作量较小缺点 安全性差、开发工作量大、跨平台难 不能缓存大量数据、必须严格遵守http协议 9.网络套接字(socket) 一个文件描述符指向一个套接字该套接字内部由内核借助两个缓冲区实现在通信过程中 套接字一定是成对出现的 10.网络字节序 小端法pc本地存储 高位存高地址。地位存低地址。 int a 0x12345678
大端法网络存储 高位存低地址。地位存高地址。htonl -- 本地--》 网络 IP 192.168.1.11 -- string -- atoi -- int -- htonl -- 网络字节序
htons -- 本地--》 网络 (port)
ntohl -- 网络--》 本地IP
ntohs -- 网络--》 本地Port 用库函数做网络字节序和主机字节序的转换 #includearpa/inet.h
uint32_t htonl(uint32_t hostlong); //主要针对IP
uint16_t htons(uint16_t hostshort); //主要针对port
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort); 11.IP地址转换函数 由于如192.168.45.2这种的IP地址为点分十进制表示需要转化为uint32_t型有现成的函数(IPv4和IPv6都可以转换) int inet_pton(int af, const char *src, void *dst); 本地字节序string IP --- 网络字节序afAF_INET、AF_INET6src传入IP地址点分十进制dst传出转换后的 网络字节序的 IP地址。 返回值成功 1异常 0 说明src指向的不是一个有效的ip地址。失败-1const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 网络字节序 --- 本地字节序string IPafAF_INET、AF_INET6src: 网络字节序IP地址dst本地字节序string IPsize dst 的大小。返回值 成功dst、失败NULL 12.sockaddr地址结构 IP port -- 在网络环境中唯一标识一个进程 struct sockaddr_in addr;addr.sin_family AF_INET/AF_INET6 man 7 ipaddr.sin_port htons(9527);int dst;inet_pton(AF_INET, 192.157.22.45, (void *)dst);addr.sin_addr.s_addr dst;【*】addr.sin_addr.s_addr htonl(INADDR_ANY); 取出系统中有效的任意IP地址。二进制类型。bind(fd, (struct sockaddr *)addr, size);举例 /*相初始化*/
addr.sin_familyAF_INET/AF_INET6;
addr.sin_porthtons(9527); //端口号为short类型(16bit)int dst;
inet_pton(AF_INET,192.168.10.2,(void*)dst);
addr.sin_addr.s_addrdst;
/*或者采取下面的方法*/
addr.sin_addr.s_addrhtonl(INADDR_ANY) //取出系统中任意有效的IP地址/*相关结构体定义,在man 7 ip*/
struct sockaddr_in{sa_family_t sin_family;in_port_t sin_port;struct in_addr sin_addr;
};
struct in_addr{uint32_t s_addr;
};
struct sockaddr_in addr;int bind(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
/*struct sockaddr是早已废弃的数据结构,已不再使用,用新的时注意强转一下*/
int ret bind(sockfd,(struct sockaddr*)addr,size);