网络基础知识

发布于:2025-02-10 ⋅ 阅读:(51) ⋅ 点赞:(0)

1 互联网本质

​ 互联网(英语:Internet)是指20世纪末期兴起电脑网络与电脑网络之间所串连成的庞大网络系统。这些网络以一些标准的网络协议相连。它是由从地方到全球范围内几百万个私人、学术界、企业和政府的网络所构成,通過电子,无线和光纤网络技术等等一系列广泛的技术联系在一起。互联网承载范围广泛的信息资源和服务,例如相互关系的超文本文件,还有万维网(WWW)的应用,电子邮件,通话,以及文件共享服务。

1.1 局域网

  • 介绍

    又称内网,小范围内的私有网络,一个家庭内的网络、一个公司内的网络、一个校园内的网络都属于局域网

  • 特点

    1、传输介质:早期的局域网多使用同轴电缆,后来发展为更加普遍的双绞线和光纤。
    2、网络拓扑:常见的网络拓扑有星形、环形和总线形等。
    3、网络协议:局域网中常用的网络协议有以太网、无线局域网(Wi-Fi)等。
    4、传输速度:局域网的传输速度较快,从最初的10Mbps发展到如今的千兆甚至万兆以太网。
    5、安全管理:局域网通常具有较强的安全性,可以通过物理隔离、网络隔离及数据加密等多种方式确保数据安全。

  • 代表设备

    1、路由器

    2、交换机

    3、集线器

    4、网络桥接器

1.2 广域网

  • 介绍

    又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。广域网并不等同于互联网。

2 tcp/ip协议

TCP/IP(传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。

2.1 三次握手

在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接

  • 第一次握手:客户端尝试连接服务器,向服务器发送 syn 包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入 SYN_SEND 状态等待服务器确认
  • 第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个 SYN包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

在这里插入图片描述

2.2 四次挥手

建立TCP连接需要三次握手,终止TCP连接需要四次挥手

  • 第一次挥手 客户端发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态

  • 第二次挥手 服务器端接收到连接释放报文后,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT 关闭等待状态

  • 第三次挥手 客户端接收到服务器端的确认请求后,客户端就会进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文,服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。

  • 第四次挥手 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态,但此时TCP连接还未终止,必须要经过2MSL后(最长报文寿命),当客户端撤销相应的TCB后,客户端才会进入CLOSED关闭状态,服务器端接收到确认报文后,会立即进入CLOSED关闭状态,到这里TCP连接就断开了,四次挥手完成

在这里插入图片描述

2.3 ip地址

  • 简介

    IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。
    IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

  • 用途

    在单个局域网网段中,计算机与计算机之间可以使用网络访问层提供的 MAC 地址进行通信。如果在路由式网络中,计算机之间进行通信就不能利用 MAC 地址实现数据传输了:因为 MAC 地址不能跨路由接口运行;即使强行实现跨越,使用 MAC 地址传输数据也是非常麻烦的。

    这是由于内置在网卡里的固定 MAC 地址不能在地址空间上引入逻辑结构,使其无法具备真正的地址来表示国家、省、市、区、街道、路、号这类层次。因此,要进行数据传输,必须使用一种逻辑化、层次化的寻址方案对网络进行组织,这就是 IP 地址。

  • 表示

    IP地址是长度是32 bit,由4个字节组成。为了阅读和书写方便,IP地址通常采用点分十进制数来表示。

    ip地址范围是00000000.00000000.00000000.0000000011111111.11111111.11111111.11111111,即0.0.0.0255.255.255.255。

3 端口与端口号

在我们的日常开发过程中, 特别是后端的开发人员, 即便他没有真正理解端口的细节, 他还是会听过见过各类的端口, 这个东西几乎无处不在, 比如:

  • mysql 缺省用的 3306 端口,
  • redis 的 6379 端口,
  • https默认用的 443端口,
  • http默认用的80端口,
  • ssh 用的 22 端口,
  • 等等…

3.1 端口及特点

  • 端口

    端口的作用就是给运行的应用程序提供传输数据的通道。

    在这里插入图片描述

  • 端口号

    操作系统为了统一管理这么多端口,就对端口进行了编号,这就是端口号,端口号其实就是一个数字,好比我们现实生活中的门牌号。

  • 应用程序进行数据通信的流程

    • 首先通过IP地址找到对应的设备
    • 然后通过端口号找到对应的端口
    • 然后通过端口把数据传输给应用程序

3.2 端口号范围

  • Well-Known Ports(即公认端口号)

    它是一些众人皆知著名的端口号,这些端口号固定分配给一些服务,我们上面提到的 HTTP 服务、 FTP服务等都属于这一类。知名端口号的范围是:0-1023

  • Registered Ports(即注册端口)

    它是不可以动态调整的端口段,这些端口没有明确定义服务哪些特定的对象。不同的程序可以根据自己的需要自己定义,注册端口号的范围是:1024-49151

  • Dynamic, private or ephemeral ports(即动态、私有或临时端口号)

    顾名思义,这些端口号是不可以注册的,这一段的端口被用作一些私人的或者定制化的服务,当然也可以用来做动态端口服务,这一段的范围是:49152–65535

4 tcp与udp

4.1 udp介绍

udp是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或和目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

  • 特点

    1. 无需建立链接,数据到达后也无需确认
    2. 不可靠交付
  • 适用场景

    • 通常用于可靠性较高的网络环境(局域网)或不要求可靠传输的场合
    • 也常用于客户机/服务器模式中。
  • 举例

    • 网络游戏
    • 直播
    • 音视频传输

4.2 tcp介绍

tcp是一种面向连接的、可靠的、基于字节流的通讯协议。

  • 特点

    1. 面向连接,提供了可靠的建立连接和拆除连接的方法
    2. 可靠交付
  • 适用场景

    • TCP常用于不可靠的互联网中为应用程序提供面向连接的,可靠的,端到端字节流服务。
  • 举例

    • 远程控制
    • 邮件
    • 点对点文件传输

5 socket介绍

  • Socket(简称套接字)是进程间通信的一种方式。
  • 它能实现不同主机间的进程通信,我们网络上各种各样的服务大多是基于Socket来完成通信的。
  • 例如我们每天浏览网页、QQ聊天、收发email等等。

5.1 创建socket

python中使用socket模块的函数socket就可以完成。

该函数带有两个参数:

  1. adderss family:可以选择AF_INET(用于internet进程间通信)或者AF_UNIX(用于同一台机器进程间通信)
  2. Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DGRAM(数据报套接字,主要用于UDP协议)
  • 创建一个udp socket(udp套接字)
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  • 创建一个tcp socket(tcp套接字)
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

网站公告

今日签到

点亮在社区的每一天
去签到