TCP/IP参考模型
层级 数据形式 主要功能 协议(只标注较主要)
应用层 数据段 文件传输、邮件、文件服务 FTP、HTTP、DNS
传输层 数据包 提供端对端的接口 TCP、UDP
网络层 数据帧 为数据包传输提供路由 IP
数据链路层 比特流 以二进制形式在物理某体上传输电流 ARP
----------------------------------------------------------------------------------------------------------------------------
HTTP(该协议主要在C/S架构中使用)---超文本传输协议
客户端发起“请求报文”
URL(Uniform Resource Locator)
Protocol://HOST:port/path/to/file
客户端请求分为静态页面和动态
静态页面由apache/nginx等直接解释即可。
动态网页,服务器端的存储文档非HTML格式,而是编程语言开发的脚本,脚本接受参数之后在服务器运行一次,运行完成之后生产HTML格式的文档,把生产的文档发给客户端。一般使用到php、tomcat等
服务端回应“响应报文”(在服务端接受客户端请求的前提下)
web服务器的主要操作:
1、建立连接--接受或拒绝客户端连接请求;
2、接受请求--通过网络读取HTTP请求报文;
3、处理请求--解析请求报文并做出相应的动作;
4、访问资源--访问请求报文中的相关的资源;
5、构建响应--使用正确的首部生成HTTP相应报文;
6、发送响应--向客户端发送生成的响应报文;
7、记录日志--将已经完成的HTTP事务记录日志文件;
HTTP请求返回的状态代码:
1xx: 纯信息
2xx: “成功"类的信息(200、201、202)
3xx: 重定向类的信息(301、302、304)
4xx: 客户端错误类的信息(404)
5xx: 服务器端错误类的信息(500、502、503)
常见状态代码、状态描述、说明:
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
--------------------------------------------------------------------------------------------------------------------------
请求报文:
GET / HTTP/1.1
Connection:keep-alive
--------------------------------------------------------------------------------------------------------------------------
响应报文语法:
--------------------------------------------------------------------------------------------------------------------------
DNS(Domain Name System---域名系统)
域名:www.magedu.com(主机名,FQDN:Full Qualified Domain Name, 完全限定域名)
DNS:名称解析,Name Resolving 名称转换(背后有查询过程,数据库)
FQDNIP
www.mabeyx.com. 172.16.0.1
mail.mabeyx.com. 172.16.0.2
查询方式:
递归:只发出一次请求
迭代:发出多次请求
解析:
正向:FQDN-->IP
反向:IP-->FQDN
简介:全球共设置13台根域名解析服务器(1主、12从),主要作用为解析.com、.net、.org等一级域名。
--------------------------------------------------------------------------------------------------------------------------
FTP (File Transfer Protocol---文件传输协议):该协议主要在C/S架构中使用
FTP标准命令TCP端口号为21,Port方式数据端口为20.FTP的任务是从一台计算机将文件传送到另一台计算机,不受操作系统的限制(跨平台传输)。
客户端使用完整URL进行文件获取
ftp://[用户名:口令@]ftp服务器域名:[端口号]
用户感知为文件的 “上传“ 与 ”下载“。
--------------------------------------------------------------------------------------------------------------------------
TCP与UDP协议:
TCP协议是基于连接的可靠协议,有流量控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率比UDP低
UDP协议是基于无连接的不可靠协议,没有控制手段,仅仅是将数据发送给对方,因此效率比TCP要高。
区别如下:
1、TCP是需要基于链接的、UDP是不需要链接的
2、对系统资源的要求(TCP较多,UDP少)
3、TCP需要三次握手架构较复杂、UDP程序架构较简单
4、TCP是流模式与UDP是数据报模式 ;
5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
-----------------------------------------------------------------------------
图中有几个字段需要重点介绍下:
(1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
(2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
(3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下:
(A)URG:紧急指针(urgent pointer)有效。
(B)ACK:确认序号有效。
(C)PSH:接收方应该尽快将这个报文交给应用层。
(D)RST:重置连接。
(E)SYN:发起一个新连接。
(F)FIN:释放一个连接。
三次握手:(建立连接)
1、【Client→Server】 SYN=1 sn=J Client进入SYN_SENT状态
2、【Client←Server】 SYN=1 ACK=1 an=J+1 sn=T Server进入SYN_RCVD状态
3、【Client→Server】 ACK=1 sn=J+1 an=T+1 lient和Server进入ESTABLISHED状态
四次挥手:(断开链接)
1、【Client→Server】 FIN=J Client进入FIN_WAIT_1状态
2、【Client←Server】 ACK=1 ack=J+1 Server进入CLOSE_WAIT状态
3、【Client←Server】 FIN=K Server进入LAST_ACK状态
4、【Client→Server】 ACK=1 ack=K+1 Client进入TIME_WAIT状态、Server进入CLOSED状态
TCP报文首部
--------------------------------------------------------------------------------------------------------------------------
IP协议(1、将IP地址写入数据包的IP首部;2、路由)
IP协议的作用在于把各种数据包准确无误的传递给对方,其中两个重要的条件是IP地址,和MAC地址。
IP 间的通信依赖 MAC 地址。在网络上,通信的双方在同一局域网(LAN)内的情况是很少的,通常是经过多台计算机和网络设备中转才能连接到对方。而在进行中转时,会利用下一站中转设备的 MAC 地址来搜索下一个中转目标。这时,会采用 ARP 协议(Address Resolution Protocol)。ARP 是一种用以解析地址的协议,根据通信方的 IP 地址就可以反查出对应的 MAC 地址。
--------------------------------------------------------------------------------------------------------------------------
ARP协议
A的地址为: IP:10.1 MAC: AA-AA
B的地址为: IP:10.2 MAC: BB-BB
A-10.1要向10.2发送数据时,A会在网内发送广播,谁是10.2,此时有设备对应的IP地址为10.2时,将在网内回应,我是10.2 我的MAC为BB-BB。然后设备AA-AA将向设备BB-BB发送数据。
ARP欺骗(设定B为欺骗者):解决方法为IP与MAC绑定
A的地址为:IP:10.1 MAC: AA-AA
B的地址为:IP:10.2 MAC: BB-BB
C的地址为:IP:10.3 MAC: CC-CC
此时:
1、B告诉A 我是10.3 我的MAC是BB-BB(此信息被更新到A的ARP缓存中)
同时B告诉C 我是10.1 我的MAC是BB-BB(此信息被更新到C的ARP缓存中)
2、A与C通信是。如A向C传输数据包时、目标IP被查询到的设备MAC为BB-BB,即数据包会经过B,再经其转向给C。(C向A传输数据奕如此)
--------------------------------------------------------------------------------------------------------------------------
OSI与TCP/IP模型关联对比
--------------------------------------------------------------------------------------------------------------------------
以太网CSMA/CD机制,让电脑工作在半双工模式下的。即发送数据前需要监听网络,当网络繁忙时,多方一起竞争,会有很大的延迟。
----------------------------------------------------------------------------------------------------------------------------
实例模拟过程:
场景:客户端访问某网站的一个页面
动作:客户端去访问 http://mabeyx.com:8080/wordpress/index.php
假设条件: 1、客户端:IP=X 网站(服务器)IP:192.168.12.235
2、网站(服务器)名称:mabeyx.com
3、服务端的架构为LNMP
4、此次访问是正常、顺利的。
过程:
1、客户端根据自己设定的DNS服务器去正向解析mabeyx.com,返回的非权威应答为192.168.12.235;
假如客户端无设定DNS服务器且缓存中无mabeyx.com的信息,将从根DNS服务器开始查询。(.com服务器返回的解析结果才是权威应答,其他DNS服务器返回的解析结果都为非权威应答)
2、X→192.168.12.235传输数据,根据IP协议,X会在多条路径中选择一条到达192.168.12.235。形成一张从X→192.168.12.235的路由表。
3、在2过程中会结果无数的设备,根据ARP协议,使用通信的IP地址反查对应的MAC地址,并将数据帧传输给下一MAC。并以此将数据传输至目标服务器上。
4、访问端口为8080,根据TCP协议,进行三次握手。
1、【Client→Server】 SYN=1 sn=J Client进入SYN_SENT状态
2、【Client←Server】 SYN=1 ACK=1 an=J+1 sn=T Server进入SYN_RCVD状态
3、【Client→Server】 ACK=1 sn=J+1 an=T+1 Client和Server进入ESTABLISHED状态
4.1、完成三次握手,并建立连接;
4.2、接受客户端的HTTP请求报文;
4.3、处理请求,将请求中的index.php内容通过CGI协议,交由PHP解析器进行处理。
4.4、访问资源,假如此时需要访问数据
数据库在本地:PHP使用Socket的方式向MySQL获取数据
数据库非本地:PHP使用TCP协议向MySQL获取数据
4.5、构建响应,将客户端请求的结果生产HTTP报文;
4.6、发送响应,向客户端发送生成的响应报文;
4.7、记录日志--将已经完成的HTTP事务记录日志文件。
5、响应的HTTP报文通过客户端使用的浏览器解析成非纯文本的形式展现出来,并保持至缓存中;
6、客户端发起断开链接请求,根据TCP协议,进行四次挥手。
1、【Client→Server】 FIN=J Client进入FIN_WAIT_1状态
2、【Client←Server】 ACK=1 ack=J+1 Server进入CLOSE_WAIT状态
3、【Client←Server】 FIN=K Server进入LAST_ACK状态
4、【Client→Server】 ACK=1 ack=K+1 Client进入TIME_WAIT状态、Server进入CLOSED状态