一、相关概念
1.网络:是由若干结点的连接这些结点的链路组成,网络结点可以是计算机、交换机等设备。
传输介质:同轴电缆、双绞线、光纤。 网络设备:交换机、路由器、集线器等。
2.互联网:把多个网络连接起来就构成了互联网。最大的互联网为Inter网。
3.IP:结合Inter网的每个主机的每个接口分配的一个在全世界的唯一标识符。可以方便我们寻址。有PV4和IPV6两种类型。
- 类型:
IPV4类似“A、B、C、D”的格式,是32位的,用“.”分成四个段,每个段8个位(0-255),用10进制表示。IPV4报头:
IPV6为128位,类似“xxxxxxxxxxxxxxxxxxxxxxxxxx”,用“.”分成8个段,每个段16位,用4个16进制表示。
- 组成: 网络号+主机号
- 分类:
每类地址开头都是固定的,所以每类地址都有自己的范围:
A类:0.0.0.0 ——127.255.255.255;
B类:128.0.0.0 ——191.255.255.255;
C类:192.0.0.0 —— 233.255.255.255;
D类和E类地址不常用。
4.MAC地址
在局域网中,硬件地址又称物理地址或MAC地址,是固定在计算机适配器的ROM的地址。如果把计算机中的适配器换掉,那计算机所在的局域网的地址发生改变;如果把一个计算机所在的地址位置改变,但他的MAC地址是不会改变的。
5. 网络协议
网络基本协议就是一组网络规则的集合,是共同遵守的规定或标准。
常用的有:HTTP(超文本传输协议)、 FTP(文件传输协议)、TCP(传输控制协议)、UDP(用户数据报协议)、ICMP(因特网控制报文协议)、ARP(地址解析协议) 、RARP(逆地址解析协议)。
二、网络分层模型
1. 网络分层模型可分为OSI模型、TCP/ip协议族4层结构。
物理层:以二进制形式在物理介质上传输数据;
数据链路层:通过各种协议,将有差错的物理信道变成无差错、能可靠传输数据帧的数据链路。在物理层提供比特流的基础上,提供可靠的通过物理介质传输数据的方法。差错检测、透明传输、封装成帧。
网络层:实现数据包的选路和转发,核心是IP协议和ICMP协议。
IP协议根据数据包的数目的IP地址决定如何传递。若不能直接转发给主机,则会寻找合适的路由器由路由器转发数据。 IP协议通过逐跳的方式确定路径。IP数据报的发送传输及接收都是相互独立的,没有上下关系。缺点无法处理乱序和重复 的IP数据报。
ICMP为上层提供无状态、无连接、不可靠的服务。无状态指通信双方不同步传输数据的状态信息;无连接指通信双方 都 不能 长久的维持对方的任何信息;不可靠指的是不能保证IP数据报准确到达接收端。
传输层:为两台应用主机提供端到端的通信,只关心通信的起始端和目的端,不在乎数据包的中转过程。主要有TCP、UDP、SCTP协议。TCP是超时重传、确认应答方式来确定数据报被正确的发送至目的地。UDP提供不可靠、无连接、基于数据报的服务。SCTP协议是为因特网上传输电话信号设计的。
会话层:建立、维护和管理会话。
表示层:数据格式化、数据加密。
应用层:处理应用程序的逻辑。为应用程序提供服务。
网络通信流程图:
2.主机字节序列和网络字节序列
主机字节序列分为大端字节和小端字节序,不同的的主机采用的字节序列可能不同。
- 大端指的是一个整数的高位字节存储在内存低地址处,低字节存储在内存高地址处。
- 小端个整数的高位字节存储在内高地址处,低字节存储在内存低地址处。
不同字节序两主机在传递数据时,要将数据发送到网络时规定整型数据使用大端,所以也将大端字节序改为网络字节序。在对方在接收到数据后,可以根据自己的字节序转换。头文件:#include<netinet/in.h>
网络编程接口及相关函数介绍:
三、常见网络协议分析
1.TCP协议(全双工通信方式)
- 可靠的、面向连接,基于字节流服务。
TCP是超时重传、确认应答方式来确定数据报被正确的发送至目的地,所以TCP服务是可靠的。在TCP协议通信双方通信 时必须先建立TCP连接,并在内核为该链接维持一些必要的数据结构。在通信结束后双方必须关闭连接以释放内核数据。基 于流的数据没有边界(长度)限制,他可以一直从通信地一端流入另一端。发送端可逐个字节地向数据写入数据,接收端可 以逐个字节将他们读出。
- TCP报头:
- 在linux下实现TCP协议通信步骤说明:
TCP的面向连接:服务器与客户端在真正交互前必须建立一个连接,后面的交互都在这个连接上完成
- 在建立连接过程中,要实现同步报文段;——>三次握手
- 在链接上交互,数据传输更加可靠; ——>四次挥手
- 交互完成后,需要断开链接,以释放内核资源;——>心跳包机制
TCP的可靠性:
- 保证数据能传输到目的端 ——>应答确认 超时重传 滑动窗口 拥塞控制
- 保证数据不乱序,不重复 ——>TCP固定头部有32位序号
- 保证数据不失真 ——>16为校验码
2.UDP协议:
- 无连接、不可靠、基于数据报的服务。
“不可靠”意味着UDP无法保证数据从起始端发送后能够正确传输到目的端。如若数据丢失,或者目的端口通过数据校验发现数据错误将其丢掉,那UDP只会简单通知程序发送失败。UDP每次发送数据报时都有规定长度,接收端必须以该长度为最小单位将其所有内容一次性读出,否则数据就会被截断。
- UDP报头:
- 特点:发送端执行的写操作次数和接收端执行的读操作的次数没有任何关系,应用程序对数据的发送和接收无边界限制。
- linux下建立UDP会话过程
其中:int recvfrom(int sockfd,void *buff,size_t size,int flag,struct sockaddr *peer_addr,socklen_t *addr_len);
int sendto(int sockfd,void *buff,size_t size,int flag,struct sockaddr *des_addr,socklen_t *addr_len);
- UDP协议与TCP协议
TCP协议(字节流服务):
- 发送端send的次数与接收端recv的次数不等;
- 发送端send的次数与网络层封装的TCP报头个数不等;
- 接收端recv若一次没有将数据接收完,下次recv连接会读取后续数据;
第一条与第二条是因为数据粘包的问题。
UDP协议(数据报服务):
- 发送端sendto的次数与接收端recvfrom的次数相等;
- 发送端send的次数与网络层封装的TCP报头个数相等;
- 接收端recvfrom若一次没有将UDP报文中的数据接收完,剩下的数据将会被丢弃;
4.DNS(域名解析协议) 应用层
将域名转化为IP地址 DNS服务器上存储域名到IP地址的映射。 访问方式分为两种:
递归查询:DNS服务器代表客户机查询或联系其他DNS服务器以完成解析该名称,并将应答返回至客户机;
迭代查询:客户机可自己联系其他用的DNS服务器解析名称,若客户机这样做,他会使用基于服务器应答的独立和附加的查 询,这过程成为迭代。
- 查询步骤:
1.在浏览器输入www.baidu.com域名时,服务器首先会检查自己本地的hosts文件是否有这个网址映射关系,若有完成域名 解析;
2.若hosts文件与本地DNS解析器缓存没有相应的映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,我们叫他本地 DNS服务器,如果查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,但此解析不具有 权威性;
3.若本地的DNS服务器、本地区域文件与缓存解析失效,则根据本地DNS服务器的设置,是否设置了转发模式来进行查询。 若用转发模式,本地DNS就把请求发送至13台根服务器上,根DNS服务器在收到请求后判断这个域名(.com)是由谁管 理,并返回一个该顶级域名服务器的一个IP。本地DNS服务器收到IP后,这台负责域名收到请求后,若无法解析,会查找 下一级的DNS服务器(baidu.com)给本地服务器,以此类推,直到找到IP,并缓存到本地。解析过程由右向左。
.——>.com——>baidu.com——>www.baidu.com——>.........
4.若是不是转发模式,则与上步骤相反,由下向上找。www.baidu.com——> qq.com——>.com——>.
5.HTTP协议(默认80端口) 应用层
1. 简介:对客户端和服务器端之间数据传输的格式规范,简称超文本传输协议。基于TCP/IP通信协议来传递数据,工作于客户 端 ——服务器端架构上。浏览器作为客户端向web服务器端发送请求,服务器根据收到的请求向客户端发送相应。
2.特点:
- 支持客户/服务器(C/S)模式;
- 简单快速。客户向服务器请求服务时,只需传送请求方法个路径。
- 灵活。允许传输任意类型的数据对象。
- 无连接:限制每次连接只处理一个请求。服务器处理完客户的请求后并受到客户的回应后,断开连接;
- 无状态:对处理事务无记忆力
3.请求方式:
- GET:请求获得资源。不对服务器产生任何其他影响;
- POST:客户端向服务器提交数据的方法,这种方法会影响服务器。服务器可能根据上传情况创建新的资源,或更新原有资 源;
- PUT:请求服务器存储一个资源。
- HEAD:和GET方法类似,仅仅要求服务器返回头部信息,而且不虚传输任何实际内容;
- TRACE:要求服务器返回原始HTPP请求的内容。用来查看中间服务器对http请求的影响;
- OPTIONS:查看服务器对某个特定的URL都支持哪些请求方法。也可把URL设置为*,从而获取服务器支持请求的所有方 法;
- CONNECT:用于某些代理服务器,能把要求的链接转化为一个安全隧道;
- PATCH:对某个资源做部分修改。
4.Http报头
请求报头结构:
应答报头结构:
应答状态:
1XX:指示信息--表示请求已接收,继续处理;
2XX:成功---- 表示请求已经被成功接收,理解,接受;
3XX:重定向-要完成请求必须进行更近一步的操作;
4XX:客户端错误-请求有语法错误或者请求无法实现;
5XX:服务器端错误---服务器未能实现合法的请求;
5.具体应答状态码:
*400---客户端请求有语法错误,不能被服务器理解:
*401----请求未经授权;
*403-- - 服务器收到请求,但拒绝提供服务;
*404----请求资源不存在;
*500---服务器发生不可预期的错误;
*503---服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
6.http与https(网络协议)的区别:
- https需要申请ca证书,一般免费证书很少,需要缴费;
- http是超文本传输协议,信息是明文传输;https是具有安全性的SSL加密传输协议;
- http和https是完全不同的连接方式,用的端口也不同(http:80,https:443);
- http协议链接简单,无状态;
- https协议由SSL+http协议构成的可进行加密传输、身份认证的网络协议。