计算机网络

计算机网络

2.1 TCP/IP网络模型

应用层

给用户提供应用功能:HTTP,FTP,DNS

传输层

TCP,UDP
TCP叫传输控制协议,流量控制,超时重传,拥塞控制,保证数据包能可靠的传输给对方
UDP只负责发送,不保证送达,要实现可靠的UDP可以在应用层实现TCP特性
传输层数据包超过MSS,就需要分块,称为TCP段
传输到不同应用需要端口号区分,传输层报文中有端口号
传输层负责应用到应用之间的通信

网络层

设备之间通过网络层传输
网络层使用IP协议,讲传输层的报文作为数据,前面加上IP头,长度超过MTU时,会再次分片
传输时寻址通过IP地址,分为子网号和主机号
IP协议另一个作用时路由,寻址是目的地,路由是操作方向盘,下一步往哪里走

网络接口层

在IP头前面加MAC头
在以太网中传输原始数据包需要匹配MAC头
给网络层提供链路级别的传输,工作在网卡这个层次,用MAC头标识设备

2.2 键入网址到网页显示

http

浏览器解析url,http:表示访问数据的协议,www.server.com 是指web服务器,后面的/……/file.html就是数据源文件的路径
没有路径时读取默认文件index.html
确认web服务器和文件名之后生成http请求信息

DNS

生成请求信息后,要委托操作系统发送给web服务器,就需要知道服务器域名对应的IP地址
比如www.server.com. ,.表示根域,每个DNS服务器中都有它的信息
.com是顶级域,server.com是权威域,域名解析只指路不带路
浏览器先看自己缓存,没有就委托操作系统,操作系统没有缓存就查hosts文件,没有就问本地DNS服务器

协议栈

http获取IP地址后委托操作系统中的协议栈
浏览器通过socket库委托协议栈工作
上半部分是TCP和UDP分别负责收发数据
下半部分是IP协议,其中有ICMP和ARP
ICMP用于告知传输过程中产生的错误和各种控制信息
ARP用于查询对应MAC地址
下面是网卡驱动程序负责控制网卡,硬件网卡负责实际的收发

TCP

TCP三次握手建立连接
服务端主动监听,客户端发送SYN进入SYN_sent状态,服务端收到后返回SYN+ACK进入SYN_RCVD,客户端收到进入ESTABLISTENED并发送ACK,服务端收到进入ESTABLISTENED
目的是确认双方都有收发能力
分割数据加上TCP头,生成TCP报文

IP

TCP执行连接、收发、断开等操作时,都需要委托IP模块将数据封装成网络包
IP协议里需要源地址IP和目的地址IP
HTTP经过TCP传输,所以IP包头协议号为06(十六进制)
客户端有多个网卡时就会有多个IP地址,通过路由表查询
找到genmask进行与计算,对比definition
若路由表中没有匹配的,就自动匹配0.0.0.0的默认网关,gateway就是IP

MAC

生成IP头部后再加上MAC头部
需要发送方和接收方的MAC地址
发送方的在网卡ROM中,接收方需要找到IP然后广播寻找MAC地址,如果ARP缓存中有就不需要询问
MAC报文生成

网卡

将网络包这样的数字信号转化为电信号
网卡驱动获取网络包之后,将其复制到网卡缓存
在开头加上报头和起始帧分界符,末尾加上FCS

交换机

将电信号转化为数字信号
查询MAC表确定MAC地址,将信号发送至目的端口

路由器

去掉MAC头部,确定下一步路径

服务端与客户端

服务端收到网络包,扒开MAC头部,检查是否匹配
再扒IP和TCP头,TCP头部的端口号,http正在监听
给http后,返回一个页面,封装在响应报文
加上TCP,IP,MAC头部,从网卡出去,到交换机,到路由器
客户端路由器检查IP头,到交换机,渲染
客户端离开时向服务端发起四次挥手,断开连接

2.3 linux系统如何收发网络包

接收

触发中断,网卡每收到一个网络包,就触发一个中断,高性能网络场景下,会影响系统效率
所以在linux2.6中引入了NAPI机制,是混合中断和轮询的机制
核心概念就是采用中断唤醒数据接收的程序,然后poll的方法来轮询数据
当有网络包到达时,通过DMA技术,将网络包写入指定内存地址Ring Buffer,接着网卡向CPU发起硬件中断
CPU根据中断表,调用已经注册的中断处理函数
函数会进行暂时屏蔽中断,表示已经知道内存中有数据,下次直接写内存不要通知CPU
发起一个软中断,恢复刚才屏蔽的中断
内核中ksoftirqd专门负责软中断处理,收到软中断进行轮询处理数据
线程会从Ring Buffer中获取一个数据帧,用sk_buff表示,从而作为网络包交给协议栈进行处理

发送

将用户待发送的数据拷贝到sk_buff内存,并将其加入到发送缓冲区
TCP协议则先拷贝sk_buff副本,然后填充TCP头,IP,MAC
触发软中断,sk_buff挂到RingBuffer,将数据映射到DMA区域,触发真实发送

3.1 HTTP常见面试题

HTTP基本概念

HTTP是什么

是计算机世界中专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的【约定和规范】
HTTP是用于从网络服务器传输超文本到本地浏览器的协议,这种说法是否正确?
不正确,因为HTTP也可以用于服务器到服务器之间的传输

HTTP常见状态码有哪些

1xx 属于提示信息,是协议处理中的一种中间状态,实际用到的比较少
2xx 表示服务器成功处理了客户端的请求

  • 200 OK是最常见的成功状态码,如果是非HEAD请求,服务器返回的响应头都会有body数据
  • 204 No Content也是常见的成功状态码,就是没有body数据
  • 206 Partial Content应用于http分块下载或断点续传,表示响应返回的body数据不是资源的全部,而是其中的一部分,也是成功的状态

3xx 表示客户端请求的资源发生了变动,需要客户端用新的url发送请求,也就是重定向

  • 301 Moved Permanently 永久重定向,请求的资源已经不在了,需要用新的url再次访问
  • 302 Found 临时重定向,请求的资源还在,暂时需要新的url访问
  • 304 Not Modified 不具有跳转的含义,表示资源未修改,重定向已存在的缓冲文件,也称缓存重定向,也就是告诉客户端可以继续使用缓存资源,用于缓存控制
    301,302都会在响应头里使用字段location,用于指明后续要跳转的url

4xx 表示客户端发送的报文有误,服务器无法处理

  • 400 Bad Request 表示客户端请求的报文有错误,但只是个笼统的错误
  • 403 Forbidden 表示服务器禁止访问资源,并不是客户端的请求出错
  • 404 Not Found 表示请求的资源在服务器上未找到或不存在,所以无法提供给客户端

5xx 表示客户端请求报文正确,服务器处理时内部发生错误,属于服务器端错误码

  • 500 Internal Server Error 与400类似,是个笼统的错误码
  • 501 Not Implemented 表示客户端请求的功能还不支持,并未完善
  • 502 Bad Gateway 通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误
  • 503 Service Unavailable 表示服务器当前很忙,暂时无法响应客户端,类似“网络服务正忙,请稍后重试”
  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值