首页 > 编程语言 >初始网络编程

初始网络编程

时间:2024-01-14 20:58:24浏览次数:44  
标签:协议 IP 编程 网络 TCP 主机 IP地址 数据包 初始

CS架构与BS架构

在互联网中,通信协议一般分为两种:CS架构以及BS架构

CS指的是Client Server 代表客户端和服务端
BS指的是Browser Server 代表浏览器和服务端

客户端send                       服务端recv
操作系统                          操作系统
计算机硬件   <=====物理介质=====>  计算机硬件

网络通信

网络 = 物理链接介质 + 互联网通信协议

网络存在的意义就是跨地域数据传输, 称之为通信
互联网的本质就是一系列的网络协议
互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。

体系结构

把计算机网络的各层及其协议的集合,称为网络的体系结构

互联网通信协议根据历史发展分别有下面几个协议

注:图片源于知乎 友情链接

image-20240112151439013image-20240112151459443

物理层

功能:负责传输比特流,将数据从物理介质上发送和接收。

两台计算机如果想要通信,就必须接入Internet(接入网络)

image-20240112152547800

数据链路层

功能:负责在直接相连的节点之间传输数据帧,进行错误检测和纠正,以及流量控制。

网络层

目的:划分广播域

功能:负责为数据包选择合适的路径,并进行路由和转发。

引入一套新的地址来区分不同的广播域/子网,这套地址即网络地址(IP地址)

网络层:遵循IP协议

IP协议

IP协议是一种用于在网络上寻址和路由数据包的协议,它定义了如何将数据包从源地址发送到目标地址。

主要作用
为每一台计算机分配IP地址
确定哪些地址在同一个网络

注意:单纯的IP地址段只是标识了IP地址的种类,从网络部分或主机部分都无法辨识一个IP所处的子网

例如:172.18.45.1与172.18.45.2 并不能确定二者处于同一子网

子网掩码

子网掩码是一个用于确定IP地址的网络部分和主机部分的分界线的32位二进制数字,它与IP地址进行逻辑与操作,用于确定一个IP地址所属的网络。

IP数据包

IP数据包是在网络上传输的数据单元,它包含了源地址和目标地址等信息,用于在互联网上路由和传递数据。

ARP协议

ARP协议(Address Resolution Protocol)用于将IP地址解析为对应的物理MAC地址,以便在局域网内部进行通信。

补充1:arp协议只在一个局域网内通过ip解析获取mac地址,不会跨局域网根据ip地址获取主机mac地址。
补充2:局域网内每个主机的ip地址各不相同,这才实现了arp协议根据ip地址解析成mac地址的可能。
补充3:ip地址本质是网络地址加主机地址。通过ip地址可以唯一确定一个机器,因为局域网内每个主机的mac地址不同就会分配不同的ip地址。

传输层

功能:建立端口到端口的通信

传输层遵循的协议有两个:TCP协议和UDP协议,基于端口工作

mac + ip 标识唯一一个主机
ip + port 标识唯一一台主机上的一个基于网络通信的软件

TCP头里面放的是源端口和目标端口,UDP头也一样。

# tcp协议
可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。
# 至此:数据包装结果
以太网头 --> ip头 --> tcp头 --> 数据   

# udp协议
不可靠传输,”报头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。
# 至此:数据包装结果
以太网头 --> ip头 --> udp头 --> 数据

TCP协议和UDP协议都是工作在传输层

image-20240112181318747

三次握手

image-20240112181434496

<1> 客户端作为主动方,首先向服务端发一个建立链接的请求。
<2> 服务端接收到请求后,回复同意。
<3> 然后服务端也要向客户端发一个请求建立链接。
<4> 客户端收到请求后,回复同意
<2>和<3>是两个连续从服务端发出的消息,可以合并从一个回复并请求。整个过程就是三次握手建立TCP连接

四次挥手

image-20240112181843875

第一次挥手:当客户端想要关闭连接时,发送一个带有FIN(结束)标志位的报文,表明自己已经没有数据要发送了。
第二次挥手:服务器收到客户端的关闭请求后,发送一个带有ACK标志位的应答报文,确认收到客户端的关闭请求。
第三次挥手:服务器关闭自己的数据传输,发送一个带有FIN标志位的报文,表明自己已经没有数据要发送了。
第四次挥手:客户端收到服务器的关闭请求后,发送一个带有ACK标志位的应答报文,确认收到服务器的关闭请求。

UDP协议

udp协议特点:

UDP是无连接的,即发数据之前不需要建立连接,同理发送数据结束也没有连接可释放,这极大减少了开销和发送数据之前的时延。

UDP不保证数据的可靠交付,只负责将数据尽可能快的发出去。

即可能会产生丢包,一般使用场景就是网络查询,视频通话等。

image-20240112182026164


应用层

应用层功能:提供特定的应用程序功能,例如电子邮件、文件传输、远程登录等。

我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程。

能够唯一标示网络中的进程后,它们就可以利用socket进行通信了,什么是socket呢?我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信。

img

socket起源于UNIX,在Unix一切皆文件哲学的思想下,socket是一种"打开—读/写—关闭"模式的实现,服务器和客户端各自维护一个"文件",在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。

总结

img

每层都有自己的协议

img


网络通信实现

要实现网络通信,每台主机需要具备以下四个要素:
1. 本机的IP地址:用于唯一标识主机在网络中的位置。
2. 子网掩码:确定IP地址中哪些位用于网络标识,哪些位用于主机标识。
3. 网关的IP地址:作为主机与其他网络通信的出口,用于转发数据包到目标网络。
4. DNS的IP地址:用于域名解析,将域名转换为对应的IP地址。

这些要素可以通过两种方式获取:
1. 静态获取(手动配置):手动配置每个要素的数值,包括设置本机的IP地址、子网掩码、网关的IP地址和DNS的IP地址。
2. 动态获取(通过DHCP协议):使用DHCP(动态主机配置协议)协议,主机可以自动获取IP地址、子网掩码、网关的IP地址和DNS的IP地址。DHCP协议使用UDP协议进行通信。

DNS协议

DNS是域名解析服务器。也可以是域名解析系统,是用来绑定ip和域名的关系,它基于udp协议。

不管是BS架构还是CS架构的互联网通信软件都是基于IP地址+端口工作的。
对于BS架构,从方便使用者的角度出发(不需要用户记住复杂无趣的ip,引入的域名的概念)。于是BS软件就需要DNS域名解析过程。
基于CS架构的软件不需要DNS。

img


网络通信流程

1. 本机获取网络配置信息,包括IP地址、子网掩码、网关和DNS服务器的IP地址。
2. 打开浏览器,输入要访问的网址(如www.google.com)。
3. 浏览器使用DNS协议将网址解析为IP地址。
4. 使用HTTP协议发送请求给目标服务器,请求中包含了请求的内容和相关参数。
5. 请求数据被分割为TCP数据包,并添加TCP标头信息。
6. TCP数据包被嵌入IP数据包,添加IP标头信息。
7. IP数据包被嵌入以太网数据包,添加以太网标头信息。
8. 以太网数据包通过网络传输到目标服务器。
9. 目标服务器接收数据包,并按照相反的顺序解析数据。
10. 目标服务器使用HTTP协议生成响应,将响应数据分割为TCP数据包,并添加标头信息。
11. 响应数据通过网络返回到本机。
12. 本机接收到响应数据,浏览器解析并显示网页内容。

img


总结

基于网络通信的软件有两种架构:BS架构和CS架构。它们在以下几个方面有所不同:

  1. 客户端软件:BS架构没有独立的客户端软件,而是依赖于浏览器作为特殊的客户端来访问应用程序。
  2. DNS域名解析:在BS架构中,客户端多了一个DNS域名解析过程,即在浏览器的网址输入栏中输入网址后,需要进行域名解析获取对应的IP地址。
  3. 网络通信流程:BS架构中的网络通信流程可以总结如下:
    • 本机的DNS域名解析系统启动,获取域名对应的IP地址,并将其交给浏览器。
    • TCP/IP封包过程:浏览器将输入栏中的虚拟路径和其他信息打包成TCP/IP数据包。
    • 数据包通过网络传输到对方主机,对方主机的应用层软件获取虚拟路径对应的资源,并原路返回响应给客户端。
    • 本地主机接收到响应信息,解包获取请求的资源。
    • 完成一次网络通信交流流程。

数据包装的过程如下:

  1. DNS协议启动工作,获取域名对应的IP地址。
  2. 应用层将数据打包成一个HTTPS协议的协议头,并交给传输层。
  3. 传输层基于TCP协议,将应用层的数据再打包成一个TCP头,其中包含浏览器端口和对方主机的端口,并将数据交给网络层。
  4. 网络层将数据打包成一个IP头,其中包含本机IP和对方主机的IP,并将包裹交给数据链路层。
  5. 数据链路层根据网络地址判断是外网IP,并在整个包裹上再打包一个以太网头,包含本机的MAC地址和当前局域网网关的MAC地址。
  6. 物理层将数据转换为二进制01数据,并通过网络传输到对方局域网的网关。经过交换机、路由系统等设备,根据IP地址找到目标主机,并根据端口号找到对应的软件,最终根据URL路径找到资源。
  7. 对方主机返回响应数据,按照原路返回资源。我方接收到响应资源后,完成了一次网络通信。

标签:协议,IP,编程,网络,TCP,主机,IP地址,数据包,初始
From: https://www.cnblogs.com/ccsvip/p/17964164

相关文章

  • 为什么C++ 单例局部static初始化是线程安全的?
    为什么C++单例局部static初始化是线程安全的?constbg::AppSettings&bg::AppSettings::GetInstance(){staticAppSettingsinstance;returninstance;}对于以上单例模式代码,在C++11(及更高版本)中,函数局部静态AppSettings的构造保证是线程安全的。编译器将在AppS......
  • Python与C++联合编程
    C++代码#编译指令#gcc-otest.so-shared-fPICtest.cg++-otest.so-shared-fPICtest.cc#forc++#include<iostream>usingnamespacestd;extern"C"{//forC++intfoo(inta,intb){cout<<"a:"<<a<<&qu......
  • 面向对象编程中级
    IDE编程常用快捷键删除当前行,默认是ctrl+Y自己配置ctrl+d复制当前行,自己配置ctrl+alt+向下光标补全代码alt+/添加注释和取消注释ctrl+/【第一次是添加注释,第二次是取消注释】导入该行需要的类先配置autoimport,然后使用alt+enter即可快速格式化代码ctrl+alt+L快速......
  • 面向对象编程基础
    类和对象的区别和联系类是抽象的,概念的,代表一类事物,比如人类,猫类..,即它是数据类型.对象是具体的,实际的,代表一个具体事物,即是实例.类是对象的模板,对象是类的一个个体,对应一个实例属性,成员变量,字段成员变量=属性=field(字段)(即成员变量是用来表示属性的,统一叫属......
  • 网络爬虫-梨视频下载
    一、分析要在地址https://www.pearvideo.com/video_1747820中下载视频,首先要找打视频的源地址,查看源代码未发现有源代码,在元素中找,视频播放的时候,在<video>标签中找下载链接 注意:视频不播放,是看不到视频源地址的,把视频下载地址单独复制下来如下src="https://video.pearvi......
  • 计算机网络——应用层(1)
    (计算机网络——应用层(1))小程一言我的计算机网络专栏,是自己在计算机网络学习过程中的学习笔记与心得,在参考相关教材,网络搜素的前提下,结合自己过去一段时间笔记整理,而推出的该专栏,整体架构是根据计算机网络自顶向下方法而整理的,包括各大高校教学都是以此顺序进行的。面向群体:在学......
  • JUC并发编程 CompletableFuture 获得结果和触发计算 常用方法(二)
    1获得结果和触发计算1.1获取结果publicTget()publicTget(longtimeout,TimeUnitunit)publicTjoin()--->和get一样的作用,只是不需要抛出异常publicTgetNow(TvaluelfAbsent)--->计算完成就返回正常值,否则返回备胎值(传入的参数),立即获取结果不阻塞1......
  • 网络爬虫-处理cookie登录的问题,seesion的用法
    一、以17k的小说网的登录为例,网址小说_17K小说网|最新小说下载-一起免费看小说当想要在小说网中看一下书架上的书都有哪些,必须得先登录一个账户才能看到,不同的用户登录看到内容也是不一样的,服务器是如何区分的呢?这里要引入cookie,不同的用户访问到服务器的时候,除了访问地......
  • JUC并发编程 CompletableFuture 业务代码实战
    1需求电商网站比价需求分析:1.1需求说明:a.同一款产品,同时搜索出同款产品在各大电商平台的售价b.同一款产品,同时搜索出本产品在同一个电商平台下,各个入驻卖家售价是多少1.2输出返回:a.出来结果希望是同款产品的在不同地方的价格清单列表,返回一个List例如:《Mysql》......
  • JUC并发编程 用CompletableFuture 创建异步任务
    1CompletableFuture对Future的改进1.1CompletableFuture为什么会出现get()方法在Future计算完成之前会一直处在阻塞状态下,阻塞的方式和异步编程的设计理念相违背。isDene()方法容易耗费cpu资源(cpu空转),对于真正的异步处理我们希望是可以通过传入回调函数,在Future结束时自动......