计算机网络

数据帧(ip包(TCP/UDP包(Data)))
链路层:数据帧的长度(46+18)-(1500+18) 18为数据帧的头和尾
网络层:ip首部至少20字节 MTU=1500-20=1480
传输层:UDP首部为8字节,MSS=1480-8=1472/1480-20=1460

应用层—报文

为特定应用程序提供数据传输服务,HTTP/DNS

http协议及请求响应格式

概念:定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。HTTP协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据。
HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息


方法:GET/POST/HEAD/OPTIONS/PUT/PATCH/DELETE/TRACE /CONNECT


GET/POST区别
1、get/post是http请求的两种基本方法
2、get用于向服务器请求资源,把参数包含在url中不安全,传送参数长度有限制

?连接url和参数,&分割参数

https://www.baidu.com/home/msg/data/personalcontent
?num=8&indextype=manht&_req_seqid=3614114060&asyn=1&t=1599095416513

3、post用于向服务器传输数据,参数放在requestbody(请求体中)


请求格式
请求行 请求方法 请求资源 协议版本
请求头header

host:被请求资源的主机号
connection:标识长连接(http1.0和http1.1区别)【keep-alive/close】
cookie:携带的cookie,表示身份信息(session和cookie区别以及http无状态特点)
accept:浏览器可以接受的服务器返回类型
accept-encoding:是否支持压缩,支持的压缩方式
accept-language:浏览器可接受的语言
refer:标识该请求从哪个链接跳转而来
useragent:标识客户端操作系统及浏览器名称和版本
cache-control:
private–响应只能够作为私有的缓存,不能再用户间共享
public–响应会被缓存,并且在多用户间共享
must-revalidate–响应在特定条件下会被重用,以满足接下来的请求,但是它必须到服务器端去验证它是不是仍然是最新的。
no-cache–响应不会被缓存,而是实时向服务器端请求资源
max-age=10–设置缓存最大的有效时间,但是这个参数定义的是时间大小而不是确定的时间点。单位是[秒 seconds]
no-store–在任何条件下,响应都不会被缓存,并且不会被写入到客户端的磁盘里,这也是基于安全考虑的某些敏感的响应才会使用
range–断点续传

空行
请求体
在这里插入图片描述


响应格式
状态行 协议 状态码 状态描述
响应头

Cache-control:见请求头
content-type:告诉客户端资源文件类型/字符编码
content-encoding:告诉客户端服务器发送资源采用什么编码格式
Date:服务器发送资源时的服务器时间
Server:告诉客户端服务器的信息
Transfer-encoding:告诉客户端服务器发送资源是分块发送的。
Expires:告诉客户端在这个时间前可以访问缓存副本,没有cache-control准确
Last-Modified:所请求对象的最后修改时间
Connection:keep-alive Refresh:重定向
Access-Control-Allow-Origin :*表示所有网站可以跨域资源访问
Content-Range:byte 0-5/7877 :指定整个实体中的一部分的插入位置,他也指示了整个实体的长度.

空行
响应正文
在这里插入图片描述


状态码
状态码细节解释

1XX:表示请求已接收,需要继续处理,代表临时响应

100:客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。

2XX:表示请求已被成功接收、理解、接受

200:OK,请求已成功,请求所希望的响应头或数据体将随此响应返回
201:created,请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。假如需要的资源无法及时建立的话,应当返回 ‘202 Accepted’。
202:Accept,异步操作场合使用

3XX:重定向–要完成请求必须进行更进一步的操作,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。
当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A->A,或者A->B->C->A),因为这会导致服务器和客户端大量不必要的资源消耗。按照 HTTP/1.0 版规范的建议,浏览器不应自动访问超过5次的重定向。

301:永久重定向。新的永久性的URI 应当在响应的 Location 域中返回。除非这是一个 HEAD 请求,否则响应的实体中应当包含指向新的 URI 的超链接及简短说明。如果这不是一个 GET 或者 HEAD 请求,因此浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化
302:临时重定向,客户端继续向原有地址发送以后的请求。只有cache-control或expires中进行了指定的情况下,相应才可被缓存
304:如果客户端发送了一个带条件的 GET 请求且该请求已被允许,而文档的内容(自上次访问以来或者根据请求的条件)并没有改变,则服务器应当返回这个状态码。304响应禁止包含消息体,因此始终以消息头后的第一个空行结尾。
305:使用代理,被请求的资源必须通过指定的代理才能被访问。Location 域中将给出指定的代理所在的 URI 信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能建立305响应

4XX:客户端错误–请求有语法错误或请求无法实现

400:请求语义/参数有误
401:当前请求需要用户验证
403:服务器已经理解请求,但是拒绝执行它。
404:请求失败,请求所希望得到的资源未被在服务器上发现。
408:请求超时,客户端没有在服务器预备等待的时间内完成一个请求的发送

5XX:服务器端错误–服务器未能实现合法的请求

500:服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。一般来说,这个问题都会在服务器端的源代码出现错误时出现
505:服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。


http/https

http协议详解
http特点:
无状态:cookie/session/token
cookie/session/token
cookie/session
多次http请求:http1.0/http1.1/http2.0
http各版本区别
http各版本区别详细版

http1.0:无hosts域 ;不支持持久链接;
http1.1
① 支持长连接【默认】:一个TCP连接可以传送多个http请求和响应,有效减少TCP三次握手四次挥手开销开销
②支持管道,客户端并行,服务器串行。不用等待上一次请求结果返回就可以发出下一次请求
③断点续传(请求部分资源)
④使用多个TCP连接
http2.0
①多路复用,允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
②首部压缩/通信基本单位缩小为帧

基于TCP协议:TCP特点
https详细加密介绍
SSL详解

DNS

DNS详解
浏览器缓存–本地hosts–本地DNS服务器—本地dns通过根DNS服务器查找域名–根DNS去查找顶级DNS直至返回[回溯和递归两种情况]
扩展:输入url到页面显示的过程
详细解释


端口

端口:虚拟概念 16位二进制证书 0~65535 定位软件
公认端口:0~1023
注册端口:1024~49151 用户进程或应用程序
动态、私有端口:49152~65535
查看所有端口:netstat -ano
查看指定端口:netstat -ano|findstr “808”
查看指定进程:tasklist|findstr “606” / ps -ef

固定端口号:
21 ftp
80 http
443 https
1521 Oracle
3306 mysql
8080 tomcat

//域名|地址 端口
InetSocketAddress socketAddress=new InetSocketAddress("127.0.0.1",8080);
URI 统一资源标识符
URL 统一资源定位符,定位软件的具体资源

http://www.google.com:80/index.html(锚点和超链接)
  1. 协议 http
  2. 存放资源的主机域名 www.google.com
  3. 端口号 80
  4. 资源文件名 index.html

URN 统一资源名称

爬虫步骤: 1、获取URL 2、下载资源 3、分析资源(正则表达式:把有规律的数据提取出来) 4、数据抽取、清洗、存储

运输层

为进程提供通用数据传输服务
常用协议:
TCP–报文段,完整性服务
UDP—用户数据报,及时性服务
全面的面试知识


TCP和UDP区别

TCP
面向连接,可靠传输【三次握手四次挥手,流量控制,拥塞控制】;
面向字节流【处理数据时看成一连串无结构字节流】;
点到点传输;
首部开销大【20个字节】
优点:可靠,稳定
缺点:慢,效率低,占用系统资源高,易被攻击【DOS/DDOS/CC攻击】
应用场景:HTTP/HTTPS/FTP/POP/SMTP


UDP
无连接,不可靠传输;
基于数据报,
支持一对一/一对多/多对多;
首部开销少【8个字节】
数据收不够灵活,但是能够明确区分两个数据包,避免粘包问题
优点:快,比TCP稍安全,但不可避免攻击【Flood攻击】
缺点:不可靠,不稳定
应用场景:网络负担重,但对响应速度无要求。DNS/直播/SNMP:视频监控【NFS/TFTP/DHCP】


UDP

UDP报头在这里插入图片描述
UDP数据报最大长度64K(包含UDP头部),如果数据长度超过就要在应用层手动分包【分包待考究】

UDP编程(在线咨询功能:学生和咨询师在线一对一交流)

每个数据发送单元被统一封装成数据包(字节数组)的方式,发送方将数据包发送到网络中,数据包在网络中寻找他的目的地
一切以包裹为中心
DatagramSocket:用于发送或接受数据包的套接字
DatagramPacket:数据包


TCP

FTP/TELNET/HTTP/SMTP
TCP报文段
拥塞控制参考博客1
拥塞控制参考博客2

TCP报头

在这里插入图片描述

源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去;
32位序号/32位确认号: 不一定从0开始(作用:保证确认应答;保证数据按序到达;去重)
4位TCP报头长度: 最大64字节(一行32bit【4字节】,共4位最大16*4=64字节)
6位标志位:
1. URG: 紧急指针是否有效
2. ACK: 确认号是否有效
3. PSH: 提示接收端应用程序立刻从TCP缓冲区把数据读走
4. RST: 对方要求重新建立连接; 我们把携带RST标识的称为复位报文段
5. SYN: 请求建立连接; 我们把携带SYN标识的称为同步报文段
6. FIN: 通知对方, 本端要关闭了, 我们称携带FIN标识的为结束报文段
16位窗口大小: 接收缓冲区剩余的空间大小
16位校验和: 发送端填充, CRC校验. 接收端校验不通过, 则认为数据有问题. 此处的检验和不光包含TCP 首部, 也包含TCP数据部分.
16位紧急指针: 标识哪部分数据是紧急数据;

面向连接

在这里插入图片描述

注:
TCP规定SYN=1时不能携带数据,但要消耗一个序号
要理解为何要三次握手而不是两次握手

在这里插入图片描述
等待2MSL时间原因:
数据包到达时间无法估计,因此可能fin包先到,需要等待2MSL
为了防止服务器未接受到对FIN的ACK,所以若服务器未接受到会再次发FIN给客户端。客户端再确认即可

流量控制

让发送方的发送速率不要太快,根据接收端的接受情况动态调整,让接收方来得及接受—滑动窗口
滑动窗口
滑动窗口详解

目的:原来TCP在发送一段数据以后必须等待接收端确认后才发送下一段数据,效率低。但是若使用滑动窗口,可以在接受确认期间继续发送数据。
单位:字节
发送窗口swnd=min(接收端窗口rwnd,拥塞窗口cwnd)

拥塞控制

慢开始 拥塞控制 快重传 快恢复
在这里插入图片描述

TCP如何保证可靠传输

1、三次握手四次挥手
2、发送报文时启动定时器,若未及时接收到确认报文则重传
3、数据被分割成TCP认为最合适的报文
4、保持首部和数据校验和,若校验出错,则丢弃等待定时器超时后重发该数据报
5、失序重排
6、流量控制–滑动窗口协议
7、拥塞控制–慢开始、拥塞避免、快重传、快恢复

TCP建立连接后如何保持连接(检测连接断没断)

1、keepalive机制
当连接闲置一段时间(参数值可以设置,默认两小时),TCP协议会向对方发送一个keepalive探针包(包内没有数据),对方在收到包以后,若连接正常,回复ACK,若连接错误,回复RST,但是多次不回复(参数可设置)连接就会被断开
2、心跳包
每隔固定时间向服务器发送(为了保持长连接),若一定时间服务器没收到包或者客户端没接到确认包都被认为连接被断开了

网络层 (包 Packet)

为主机提供数据传输服务,把上层的数据封装成分组,为分组选择路由服务
网络层系列博客
协议:IP/ICMP/ICMP/IGMP/OSPF/ARP/RARP


IP报文(IPV4)
在这里插入图片描述

版本:IPV4/IPV6
首部长度:IP报文长度 固定20字节+可变最大40字节 总长度:IP报文的总长度。报头的长度和数据部分的长度之和。
标识:唯一的标识主机发送的每一分数据报。通常每发送一个报文,它的值加一。当IP报文长度超过传输网络的MTU(最大传输单元)时必须分片,这个标识字段的值被复制到所有数据分片的标识字段中,使得这些分片在达到最终目的地时可以依照标识字段的内容重新组成原先的数据。
标志:共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。
片位移:本分片在原先数据报文中相对首位的偏移位。(需要再乘以8)
生存时间:IP报文所允许通过的路由器的最大数量。每经过一个路由器,TTL减1,当为0时,路由器将该数据报丢弃。TTL字段是由发送端初始设置一个 8 bit字段.推荐的初始值由分配数字 RFC 指定,当前值为 64。发送 ICMP 回显应答时经常把 TTL设为最大值 255。
协议:指出IP报文携带的数据使用的是那种协议,以便目的主机的IP层能知道要将数据报上交到哪个进程(不同的协议有专门不同的进程处理)。和端口号类似,此处采用协议号,TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
首部校验和:计算IP头部的校验和,检查IP报头的完整性。 源IP地址:标识IP数据报的源端设备。 目的IP地址:标识IP数据报的目的地址。


IP地址
在这里插入图片描述
注:
主机位全为1,为广播地址
主机位全为0,为网络地址
私有地址:192.168开头/172.16–172.31
在这里插入图片描述

数据链路层(帧 Frame)

PPP/MAC/VLAN
有错误检测功能
ARP(地址解析协议):IP—>MAC
是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
RARP:MAC–>IP

物理层(bit)

物理层:IEEE802.3
以二进制数据形式在物理媒体上传输

计算机网络面试题
面试题整理
计算机网络面试题
http/https
http
https
SSL
http详解
牛客面试题
面试题

计网面试题


状态码—见上文
协议

OSI七层模型
物理层/数据链路层/网络层/运输层/会话层/表示层/应用层
TCP/IP体系结构
网络接口层/网际层/运输层/应用层
五层体系结构
物理层/数据链路层/网络层/运输层/应用层

应用层协议
HTTP方法–见上文
GET和POST区别–见上文
路由器工作原理
三次握手四次挥手–见上文
拥塞控制/流量控制–见上文
TCP/UDP特点及联系

TCP自动重传机制
TCP断开连接方式
TCP三次握手四次挥手原理

如何判断是否丢包
断点续传
Cookie/Session/Token
网页缓存技术
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值