计算机网络层次结构
OSI层次结构及TCP/IP层次结构区别:
TCP/IP层次结构中重要协议
网络层
网络层的目的是实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。数据交换技术是报文交换(基本上被分组所替代):采用储存转发方式,数据交换单位是报文。主要设备:路由器
网络层主要协议
- IP协议(Internet Protocol,因特网互联协议);
- ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
- ARP协议(Address Resolution Protocol,地址解析协议);
- RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
IP协议
IP地址
IP地址都是由网络前缀和主机号两部分组成,MAC地址称为硬件地址或者物理地址。
两者区别:
MAC地址是数据链路层使用的地址
IP地址是网络层和以上各层使用的地址,是一个逻辑地址
IP地址分类
A类(8网络号+24主机号)、B类(16网络号+16主机号)、C类(24网络号+8主机号)可以用于标识网络中的主机或路由器,D类地址作为组广播地址,E类是保留地址
网络地址转换NAT技术
用于多个主机通过一个公有IP访问访问互联网的私有网络中,减缓了IP地址的消耗,但是增加了网络通信的复杂度。
NAT 工作原理:
从内网出去的IP数据报,将其IP地址替换为NAT服务器拥有的合法的公共IP地址,并将替换关系记录到NAT转换表中;
从公共互联网返回的IP数据报,依据其目的的IP地址检索NAT转换表,并利用检索到的内部私有IP地址替换目的IP地址,然后将IP数据报转发到内部网络。
ARP协议与RARP协议
地址解析协议 ARP(Address Resolution Protocol):为网卡(网络适配器)的IP地址到对应的硬件地址提供动态映射。可以把网络层32位地址转化为数据链路层MAC48位地址。ARP表建立IP地址到MAC地址的映射。
RARP(Reverse Address Resolution Protocol)协议指逆地址解析协议,可以把数据链路层MAC48位地址转化为网络层32位地址。
ICMP协议
网际控制报文协议(Internet Control Message Protocol),可以报告错误信息或者异常情况,ICMP报文封装在IP数据报当中。
主要应用:
- Ping应用:网络故障的排查;
- Traceroute应用:可以探测IP数据报在网络中走过的路径。
其他协议
内部网关协议:
- RIP(应用层)
- OSPF(网络层)
外部网关协议:
- BGP(应用层)
传输层
传输层负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;重要设备:网关。
主要协议:TCP和UDP
端口号
传输层使用端口号标记不同的网络进程(0-65535)
UDP
UDP(User Datagram Protocol: 用户数据报协议),是一个非常简单的协议。
UDP特点:
- UDP是无连接协议;
- UDP不能保证可靠的交付数据;
- UDP是面向报文传输的;
- UDP没有拥塞控制;
- UDP首部开销很小。
TCP
TCP(Transmission Control Protocol: 传输控制协议)
TCP功能:
- 对应用层报文进行分段和重组;
- 面向应用层实现复用与分解;
- 实现端到端的流量控制;
- 拥塞控制;
- 传输层寻址;
- 对收到的报文进行差错检测(首部和数据部分都检错);
- 实现进程间的端到端可靠数据传输控制。
TCP特点:
- TCP是面向连接的协议;
- TCP是面向字节流的协议;
- TCP的一个连接有两端,即点对点通信;
- TCP提供可靠的传输服务;
- TCP协议提供全双工通信(每条TCP连接只能一对一)
TCP标记
建立连接时三次握手
为什么需要三次握手?
- 第一次握手:客户发送请求,此时服务器知道客户能发;
- 第二次握手:服务器发送确认,此时客户知道服务器能发能收;
- 第三次握手:客户发送确认,此时服务器知道客户能收。
第一次:客户向服务器发送连接请求段,建立连接请求控制段(SYN=1),表示传输的报文段的第一个数据字节的序列号是x,此序列号代表整个报文段的序号(seq=x);客户端进入 SYN_SEND (同步发送状态);
第二次:服务器发回确认报文段,同意建立新连接的确认段(SYN=1),确认序号字段有效(ACK=1),服务器告诉客户端报文段序号是y(seq=y),表示服务器已经收到客户端序号为x的报文段,准备接受客户端序列号为x+1的报文段(ack_seq=x+1);服务器由LISTEN进入SYN_RCVD (同步收到状态);
第三次:客户对服务器的同一连接进行确认.确认序号字段有效(ACK=1),客户此次的报文段的序列号是x+1(seq=x+1),客户期望接受服务器序列号为y+1的报文段(ack_seq=y+1);当客户发送ack时,客户端进入ESTABLISHED 状态;当服务收到客户发送的ack后,也进入ESTABLISHED状态;第三次握手可携带数据.
释放连接时四次挥手
第一次:客户向服务器发送释放连接报文段,发送端数据发送完毕,请求释放连接(FIN=1),传输的第一个数据字节的序号是x(seq=x);客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态);
第二次:服务器向客户发送确认段,确认字号段有效(ACK=1),服务器传输的数据序号是y(seq=y),服务器期望接收客户数据序号为x+1(ack_seq=x+1);服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待);客户端收到ACK段后,由FIN_WAIT_1进入FIN_WAIT_2;
第三次:服务器向客户发送释放连接报文段,请求释放连接(FIN=1),确认字号段有效(ACK=1),表示服务器期望接收客户数据序号为x+1(ack_seq=x+1);表示自己传输的第一个字节序号是y+1(seq=y+1);服务器状态由CLOSE_WAIT 进入 LAST_ACK (最后确认状态);
第四次:客户向服务器发送确认段,确认字号段有效(ACK=1),表示客户传输的数据序号是x+1(seq=x+1),表示客户期望接收服务器数据序号为y+1+1(ack_seq=y+1+1);客户端状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态;服务器在收到最后一次ACK后,由LAST_ACK进入CLOSED;
最后需要等待2MSL:
- 最后一个报文没有确认;
- 确保发送方的ACK可以到达接收方;
- 2MSL时间内没有收到,则接收方会重发;
- 确保当前连接的所有报文都已经过期。
应用层
为操作系统或网络应用程序提供访问网络服务的接口。数据传输基本单位为报文。
主要协议:
- FTP(文件传送协议)
- Telnet(远程登录协议)
- DHCP(Dynamic Configuration Protocol:动态主机设置协议)
- DNS(域名解析协议)
- SMTP(邮件传送协议)
- POP3协议(邮局协议)
- HTTP协议(Hyper Text Transfer Protocol)。
DNS协议
DNS(Domain Name System:域名系统)【C/S,UDP,端口53】:解决IP地址复杂难以记忆的问题,存储并完成自己所管辖范围内主机的 域名
到 IP地址
的映射。
域名解析的顺序:
- 浏览器缓存,
- 找本机的hosts文件,
- 路由缓存,
- 找DNS服务器(本地域名、顶级域名、根域名)->迭代解析、递归查询。
域名由点、字母和数字组成,分为顶级域(com,cn,net,gov,org)、二级域(baidu,taobao,qq,alibaba)、三级域(www)
DHCP协议
DHCP(Dynamic Configuration Protocol:动态主机设置协议):是一个局域网协议,是应用UDP协议的应用层协议。作用:为临时接入局域网的用户自动分配IP地址。
FTP协议
文件传输协议(FTP):控制连接(端口21):传输控制信息(连接、传输请求),以7位ASCII码的格式。整个会话期间一直打开。
HTTP协议
HTTP(HyperText Transfer Protocol:超文本传输协议)【TCP,端口80】:是可靠的数据传输协议,浏览器向服务器发收报文前,先建立TCP连接,HTTP使用TCP连接方式(HTTP自身无连接)。
HTTP请求报文
请求方法主要有:GET和POST
GET和POST区别
请求位置:GET请求从服务器获取数据,而POST请求向服务器提交数据。
数据传输方式:GET请求通过URL参数传输数据,在URL中附加参数,以?符号开始,参数之间使用&符号连接。例如:
http://example.com/page?param1=value1¶m2=value2
。POST请求将数据包含在请求的主体中,而不是URL中。请求长度限制:GET请求对URL长度有限制,由浏览器或服务器设定,通常在几千个字符左右。POST请求没有严格的长度限制,可以传输较大的数据量。
数据安全性:GET请求的参数在URL中可见,因此不适合传输敏感信息,如密码等。POST请求的参数在请求主体中,相对于GET请求更安全,但仍然可以通过网络抓包等方式获取数据。
缓存:GET请求可以被缓存,由于GET请求仅用于获取数据,多次相同的GET请求可以返回缓存的结果。POST请求不会被缓存,每次请求都会向服务器提交数据。
幂等性:GET请求是幂等的,即多次发送相同的GET请求不会对服务器造成影响,仅用于获取数据。POST请求不是幂等的,多次发送相同的POST请求会对服务器产生不同的结果,可能会修改服务器上的数据。
GET适用于获取数据,POST适用于提交数据。
HTTP响应报文
响应状态码
- 1xx:信息提示,表示请求已被成功接收,继续处理。
- 2xx:请求被成功提交。
- 3xx:客户端被重定向到其他资源。
- 4xx:客户端错误状态码,格式错误或者不存在资源。
- 5xx:描述服务器内部错误。
常用状态码
- 200:客户端请求成功,是最常见的状态。
- 302:重定向。
- 404:请求资源不存在,是最常见的状态。
- 400:客户端请求有语法错误,不能被服务器所理解。
- 401:请求未经授权。
- 403:服务器收到请求,但是拒绝提供服务。
- 500:服务器内部错误,是最常见的状态。
- 503:服务器当前不能处理客户端的请求。
HTTPS协议
HTTPS(Secure)是安全的HTTP协议,端口号443。基于HTTP协议,通过SSL或TLS提供加密处理数据、验证对方身份以及数据完整性保护。
HTTP和HTTPS的区别
安全性:HTTP是明文传输的协议,数据在传输过程中不加密,容易被窃听和篡改。而HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对通信进行加密,确保数据的机密性和完整性,提供更高的安全性。
数据传输方式:HTTP使用默认端口80进行通信,而HTTPS使用默认端口443进行通信。HTTP的数据传输是明文的,而HTTPS使用SSL/TLS协议对数据进行加密和解密。
证书要求:HTTPS需要使用SSL证书来验证服务器的身份。SSL证书由可信任的第三方机构颁发,用于确认服务器身份的真实性。这样可以防止中间人攻击(Man-in-the-Middle Attack)和伪装等安全问题。
SEO影响:搜索引擎优化(SEO)方面,HTTPS在搜索引擎中的排名可能更高。搜索引擎(如Google)倾向于将使用HTTPS的网站作为更安全和可信赖的网站对待,因此HTTPS有助于提高网站的可信度和搜索排名。
性能:由于HTTPS的加密和解密过程需要消耗更多的计算资源和时间,因此相对于HTTP而言,HTTPS的性能稍微降低。但是随着计算能力的提升,这种性能差异逐渐减小。
综上所述,HTTPS相比于HTTP提供了更高的安全性和数据保护,适用于对数据传输安全要求较高的场景,如在线支付、用户登录等。对于一般的网页浏览,HTTP已经足够。选择使用HTTP还是HTTPS取决于具体的使用场景和安全需求。