计算机网络个人小结

  1. 不同层的数据报的名称
    应用层: data
    TCP层: segment
    IP 层: packet
    MAC层: frame

  2. MTU vs MSS:
    MTU:一个网络包的最大长度,以太网中一般为 1500 字节。
    https://www.xiaolincoding.com/network/1_base/how_os_deal_network_package.html#linux-%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E6%A0%88
    在以太网中,规定了最大传输单元(MTU)是 1500 字节,也就是规定了单次传输的最大 IP 包大小。
    当网络包超过 MTU 的大小,就会在网络层分片,以确保分片后的 IP 包不会超过 MTU 大小,如果 MTU 越小,需要的分包就越多,那么网络吞吐能力就越差,相反的,如果 MTU 越大,需要的分包就越少,那么网络吞吐能力就越好。

MSS:除去 IP 和 TCP 头部之后,一个网络包所能容纳的 TCP 数据的最大长度。

  1. Linux 常用命令
    netstat -napt 查看TCP 的连接状态。
    route -n 命令查看当前系统的路由表。
    arp -a 命令查看 ARP 缓存的内容

  2. ARP and RARP
    ARP: IP->MAC 在局域网中广播IP地址,若某设备IP地址match,会回复其MAC地址。注意在ARP缓存中若已有该IP的MAC地址,则无需广播。
    RARP: MAC->IP

  3. gateway, router, switch和hub
    参考 https://www.xiaolincoding.com/network/1_base/what_happen_url.html

  • 网关gateway 一般是连接两个网络做转换用。

  • 路由器router - 工作在网络层
    路由器和交换机是有区别的。
    因为路由器是基于 IP 设计的,俗称三层网络设备,路由器的各个端口都具有 MAC 地址和 IP 地址;
    而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址。
    路由器基本原理
    路由器的端口具有 MAC 地址(只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。),因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。
    当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
    在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。

  • 交换机switch 工作在MAC层。交换机的设计是将网络包原样转发到目的地。
    注意:计算机的网卡本身具有 MAC 地址,并通过核对收到的包的接收方 MAC 地址判断是不是发给自己的,如果不是发给自己的则丢弃;相对地,交换机的端口不核对接收方 MAC 地址,而是直接接收所有的包并存放到缓冲区中。因此,和网卡不同,交换机的端口不具有 MAC 地址。
    交换机的 MAC 地址表主要包含两个信息:一个是设备的 MAC 地址,另一个是该设备连接在交换机的哪个端口上。
    当 MAC 地址表找不到指定的 MAC 地址会怎么样?这种情况下,交换机无法判断应该把包转发到哪个端口,只能将包转发到除了源端口之外的所有端口上,无论该设备连接在哪个端口上都能收到这个包。这样做不会产生什么问题,因为以太网的设计本来就是将包发送到整个网络的,然后只有相应的接收者才接收包,而其他设备则会忽略这个包。
    此外,如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。
    以下两个属于广播地址:
    MAC 地址中的 FF:FF:FF:FF:FF:FF
    IP 地址中的 255.255.255.255

  • 集线器hub 工作在物理层。感觉就像一堆金属线的连接而已。收到包后群发到所有端口。

  1. 键入网址到网页显示期间发生了什么?
    https://www.xiaolincoding.com/network/1_base/what_happen_url.html#%E8%AF%BB%E8%80%85%E9%97%AE%E7%AD%94
    ①浏览器解析url
    ②生成一个http请求协议包,把协议包的发送委托给操作系统
    ③操作系统在发送协议包之前先要获取服务器的IP地址。如果在本地的浏览器缓存、操作系统缓存或者hosts文件中存在对应的IP地址,就不需要再访问本地的DNS服务器了。如果不存在,访问本地的DNS服务器,由本地DNS服务器对进行递归访问,即按照层级向下访问,最后得到IP地址。
    ④得到ip地址后。进行TCP连接,三次握手。
    ⑤握手之后,把请求层层封装,通过网卡将数据发送到交换机。交换机会进行校验以及查找交换表转发,到达路由器。路由器把MAC层扒皮,查看目的ip,然后根据路由表选择下一跳,再进行MAC层封装。重复这个过程,最后到达服务器。
    ⑥到达服务器后,会对数据包进行扒皮并且校验。使用FCS校验码校验二进制序列的正确性。在MAC层看目的MAC是不是自己,在网络层看目的ip是不是自己,同时知道上层协议是TCP还是UDP协议。在TCP中知道这是一个什么保文,请求保文、响应报文还是结束连接的报文。通过端口号知道这是交给那么应用进程的。
    ⑦应用进程知道你访问的是什么资源,那么就给客户端返回一个Http响应协议包,把资源封装在其中。通过同样的流程把数据返回给客户端。
    ⑧浏览器拿到数据后,对数据进行渲染,解码,变成了一个页面显示在浏览器上。

  2. 浏览器输入URL后回车,页面没有出现怎么排查问题?
    https://www.xiaolincoding.com/network/1_base/what_happen_url.html#%E8%AF%BB%E8%80%85%E9%97%AE%E7%AD%94
    最直接的办法就是抓包,排查的思路大概有:
    先确定是服务端的问题,还是客户端的问题。先确认浏览器是否可以访问其他网站,如果不可以,说明客户端网络自身的问题,然后检查客户端网络配置(连接wifi正不正常,有没有插网线);如果可以正常其他网页,说明客户端网络是可以正常上网的。
    如果客户端网络没问题,就抓包确认 DNS 是否解析出了 IP 地址,如果没有解析出来,说明域名写错了,如果解析出了 IP 地址,抓包确认有没有和服务端建立三次握手,如果能成功建立三次握手,并且发出了 HTTP 请求,但是就是没有显示页面,可以查看服务端返回的响应码,如果是404错误码,检查输入的url是否正确,如果是500,说明服务器此时有问题,如果是200,F12看看前端代码有问题导致浏览器没有渲染出页面。
    如果客户端网络是正常的,但是访问速度很慢,导致很久才显示出来。这时候要看客户端的网口流量是否太大的了,导致tcp发生丢包之类的问题。
    总之就是一层一层有没有插网线,网络配置是否正确、DNS有没有解析出 IP地址、TCP有没有三次握手、HTTP返回的响应码是什么。

8.关于TCP 3次握手:
https://www.xiaolincoding.com/network/1_base/what_happen_url.html#%E8%AF%BB%E8%80%85%E9%97%AE%E7%AD%94
输入http地址->dns域名解析拿到目标ip地址->tcp初始化syn包,进入syn_sent状态->ip层拼接ip头->arp协议获取路由器的mac地址->拼接mac头->网卡将网络包(syn包)发给路由器。这个过程就是第一个syn包发出去的过程,经过各个路由器转发后,到达了接收方,接收方就开始扒开mac头、ip头,然后送到tcp层,tcp协议栈检查tcp头是一个syn包,于是就进入syn_recv状态,然后回复syn、ack报文给对方。
注意:客户端发送给服务端的第一个网络包是tcp三次握手中第一个syn报文,也是要经过ip层,数据链路层,交换机,路由器。

  1. 关于网卡收包和发包的过程
    下面这个连接不错
    https://www.junmajinlong.com/coding/tcp_socket/

  2. 关于5种IO模型
    https://www.junmajinlong.com/coding/IO_Model/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/237850.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos9(Stream)配置Let‘s Encrypt (免费https证书)

1. 安装snap,用来安装certbot: sudo dnf install epel-release sudo dnf upgrade sudo yum install snapd sudo systemctl enable --now snapd.socket sudo ln -s /var/lib/snapd/snap /snap snap install core snap refresh core 2. 安装 certbot命令…

Ubuntu搭建Nodejs服务器

转自:https://www.8kiz.cn/archives/3228.html 在Ubuntu上搭建Node.js服务器,按照以下步骤进行: 打开终端。 使用包管理器安装Node.js。可以使用以下命令安装Node.js: sudo apt update sudo apt install nodejs安装Node.js后&a…

基于Java SSM框架实现人事员工考勤签到请假管理系统项目【项目源码+论文说明】

基于java的SSM框架实现人事员工考勤签到请假管理系统演示 摘要 在高速发展的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,人们对人事管理系统越来越重视&#xff0…

css图片属性,图片自适应

CSS 图片属性指南:background-size 和 object-fit 在前端开发中,使用图片是非常常见的。为了让图片在网页中显示得更好,CSS 提供了多种属性来调整和控制图片的大小和布局。其中,background-size 和 object-fit 是两个常用的属性&a…

制作系统安装盘教程——烧录Windows原版镜像

前言 本次教程不经过WinPE工具进行安装Windows原版镜像,而是直接把系统镜像文件直接烧录进U盘,这样做的好处是不经过WinPE安装Win系统的过程,避免有些带木马病毒的WinPE在安装系统的过程把木马病毒带进系统,从而导致文件泄漏。 开…

【JavaWeb学习笔记】13 - JSP浏览器渲染技术

JSP 一、JSP引入 1.JSP现状 1.目前主流的技术是前后端分离(比如: Spring Boot Vue/React),我们会讲的.[看一下] 2. JSP技术使用在逐渐减少,但使用少和没有使用是两个意思,一些老项目和中小公司还在使用JSP,工作期间,你很有可能遇到JSP …

【设计模式-2.5】创建型——建造者模式

说明:本文介绍设计模式中,创建型设计模式中的最后一个,建造者模式; 入学报道 创建型模式,关注于对象的创建,建造者模式也不例外。假设现在有一个场景,高校开学,学生、教师、职工都…

Spring 5.x较上一版本的主要特性

Spring Framework 5.0 是在 2017 年发布的一个主要版本,它带来了许多改进和新特性,相比于 Spring Framework 4.x,主要的升级包括: 基于 Java 8 的基线: Spring 5 需要 Java 8 或更高版本,这使得框架得以利用…

LLaMA-Factory如何对Tokenization步骤提速

问题 数据量稍微大一些,在运行这个步骤“Running tokenizer on dataset”就要等半小时以上,然后才知道后续是否会报错。Tokenization步骤看上去并没有使用到GPU,只是在CPU上运行的。 是否有什么方法对这个步骤进行加速呢,比如多C…

c/c++实现隐藏密码

1. 我们在平常输入密码是,不能直接显示密码,应该显示*或者其它字符。 void inputPwd(char *pwd,int length) {char ch; // 用来存储getch()都进来的字符int i 0;while (1){ch getch(); /*这个函数可以实现输入不回显(输入不在终端显示)*/if (ch \r) /*密码输入结束输入回车…

Lua脚本在Redis中的高效应用

大家好,我是升仔 引言 Redis作为一个多功能的键值数据库,其性能非常出色,特别是在处理高速缓存和消息队列方面。而Lua脚本的引入,则进一步增强了Redis的能力。 1、Lua脚本与Redis的结合 Redis选择Lua作为脚本语言,主…

12.21

一、注意事项 1.CtrlShiftT用于从jar中查找类,这个eclipse键盘快捷键可以帮助快速找到类 2.更新upm和rest遇到重复解决方法 把upm文件里面多出来的三行代码删掉,右击upm文件,点击小组,点击标记为已解决,点击OK&#x…

ElasticSearch DSL Bool查询

Bool 查询的三个主要成分:must、should 和 must_not。 must: 这个条件是必须满足的。比如,你想找一本关于 Python 编程的书,那么你会在 must 里写上关键词 “Python”。 should: 这相当于你的偏好条件,…

OpenVAS 数据库管理

数据库概述为了更好地理解OpenVAS数据库管理,我们首先需要了解数据库的概念。数据库是一个组织和存储数据的软件系统,它允许用户在其中存储、访问和更新数据。在计算机系统中,数据库通常是用来存储大量数据的一个集合,这些数据可以…

Web前端-JavaScript(对象)

文章目录 1.对象1.1 概念1.2 创建对象三种方式**对象字面量创建对象**:new Object创建对象构造函数创建对象 1.3 遍历对象 2.作用域1.1 概述1.2 全局作用域1.3 局部作用域1.4 JS没有块级作用域1.5 变量的作用域1.6 作用域链1.7 预解析 1.对象 1.1 概念 什么是对象 …

Solon 开源框架,单月下载突破 250 万!!!

Solon 是什么开源项目? 一个,Java 生态型应用开发框架。它从零开始构建,有自己的标准规范与开放生态(历时六年,已有全球第二级别的生态规模)。与其他框架相比,它解决了两个重要的痛点&#xff…

jetbrains idea 报错 java.lang.ClassNotFoundException 之后自动搜索包导入包

-- 搜索类所在的包 导入包 搜索包 mac环境 pom中右键或者 cmdn

shell 的错误处理和调试方法

简介 在我们写代码过程中,一般有两个阶段:调试阶段和试运行阶段。在调试阶段我们希望尽可能的输出日志,方便在出错的时候快速定位问题。在试运行阶段希望将日志标准化,且有些错误的日志是在预期内不想展示的时候如何处理&#xff…

1. 线程概述、线程和进程、 并发和并行、多线程的优势 、程序运行原理 、主线程、 线程的 6 种状态

文章目录 1. 线程概述1.1 线程和进程1.2 并发和并行1.3 多线程的优势1.4 程序运行原理1.5 主线程 1.6 线程的 6 种状态 1. 线程概述 1.1 线程和进程 ​ 进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位…

高校/企业如何去做数据挖掘呢?

随着近年来人工智能及大数据、云计算进入爆发时期,依托三者进行的数据分析、数据挖掘服务已逐渐成为各行业进行产业升级的载体,缓慢渗透进我们的工作和生活,成为新时代升级版的智能“大案牍术”。 那么对于多数企业来说,如何做数据…