network

计算机网络层次结构

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功能:

  1. 对应用层报文进行分段和重组;
  2. 面向应用层实现复用与分解;
  3. 实现端到端的流量控制;
  4. 拥塞控制;
  5. 传输层寻址;
  6. 对收到的报文进行差错检测(首部和数据部分都检错);
  7. 实现进程间的端到端可靠数据传输控制。

TCP特点:

  • TCP是面向连接的协议;
  • TCP是面向字节流的协议;
  • TCP的一个连接有两端,即点对点通信;
  • TCP提供可靠的传输服务;
  • TCP协议提供全双工通信(每条TCP连接只能一对一)

TCP标记

建立连接时三次握手

为什么需要三次握手?

  1. 第一次握手:客户发送请求,此时服务器知道客户能发;
  2. 第二次握手:服务器发送确认,此时客户知道服务器能发能收;
  3. 第三次握手:客户发送确认,此时服务器知道客户能收。

  • 第一次:客户向服务器发送连接请求段,建立连接请求控制段(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:

  1. 最后一个报文没有确认;
  2. 确保发送方的ACK可以到达接收方;
  3. 2MSL时间内没有收到,则接收方会重发;
  4. 确保当前连接的所有报文都已经过期。

应用层

为操作系统或网络应用程序提供访问网络服务的接口。数据传输基本单位为报文。

主要协议:

  • 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地址 的映射。

域名解析的顺序:

  1. 浏览器缓存,
  2. 找本机的hosts文件,
  3. 路由缓存,
  4. 找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区别

  1. 请求位置:GET请求从服务器获取数据,而POST请求向服务器提交数据。

  2. 数据传输方式:GET请求通过URL参数传输数据,在URL中附加参数,以?符号开始,参数之间使用&符号连接。例如:http://example.com/page?param1=value1&param2=value2。POST请求将数据包含在请求的主体中,而不是URL中。

  3. 请求长度限制:GET请求对URL长度有限制,由浏览器或服务器设定,通常在几千个字符左右。POST请求没有严格的长度限制,可以传输较大的数据量。

  4. 数据安全性:GET请求的参数在URL中可见,因此不适合传输敏感信息,如密码等。POST请求的参数在请求主体中,相对于GET请求更安全,但仍然可以通过网络抓包等方式获取数据。

  5. 缓存:GET请求可以被缓存,由于GET请求仅用于获取数据,多次相同的GET请求可以返回缓存的结果。POST请求不会被缓存,每次请求都会向服务器提交数据。

  6. 幂等性: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的区别

  1. 安全性:HTTP是明文传输的协议,数据在传输过程中不加密,容易被窃听和篡改。而HTTPS通过使用SSL(Secure Sockets Layer)或TLS(Transport Layer Security)协议对通信进行加密,确保数据的机密性和完整性,提供更高的安全性。

  2. 数据传输方式:HTTP使用默认端口80进行通信,而HTTPS使用默认端口443进行通信。HTTP的数据传输是明文的,而HTTPS使用SSL/TLS协议对数据进行加密和解密。

  3. 证书要求:HTTPS需要使用SSL证书来验证服务器的身份。SSL证书由可信任的第三方机构颁发,用于确认服务器身份的真实性。这样可以防止中间人攻击(Man-in-the-Middle Attack)和伪装等安全问题。

  4. SEO影响:搜索引擎优化(SEO)方面,HTTPS在搜索引擎中的排名可能更高。搜索引擎(如Google)倾向于将使用HTTPS的网站作为更安全和可信赖的网站对待,因此HTTPS有助于提高网站的可信度和搜索排名。

  5. 性能:由于HTTPS的加密和解密过程需要消耗更多的计算资源和时间,因此相对于HTTP而言,HTTPS的性能稍微降低。但是随着计算能力的提升,这种性能差异逐渐减小。

综上所述,HTTPS相比于HTTP提供了更高的安全性和数据保护,适用于对数据传输安全要求较高的场景,如在线支付、用户登录等。对于一般的网页浏览,HTTP已经足够。选择使用HTTP还是HTTPS取决于具体的使用场景和安全需求。

-------------本文结束感谢阅读-------------