Linux网络编程学习心得.1
1.mac地址和ip
mac地址标识网卡的id,理论id全球唯一,标识主机的物理地址 id,?不会改变
ip 地址是标识主机的id,id为虚拟id。会改变,ipv4 32位,ipv6 128位
ip分为子网id和主机id???子网id和主机id需要和子网掩码一起使用,
ip中被连续的1覆盖的位就是子网id
ip中被连续的0覆盖的位就是主机id
mac地址是6个字节,ip地址4个字节32位(ipv4)16个字节128位(ipv6)
ping
127.0.0.1-127.255.255.254本机
A类地址是国家地址八位子网ID,B是城域网16位子网ID,C是局域网24位子网ID,
linux设置Ip命令ifconfig?网卡名称 设置ip netmask子网掩码,
端口标识应用程序(进程)2个字节0-65535 0-1023 知名端口,1024-65535自定义端口,一个程序可以有很多个端口,http-80
2. OSI模型和TCP/IP模型
物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
数据链路层:定义了如何让格式化数据以帧为单位进行传输mac地址
网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。ip地址
传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。
表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
应用层:是最靠近用户的OSI层。这一层为用户的应用程序。
?TCP/IP四层模型
TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。
?3.协议
从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。数据传输的方式和格式。
传输层 常见协议有TCP/UDP协议。tcp传输控制协议udp用户数据报协议。
应用层 常见的协议有HTTP协议(超文本传输协议),FTP协议(文件传输协议)。
网络层 常见协议有IP协议、ICMP协议、IGMP协议。
网络接口层 常见协议有ARP协议、RARP协议。mac头14字节,源物理地址(6)和目的物理地址(6),类型(2)
TCP(20个字节)传输控制协议(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
UDP(8个字节)用户数据报协议(User Datagram Protocol)是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
HTTP超文本传输协议(Hyper Text Transfer Protocol)是互联网上应用最为广泛的一种网络协议。
FTP文件传输协议(File Transfer Protocol)
IP协议是因特网互联协议(20个字节)(Internet Protocol)
ICMP协议是Internet控制报文协议(Internet Control Message Protocol)它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。
IGMP协议是?Internet 组管理协议(Internet Group Management Protocol),是因特网协议家族中的一个组播协议。该协议运行在主机和组播路由器之间。
ARP协议是正向地址解析协议(Address Resolution Protocol),通过已知的IP,寻找对应主机的MAC地址。
RARP是反向地址转换协议,通过MAC地址确定IP地址。
路由器有网关网卡和外网网卡,
arp协议包,以太网头部,28字节ARP请求应答,
0800 ip数据报
0806 aRP请求应答
8035 RARP请求应答
其中的源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。可在shell中使用ifconfig命令查看,“HWaddr 00:15:F2:14:9E:3F”部分就是硬件地址。协议字段有三种值,分别对应IP、ARP、RARP。帧尾是CRC校验码。
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU,则需要对数据包进行分片(fragmentation)。ifconfig命令输出中也有“MTU:1500”。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧头长度。
?4.网络应用程序设计模式
C/S模式
传统的网络应用设计模式,客户机(client)/服务器(server)模式。需要在通讯两端各自部署客户机和服务器来完成数据通信。
B/S模式
浏览器()/服务器(server)模式。只需在一端部署服务器,而另外一端使用每台PC都默认配置的浏览器即可完成数据的传输。
优缺点
对于C/S模式来说,其优点明显。客户端位于目标主机上可以保证性能,将数据缓存至客户端本地,从而提高数据传输效率。且,一般来说客户端和服务器程序由一个开发团队创作,所以他们之间所采用的协议相对灵活。可以在标准协议的基础上根据需求裁剪及定制。例如,腾讯公司所采用的通信协议,即为ftp协议的修改剪裁版。
因此,传统的网络应用程序及较大型的网络应用程序都首选C/S模式进行开发。如,知名的网络游戏魔兽世界。3D画面,数据量庞大,使用C/S模式可以提前在本地进行大量数据的缓存处理,从而提高观感。
C/S模式的缺点也较突出。由于客户端和服务器都需要有一个开发团队来完成开发。工作量将成倍提升,开发周期较长。另外,从用户角度出发,需要将客户端安插至用户主机上,对用户主机的安全性构成威胁。这也是很多用户不愿使用C/S模式应用程序的重要原因。
B/S模式相比C/S模式而言,由于它没有独立的客户端,使用标准浏览器作为客户端,其工作开发量较小。只需开发服务器端即可。另外由于其采用浏览器显示数据,因此移植性非常好,不受平台限制。如早期的偷菜游戏,在各个平台上都可以完美运行。
B/S模式的缺点也较明显。由于使用第三方浏览器,因此网络应用支持受限。另外,没有客户端放到对方主机上,缓存数据不尽如人意,从而传输数据量受到限制。应用的观感大打折扣。第三,必须与浏览器一样,采用标准http协议进行通信,协议选择不灵活。
因此在开发过程中,模式的选择由上述各自的特点决定。根据实际需求选择应用程序设计模式
?5.进程间通信
无名管道?命名管道mmap文件?信号?消息队列?共享内存只能用于 本机的进程间通信
不同的主机间进程通信方法: ?socket。
socket必须成对出现
6.字节序
大小端?
小端:低位存低地址,高位存高地址,大端:低位存高地址,高位存低地址。
?
?7.ip转换
#include <arpa/inet.h>
?int?inet_pton(int af,?const char?*src, void *dst);(发送)
功能: 将点分十进制串 转成32位网络大端的数据("192.168.1.2" ?==> ??)
参数:
????af : ?AF_INET ????????IPV4
????????AF_INET6 ???????IPV6
??src: 点分十进制串的首地址?
??dst : 32位网络数据的地址?
成功返回1
#include <arpa/inet.h>
const char *inet_ntop(int af, const void *src,char *dst, socklen_t size);(接受)
功能: 将32位大端的网络数据转成点分十进制串
参数:
????af :?AF_INET
????src : 32位大端的网络数 地址
????dst : 存储点分十进制串 地址
????size : 存储点分制串数组的大小??
返回值: 存储点分制串数组首地址
?8.网络通信解决三大问题
协议、ip、端口
ipv4套接字结构体
struct sockaddr_in {
???????????????sa_family_t ???sin_family; /* address family: AF_INET */
???????????????in_port_t ?????sin_port; ??/* port in network byte order */
???????????????struct in_addr sin_addr; ??/* internet address */
???????????};
???????????/* Internet address. */
???????????struct in_addr {
???????????????uint32_t ??????s_addr; ????/* address in network byte order */
???????????};
sin_family: 协议 ?AF_INET
sin_portL端口
?sin_addr ?ip地址
通用套接字结构体
struct sockaddr {
????sa_family_t sa_family; ????/* address family, AF_xxx */
????char sa_data[14]; ?????????/* 14 bytes of protocol address */
};
?9.tcp协议
传输控制协议
特点: ??出错重传 每次发送数据对方都会回ACK, 可靠?
tcp是抽象打电话的模型
建立链接???使用连接 ??关闭连接
连接三次握手,断开连接四次握手
10.?创建套接字API
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
创建套接字
参数:
domain:AF_INET
type: SOCK_STREAM 流式套接字 用于tcp通信
protocol:?0
成功返回文件描述符,失败返回-1
总结:
mac地址是机器的物理地址,6个字节,唯一,IP是识别主机的id,虚拟id,ipv4,4个字节(32位)ipv6,16个字节(128位),ip能够区分主机id(被0覆盖)和子网id(被1覆盖),知道A,B,C类地址,端口号(0-65536),ifconfig查看ip
知道osi模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层,以及每一个层的用途,熟悉tcp/ip模型:链路层,网络层,传输层,应用层
熟悉每个层有哪些协议并且知道每个协议作用,链路层:RARPmac地址求ip地址,ARP知道ip地址求mac地址,网络层:ip互联网协议(20字节)ICMP:主机路由器之间,IGMP:主机和组播路由器之间,传输层:tcp协议面向连接的字节流传输控制协议(20字节),安全可靠,udp协议是无连接用户数据报协议(8字节)应用层:http协议超文本传输协议? ? ?mac头有14个字节,目标地址(6字节),源地址(6字节),类别(2字节)以太网最小传输字节数46字节,最大传输1500字节,(MTU)
网络应用程序设计模式:c/s客户端服务端模式,B/S浏览器服务端模式,知道这两种模式优缺点
同一主机和不同主机进程通信方式,同一主机:无名管道,有名管道,信号,共享内存,消息队列,信号量,不同主机:套接字socket
字节序:大端小端,小端:低地址存低位,大端相反
ip转换:点分十进制转换成32位网络大端数据,inet_pton(AF_INET,点分地址,32地址)? ? , inet_ntop(AF_INET,32地址,点分地址,数据大小)
网络通信,协议,ip,端口,ipV4套接字结构体sin_family=AF_INET,sin_port=htons(),sin_addr。
tcp协议出错重传,连接三次握手,断开连接四次握手
创建套接字api,socket(AF_INET,SOCK_STREAM,0)返回文件描述符
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!