计算机网络协议汇总-前人都说烂了

本文详细介绍了计算机网络的各个层次协议,包括应用层的HTTP、FTP、DNS等,传输层的TCP与UDP,网络层的IP协议,以及数据链路层的ARP协议。通过深入讲解各个协议的工作原理和关键概念,如HTTP的请求和响应报文、DNS的域名解析流程、TCP的三次握手和四次挥手,帮助读者理解网络通信的基础知识。同时,提到了一些攻击方式,如DDoS和ARP欺骗,以及防御措施。
摘要由CSDN通过智能技术生成

前言

这都烂大街的问题了,之前做项目的时候有做过有关tcp和udp的东西,但是都是直接用的人家封装好的协议栈(lwip),现在有时间了,我得回过头来认认真真学一遍。冲冲冲

应用层

应用层做了哪些事情呢?我们知道,网络通信的简单描述就是,进程将要传输的数据放到socket套接字中,然后接收方解析套接字中的数据。应用层所作的,就是规定什么时候用socket传输、如何解析socket、socket里承载的报文的类型啊、格式啊、各个字段的语义啊类似这种。

http

Web是一个应用,而Http是Web使用的一种应用层传输协议,可以理解吧?一个完整的HTTP协议包含两个部分,即客户端部分和服务端部分,而咱们用的web就是实现了HTTP客户端,咱们访问的就是实现了HTTP客户端的web服务器。(应该没那么绕对吧)下面是web与HTTP以及客户端服务端的关系图:在这里插入图片描述
HTTP是web的核心协议,那么HTTP底层的传输层用的是什么协议呢?答案是面向可靠传输的TCP!!!
什么是持续连接?什么是非持续连接?也很简单,当你想通过HTTP请求多个数据时,一种方式是每次请求都申请建立连接,然后传输,然后断开连接;另一种则只建立一次连接,当数据全部请求完成后再断开连接。
http报文格式是啥呢?

http请求报文

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成
在这里插入图片描述
其中咱们重点介绍一下请求方法的类型(我就讲三类)
GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端。使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。例如,/index.jsp?id=100&op=bind 而且我们很明显可以看到,这样的GET传参是很没有隐私安全保障的,对吧。
为什么GET的url参数数量有限制呢?是http的一个规定么?其实和协议没关系,纯粹是浏览器或者是web服务器的锅。其中的一个原因是,为了性能和安全(防止恶意构造长 URL 来攻击)考虑,会给 URL 长度加限制。
HEAD就像GET,只不过服务端接受到HEAD请求后只返回响应头,而不会发送响应内容。当我们只需要查看某个页面的状态的时候,使用HEAD是非常高效的,因为在传输的过程中省去了页面内容。
POST本意是向指定的资源提交要被处理的数据,但是在使用上其实和GET的很多功能都是重复的。当然了,POST不像GET,它没有参数的限制,因为POST的参数是放在body里的。另外,POST在http协议里并没有规定将header和body分开发送,从而产生两个TCP数据包。这种事情是部分浏览器干的。
所以咱们总结一下,POST和GET在本质上是没什么区别的,不过在传参细节上有区别,一个是不安全且有限制的,另一个是安全且没限制的。(其实吧,这俩从传输的角度讲,都是不安全的,因为 HTTP 在网络上是明文传输的,只要在网络节点上捉包,就能完整地获取数据报文。要想安全传输,就只有加密,也就是 HTTPS。)

http响应报文

再说说http的回答报文。其实格式也很简单,与请求的格式很相似:
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行、响应正文。其中状态行里有一个Status-Code表示服务器发回的响应状态代码,它是个三位数,其中最高位1~5表示响应类型,咱们简单看看:
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求
咱们的404 not found现在能理解了吧?再补充一个常见的:200 OK:客户端请求成功。

http cookie

看到cookie是不是觉得很熟悉?这个词你肯定不陌生,不过没想到这东西是http协议的一部分吧?嘿嘿嘿,咱们开始讲讲。
首先http请求是无状态的。啥意思呢?就是说,你哪怕连续发出两次http请求,对不起,第二次的时候服务器该不认识你就依旧还不认识你。cookie是做啥的呢?它就是存在于用户本地浏览器中的一小段文本,里面标记了用户的身份。每次咱们发起http请求的时候,连带着会把这段cookie也发送给服务器,这样一来不就每次访问就很方便了嘛!
那么cookie是如何从无到有产生的呢?其实也很简单,首先用户发起http请求,服务端收到以后,会生成这样的cookie记录,同时放在响应信息中发给客户端。等下次客户端再次发起http请求时,这个cookie就会附带进请求信息中。
如何看待cookie呢?这东西确实简化了很多http请求操作,但是它也将用户的关键信息暴露给web了,这就可能造成隐私泄露!!!

web缓存机制

Web缓存是指一个Web资源(如html页面,图片,js,数据等)存在于Web服务器和客户端(浏览器)之间的副本。缓存会根据进来的请求保存输出内容的副本;当下一个请求来到的时候,如果是相同的URL,缓存会根据缓存机制决定是直接使用副本响应访问请求,还是向源服务器再次发送请求。比较常见的就是浏览器会缓存访问过网站的网页,当再次访问这个URL地址的时候,如果网页没有更新,就不会再次下载网页,而是直接使用本地缓存的网页。只有当网站明确标识资源已经更新,浏览器才会再次下载网页。

ftp

ftp也是应用层协议之一,它就简单多了。首先它也是基于TCP这种可靠连接,只不过某个ftp客户端想和ftp服务端搞点事情的话,首先要通过21端口申请建立tcp连接,当连接通过以后呢,这个端口就成为了客户端向服务端传输控制指令的通道了,而数据传输通道是另外建立的,由ftp服务端申请向ftp客户端建立数据通道,实质上就是发送文件。具体的结构如下图所示:
在这里插入图片描述
所以咱们总结一下:ftp的连接与http一致在于,都是基于TCP,但是不同之处在于,ftp是双tcp通道(或者叫双端口),且还有一点不同在于,ftp建立连接是有状态的!也就是说,当ftp客户端想请求两次文件,它不需要每次都重新建立与服务端的连接,那个端口20的tcp连接是一直有效的!!!

DNS

域名四层结构

这东西我也常听到过,这次咱们深究一下。(引用自阮一峰的博客,侵删)
DNS是基于UDP哦!!!!!!
DNS (Domain Name System 的缩写)的作用非常简单,就是根据域名查出IP地址。你可以把它想象成一本巨大的电话本。举例来说,如果你要访问域名math.stackexchange.com,首先要通过DNS查出它的IP地址是151.101.129.69
OK在开始前先介绍一下查询dns的工具or指令:Linux下使用dig指令,Windows下使用nslookup指令,简单用的话直接机上待解析的域名即可。OK咱们用nslookup简单看看:
在这里插入图片描述
可以看到dns服务器是idc11.seu.e

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值