网络一些基础知识

article/2025/9/18 8:48:31

参考:

1. 一文搞懂TCP与UDP的区别

2. Android中的http和https通信

3. HTTP Headers状态码(status)主要字段属性详解

4. HTTP1.0、HTTP1.1、HTTP2.0、HTTPS的区别

5、HTTP1.0、HTTP2.0、HTTP 3.0及HTTPS简要介绍

6、TCP的三次握手与四次挥手理解及面试题(很全面)

目录

  • 一、TCP/IP网络模型
  • 二、TCP
    • 1.TCP连接过程
    • 2. TCP断开链接
    • 3. TCP协议的特点
  • 三、UDP
    • 1.UDP协议的特点:
  • 四、TCP和UDP的比较
    • 1、对比
    • 2. 总结
  • 五、一次完整http请求过程
  • 六、DNS 劫持和 HTTP 劫持
    • 1. DNS劫持
    • 2. HTTP 劫持
  • 七、Get请求与Post请求的区别

一、TCP/IP网络模型

  计算机与网络设备要相互通信,双方就必须基于相同的方法。比如,如何探测到通信目标、由哪一边先发起通信、使用哪种语言进行通信、怎样结束通信等规则都需要事先确定。不同的硬件、操作系统之间的通信,所有的这一切都需要一种规则。而我们就把这种规则称为协议(protocol)。

  TCP/IP 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。

  TCP/IP模型是互联网的基础,它是一系列网络协议的总称。这些协议可以划分为四层,分别为链路层、网络层、传输层和应用层。

  • 应用层:负责向用户提供应用程序,比如HTTP、FTP、Telnet、DNS、SMTP等。

  • 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文。

  • 网络层:负责路由以及把分组报文发送给目标网络或主机。

  • 链路层:负责封装和解封装IP报文,发送和接受ARP/RARP报文等。
    在这里插入图片描述
      在网络体系结构中网络通信的建立必须是在通信双方的对等层进行,不能交错。 在整个数据传输过程中,数据在发送端时经过各层时都要附加上相应层的协议头和协议尾(仅数据链路层需要封装协议尾)部分,也就是要对数据进行协议封装,以标识对应层所用的通信协议。

二、TCP

  当一台计算机想要与另一台计算机通讯时,两台计算机之间的通信需要畅通且可靠,这样才能保证正确收发数据。例如,当你想查看网页或查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容。当你下载文件时,希望获得的是完整的文件,而不仅仅是文件的一部分,因为如果数据丢失或乱序,都不是你希望得到的结果,于是就用到了TCP。
  TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。

1.TCP连接过程

如下图所示,可以看到建立一个TCP连接的过程为(三次握手的过程):
在这里插入图片描述
第一次握手

客户端向服务端发送连接请求报文段。该报文段中包含自身的数据通讯初始序号。请求发送后,客户端便进入 SYN-SENT 状态。

第二次握手

服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入 SYN-RECEIVED 状态。

第三次握手

当客户端收到连接同意的应答后,还要向服务端发送一个确认报文。客户端发完这个报文段后便进入 ESTABLISHED 状态,服务端收到这个应答后也进入 ESTABLISHED 状态,此时连接建立成功。

这里可能大家会有个疑惑:为什么 TCP 建立连接需要三次握手,而不是两次?这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。

2. TCP断开链接

在这里插入图片描述

TCP 是全双工的,在断开连接时两端都需要发送 FIN 和 ACK。

第一次握手

若客户端 A 认为数据发送完成,则它需要向服务端 B 发送连接释放请求。

第二次握手

B 收到连接释放请求后,会告诉应用层要释放 TCP 链接。然后会发送 ACK 包,并进入 CLOSE_WAIT 状态,此时表明 A 到 B 的连接已经释放,不再接收 A 发的数据了。但是因为 TCP 连接是双向的,所以 B 仍旧可以发送数据给 A。

第三次握手

B 如果此时还有没发完的数据会继续发送,完毕后会向 A 发送连接释放请求,然后 B 便进入 LAST-ACK 状态。

第四次握手

A 收到释放请求后,向 B 发送确认应答,此时 A 进入 TIME-WAIT 状态。该状态会持续 2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃) 时间,若该时间段内没有 B 的重发请求的话,就进入 CLOSED 状态。当 B 收到确认应答后,也便进入 CLOSED 状态。

回答:A进入TIME-WAIT 状态,为什么要等待2MSL时间呢? Msl(报文最大生存时间)
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在Client发送出最后的ACK回复,但该ACK可能丢失。Server如果没有收到ACK,将不断重复发送FIN片段。所以Client不能立即关闭,它必须确认Server接收到了该ACK。Client会在发送出ACK之后进入到TIME_WAIT状态。Client会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么Client会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

3. TCP协议的特点

(1)面向连接
  面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。

(2)仅支持单播传输
  每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。

(3)面向字节流
  TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。

(4)可靠传输
  对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

(5)提供拥塞控制
  当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞

(6)TCP提供全双工通信
  TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS(最大报文段长度, MaxSegment Size))

三、UDP

  UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据包分、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。

1.UDP协议的特点:

(1)面向无连接
  首先 UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且也只是数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。
具体来说就是:

  • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据增加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
  • 在接收端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作

(2)有单播,多播,广播的功能
  UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。

(3)UDP是面向报文的
  发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文

(4)不可靠性
  首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。
  并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。
  再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。

(5)头部开销小,传输数据报文时是很高效的
在这里插入图片描述
UDP 头部包含了以下几个数据:

  • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
  • 整个数据报文的长度
  • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的

四、TCP和UDP的比较

1、对比

在这里插入图片描述

2. 总结

  • TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
  • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为
  • 对数据准确性要求高,速度可以相对较慢的,可以选用TCP

五、一次完整http请求过程

  1. 首先进行DNS域名解析(本地浏览器缓存、操作系统缓存或者DNS服务器)
    a) 首先会搜索浏览器自身的DNS缓存(缓存时间比较短,大概只有1分钟,且只能容纳1000条缓存)
    b) 如果浏览器自身的缓存里面没有找到,那么浏览器会搜索系统自身的 DNS 缓存
    c) 如果还没找到,那么尝试从hosts文件里面去找
    d) 在前面三个过程都没有获取到的情况下,就去域名服务器去查找

  2. 三次握手建立 TCP 连接
    在 HTTP 工作开始之前,客户端首先要通过网络与服务器建立连接,HTTP 连接且通过 TCP 来完成的。HTTP 是比 TCP 更高层次的应用层协议,根据规则,只有低层协议建立之后,才能进行高层协议的连接,因此,首先要建立 TCP 连接,一般 TCP 连接的端口号是80;

  3. 客户端发起 HTTP 请求

  4. 服务器响应 HTTP 请求

  5. 客服端解析 html 代码,并请求 html 代码中的资源
    浏览器拿到 html 文件后,就开始解析其中的 html 代码, 遇到 js/css/image 等静态资源时,就向服务器端去请求下载

  6. 客户端渲染展示内容

  7. 关闭 TCP 连接
    一般情况下,一旦服务器向客户端返回了请求数据,它就要关闭 TCP 连接,然后如果客户端或者服务器在其头信息加入了这行代码 Connection:keep-alive,TCP 连接在发送后将仍然保持打开状态,于是,客户端可以继续通过相同的连接发送请求,也就是说前面的 3 到 6,可以反复进行。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

六、DNS 劫持和 HTTP 劫持

1. DNS劫持

  DNS 是 Domain Name System 的缩写,即域名系统,它作为可以将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。简单地说,如果我们想访问 DNS.COM 的官网,本来需要输入网站主机的 IP 地址,但是 DNS 可以将 www.dns.com 解析成对应的 IP 地址,我们就不需要记住复杂的 IP 地址了。
  DNS劫持就是通过劫持了 DNS 服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果,导致对该域名的访问由原 IP 地址转入到修改后的指定 IP,其结果就是对特定的网站不能访问或访问的是假网址,从而实现窃取资料或者破坏原有正常服务的目的。DNS 劫持通过篡改 DNS 服务器上的数据返回给用户一个错误的查询结果来实现的。
  一般来说 DNS 劫持有这三种情况:

  1. 错误域名解析到纠错导航页面,导航页面存在广告。判断方法:访问的域名是错误的,而且跳转的导航页面也是官方的,如电信的114,联通移网域名纠错导航页面。
  2. 错误域名解析到非正常页面,对错误的域名解析到导航页的基础上,有一定几率解析到一些恶意站点,这些恶意站点通过判断你访问的目标 HOST、URI、referrer 等来确定是否跳转广告页面,这种情况就有可能导致跳转广告页面(域名输错)或者访问页面被加广告(页面加载时有些元素的域名错误而触发)这种劫持会对用户访问的目标 HOST、URI、referrer 等会进行判定来确定是否解析恶意站点地址,不易被发现。
  3. 直接将特定站点解析到恶意或者广告页面,这种情况比较恶劣,而且出现这种情况未必就是运营商所为,家里路由器被黑,或者系统被入侵,甚至运营商的某些节点被第三方恶意控制都有可能。
      DNS 劫持常见于使用自动的 DNS 地址,所以,不管有没有被劫持,尽量不要使用运营商默认的 DNS。

2. HTTP 劫持

  在运营商的路由器节点上,设置协议检测,一旦发现是 HTTP 请求,而且是 html 类型请求,则拦截处理。后续做法往往分为2种,1种是类似 DNS 劫持返回 302 让用户浏览器跳转到另外的地址,还有1种是在服务器返回的 HTML 数据中插入 js 或 dom 节点(广告)。比如访问 GitHub,出现了“我是渣渣辉,是兄弟就来砍我”之类的小弹窗。
  有两种 HTTP 劫持防劫持思路

  1. 采用 https 协议加密请求。但是 https 多了 ssl 握手的过程,会耗费一定的时间和性能。
  2. 隐藏 http 请求的特征,例如使用对称加密算法加密整个 url。市面上的各大手机应用商店都采用了这种做法。相较于 https, url 加密的兼容性更好,并且对 CDN 节点带来的界面额外负担可以忽略,但是 url 加密需要 CDN 节点的密切配合。

七、Get请求与Post请求的区别

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。

  2. GET产生的URL地址可以被Bookmark,而POST不可以。

  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。

  4. GET请求只能进行url编码,而POST支持多种编码方式。

    POST支持的编码方式:
    1.application/x-www-form-urlencoded
    2.multipart/form-data
    3.application/json
    4.text/xml

  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

  6. GET请求在URL中传送的参数是有长度限制的,而POST没有。

  7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  9. GET参数通过URL传递,POST放在Request body中。


http://chatgpt.dhexx.cn/article/Af1NJKSF.shtml

相关文章

计算机网络基础知识总结,就这一篇了

如果说计算机把我们从工业时代带到了信息时代,那么计算机网络就可以说把我们带到了网络时代。随着使用计算机人数的不断增加,计算机也经历了一系列的快速发展,从大型通用计算机 -> 超级计算机 -> 小型机 -> 个人电脑 -> 工作站 -…

100 个网络基础知识

关注星标,每天学习C语言新技能 因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享 来源:网络 1)什么是链接? 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2)OSI 参考模型…

网络基础知识总结

基础知识: 什么叫网络? 网络是信息传输、接受、共享的虚拟平台,通过它把各个点、面、体的信息联系到一起,从而实现这些资源的共享。 什么是IP地址? 概念: IP协议提供的一种统一的地址格式,它…

计算机网络技术的就业规划,计算机网络技术职业生涯规划书前言

010在线为您甄选多篇描写计算机网络技术职业生涯规划书前言,计算机网络技术职业生涯规划书前言精选,计算机网络技术职业生涯规划书前言大全,有议论,叙事 ,想象等形式。文章字数有400字、600字、800字....缓存时间: 2021-06-15 在今…

计算机应用职业的外部环境,完整的职业生涯规划书范文

完整的职业生涯规划书范文 我们大学生应尽早进行职业生涯规划,最好从我们步入大学校园就开始。以下为大家分享的是完整的职业生涯规划书范文,希望对大家有所帮助。 前言 时光飞逝,不知不觉我已走到20岁的年轮边界。作为一名电子信息工程专业的…

web技术基础---网站设计说明书

《Web技术基础》 第1章 网站的规划 1.1.1 网站的定位 品味咖啡店网站整体上给人一种舒适、温馨的氛围,网页整体上呈现咖啡色、白色这种色调能带给人轻松、温暖的感觉,符合咖啡店主题。 1.1.2 网站板块的设置 网站的板块从整体上分为主页和副页。主要分…

职业生涯规划书-前端

写在前面 文章中部分图片来源于网络,小部分文段摘自网络。一篇关于我的小小理想,希望10年后的自己看到这篇文章,能感到自豪! 职业生涯规划书 引言 初秋的九月,怀揣着梦想,充满着希冀,来到了****…

如何在 Windows 下创建 macOS 引导介质 (USB 启动盘)

请访问原文链接:https://sysin.org/blog/macos-createinstallmedia,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 完整版请参看:如何创建可引导的 macOS 安装介质 补充章节: 在 Windows 下…

在 Windows 中制作 Ubuntu 系统的USB启动盘

转自:爱博客大伯 【笔记】在 Windows 中制作 Ubuntu 系统的USB启动盘 本文只针对 destop 版本。Ubuntu官网中有详细的教程,本文只是做个笔记,以备以后翻看。 有了 Ubuntu 系统的USB启动盘,就可以通过USB启动安装 Ubuntu 系统了。…

如何制作启动U盘安装系统?

用户问题:新手自己用U盘怎么装系统 很多用户对电脑莫名有种小心翼翼的感觉,总担心整崩溃。其实电脑就跟手机差不多,常见的操作不会影响电脑正常运行,而重要的操作几乎都有操作提示或说明,对于用户使用来说它其实没有那…

(一)制作U盘启动盘

1.下载并安装UltraISO软件(https://cn.ultraiso.net/) 2.下载Windows server 2008 r2镜像(https://msdn.itellyou.cn/) 3.U盘格式化成FAT文件系统,打开UltraISO软件 (1)用UltraISO软件打开Windows server 2008 r2镜像 (2)点击菜单 "启动"-写入硬盘映像…

Rufus 制作 USB 启动盘简单教程

制作 Windows 10 启动盘 U盘 / USB 安装盘图文教程 http://rufus.akeo.ie/downloads/rufus-2.2p.exe 1、将U盘连接到电脑,以管理员身份运行 Rufus,确认软件的“设备”一项中选中的是U盘的盘符 (图1处) 2、点击图2处的「光驱图标按钮」来选择你下载好的 …

如何制作Win7 usb启动盘

原文出处:http://www.yixiugege.com/post/308.html 如何制作Win7 usb启动盘?(网友提问) 答:制作Win7 usb启动盘,其实很简单,很多第三方软件都能做到,但最简单、最直接的就是微软自家推出的自动转…

如何快速制作启动u盘

u盘不仅可以作为可移动硬盘,还可以制作成u盘启动盘用于重装系统等。不过在重装系统之前,需要先将u盘制作成u盘启动盘。那么如何快速制作启动u盘呢?我们可以借助U盘启动盘制作工具完成,下面小编就教下大家U盘启动盘制作工具使用方法…

如何在Windows系统上制作U盘启动盘?

使用U盘重装Windows电脑系统,对于熟悉电脑的人来说十分常见,但是不少电脑小白并不会制作U盘启动盘。U盘启动盘是包含操作系统的外部硬盘驱动器,可用于启动计算机或笔记本电脑。下面我们就来了解一下如何制作U盘启动盘。 注意: U …

U盘装系统中bios怎么设置USB启动(图文教程)

整个U盘启动里最关键的一步就是设置U盘启动了,本教程内只是以特定型号的电脑为例进行演示,鉴于各种电脑不同BIOS设置U盘启动各有差异,所以如果下面的演示不能适用于你的电脑,建议去百度或者谷歌搜索一下你的电脑或者与你的电脑类似…

制作U盘启动盘 优启通

新手用户重装系统,当然需要一款简单易用的PE工具,U盘启动盘是装机必备的工具。 通过U盘启动盘,可以解决电脑使用的绝大部分故障。 比如:通过U盘启动盘, 1、可以重装系统。 2、可以破解windows开机密码。 3、可以修…

Rufus v4.0.2035 开源USB引导启动盘制作工具单文件版

Rufus 是一个可以帮助格式化和创建可引导USB闪存盘的工具,比如 USB 随身碟,记忆棒等等。在如下场景中会非常有用:你需要把一些可引导的ISO格式的镜像(Windows,Linux,UEFI等)创建成USB安装盘的时…

[USB 启动盘_1]-支持 BIOS/UEFI 启动的个人常用必备 PE 系统启动盘制作工具 —— 电脑店装机维护工具套装以及全网最详细的 U 盘启动方式详解

################################################## 目录 获取及使用 U 盘电脑店 PE 系统 为什么需要 PE 系统启动盘 两个官网链接? 解压使用电脑店离线版 如何使用该工具创建电脑店启动盘 关于 USB 启动模式 USB-HDD/USB-HDD/USB-ZIP/USB-ZIP/USB-FDD/USB…

制作USB多系统启动盘

制作USB多系统启动盘 【背景】 现在的操作系统更新越来越频繁了,如果用刻录光盘来安装系统的话,会导致大量的浪费,而且光盘寿命太短,一旦划伤,基本上就用不了了。所以想办法使用USB来做为启动盘,利用ISO直…