网络协议是如何实现的 详细介绍:网络协议基本原理

小伙伴们大家好,今天郑昊将为大家详细介绍一下网络协议是如何实现的,网络协议基本原理的相关信息,以及网络,协议,地址,内核,端口相关的最新资讯和干货分享,无论你是初学者还是老手,都应该认真阅读这篇文章,因为里面包含了很多有用的信息。

网络协议是如何实现的,网络协议基本原理

说起网络协议,我们必须要先了解一下两中网络协议模型,一种是OSI的标准七层模式,一种是业界标准的TCP/IP模型。它们之间的对应关系如下图:

网络协议是如何实现的,网络协议基本原理

在客户端浏览器,我们将请求封装为HTTP协议,通过socket发送到内核。内核的网络协议栈里面,在TCP层创建用于维护连接、序列号、重传、拥塞控制的数据结构,将HTTP包加上TCP层,发送给IP层,IP层加上IP头,发送给MAC层,MAC层加上MAC头,从硬件网卡发出去

网络包会先到达网络1的交换机。我们常称交换机为二层设备,这是因为,交换机只会处理到第二层,然后它会将网络包的MAC头拿下来,发现目标MAC是在自己右边的网口,于是就从这个网口发出去

网络包会到达中间的linux路由器,它左边的网卡会收到网络包,发现MAC地址匹配,就交给IP层,在IP层根据IP头的信息,在路由表中查找下一跳在哪里,应该从哪个网口发出去。在这里,最终会从右边的网口发出去。我们常把路由器称为三层设备,因为它只会处理第三层

从路由器右边的网口发出去的包会到网络2的交换机,还是会经历一次二层的处理,转发到交换机右边的网口

最终网络包会被转到linux服务器B,它发现MAC地址匹配,就将MAC头取下来,交给上一层。IP层发现IP地址匹配,将IP头取下来,交给上一层。TCP层会根据TCP头中的序列号等信息,发现它是一个正确的网络包,就会将网络包缓存起来,等待应用层的读取。

应用层通过socket监听某个端口,因而读取的时候,内核会根据TCP头中的端口号,将网络包发给相应的应用

HTTP 层的头和正文,是应用层来解析的。通过解析,应用层知道了客户端的请求,例如购买一个商品,还是请求一个网页。当应用层处理完 HTTP 的请求,会将结果仍然封装为 HTTP 的网络包,通过 Socket 接口,发送给内核。

内核会经过层层封装,从物理网口发送出去,经过网络 2 的交换机,Linux 路由器到达网络 1,经过网络 1 的交换机,到达 Linux 服务器 A。在 Linux 服务器 A 上,经过层层解封装,通过 socket 接口,根据客户端的随机端口号,发送给客户端的应用程序,浏览器。于是浏览器就能够显示出一个绚丽多彩的页面了。

socket接口大多数情况下操作的是传输层,更底层的协议不用它来操心,这就是分层的好处。

在传输层有两个主流的协议TCP和UDP,所以我们的socket程序设计也是主要操作这两个协议。这两个协议的区别是什么呢?通常的答案是下面这样的

TCP是面向连接的,UDP是无连接的

TCP提供可靠交付,无差错、不丢失、不重复,并且按序到达;UDP不提供可靠交付,不保证不丢失,不保证按顺序到达

TCP是面向字节流的,发送时发的是一个流,没头没尾;UDP是面向数据报的,一个一个的发送

TCP可以提供流量控制和拥塞控制,即防止对端被压垮,也防止网络被压垮

这些答案没有问题,但是没有到达本质,也经常会让人产生错觉。比如,下面这些问题:

所谓的连接,容易让人误以为,使用 TCP 会使得两端之间的通路和使用 UDP 不一样,那我们会在沿途建立一条线表示这个连接吗?

我从中国访问美国网站,中间这么多环节,我怎么保证连接不断呢?

中间有个网络管理员拔了一根网线不就断了吗?我不能控制它,它也不会通知我,我一个个人电脑怎么能够保持连接呢?

还让我做流量控制和拥塞控制,我既管不了中间的链路,也管不了对端的服务器呀,我怎么能够做到?

按照网络分层,TCP 和 UDP 都是基于 IP 协议的,IP 都不能保证可靠,说丢就丢,TCP 怎么能够保证呢?

IP 层都是一个包一个包的发送,TCP 怎么就变成流了?

从本质上连接,所谓的建立连接,其实是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,并用这些的数据结构来保证面向连接的特性。TCP无法左右中间的任何通路,也没有什么虚拟的连接,中间的通路根本意识不到两端使用了TCP还是UDP。

所谓的连接,就是两端数据结构状态的协同,两边的状态能够对得上。符号TCP协议的规则,就认为连接存在;两面状态对不上,连接就算断了

流量控制和拥塞控制其实就是根据收到的对端的网络包,调整两端数据结构的状态。TCP协议的设计理论上认为,这样调整了数据结构的状态,就能进行流量控制和拥塞控制了,其实在通道上是不是真的做到了,谁也管不着。

所谓的“可靠”,就是两端的数据结构做的事情。不丢失其实是数据结构在“点名”,顺序到达其实是数据结构在“排序”,面向数据流其实是数据结构将零散的包,按照顺序捏成一个流发给应用层。总而言之,“连接”两个字让人误以为功夫在通路,其实功夫在两端。

当然,无论是用 socket 操作 TCP,还是 UDP,我们首先都要调用 socket 函数。


int socket(int domain, int type, int protocol);
socket函数用于创建一个socket的文件描述符,唯一标识一个socket。我们把它叫做文件描述符,因为在内核中,我们会创建类似文件系统的数据结构,并且后继的操作都有用到它。

socket 函数有三个参数。

domain:表示使用什么 IP 层协议。AF_INET 表示 IPv4,AF_INET6 表示 IPv6。

type:表示 socket 类型。SOCK_STREAM,顾名思义就是 TCP 面向流的,SOCK_DGRAM 就是 UDP 面向数据报的,SOCK_RAW 可以直接操作 IP 层,或者非 TCP 和 UDP 的协议。例如 ICMP。

protocol 表示的协议,包括 IPPROTO_TCP、IPPTOTO_UDP。

通信结束后,我们还要像关闭文件一样,关闭 socket。

针对TCP应该如何编程

网络协议是如何实现的,网络协议基本原理

对于UDP来讲,没有所谓的连接维护,也没有所谓的连接的发起方和接收方,甚至都不存在客户端和服务端的概念。大家都是客户端,也同时是服务端。只要有一个socket,多台机器就可以任意通信,不存在哪两台机器是属于一个连接的概念。因此,每一个UDP的socket都需要bind,。每次通信时,调用 sendto 和 recvfrom,都要传入 IP 地址和端口

源链接:

https://blog.csdn.net/zhizhengguan/article/details/121640391

作者:网络

编辑:IT运维技术圈




波哥

IT行业近二十年的IT老炮。常年潜伏于国企、各一二线大厂中。硬件集成入行,直至虚拟技术、容器化。岗位历经系统集成、DBA、全栈开发、sre、项目经理、产品经理、部门总监。

主要作品:

IT类资源汇聚门户:https://www.98dev.com

各大短视频平台:98dev

各大主要技术论坛博客:IT运维技术圈

长视频教学作品:《波哥讲网络》《波哥讲git》《波哥讲gitlab》

小程序:IT面试精选

构建技术社区:+V itboge1521 入学习交流群

这篇文章到这里就结束了,谢谢阅读!希望可以帮助到大家,阅读完网络协议是如何实现的 详细介绍:网络协议基本原理这篇文章,你是否有新的收获?如果是的话,帮忙分享给你的朋友,让他们也有机会受益!

本文发布者:管理员,不代表寂寞网立场,转载请注明出处:https://www.jimowang.com/p/51073.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 jimowangmail@126.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2023年7月22日 21:51
下一篇 2023年7月22日 22:02

相关推荐

  • 不思议迷宫矩阵芯片怎么获得,矩阵芯片有什么用

    哈喽,小伙伴们大家好,今天许素桦废话就不多说了,直接上游戏攻略干货,标题:不思议迷宫矩阵芯片怎么获得,矩阵芯片有什么用,还有关于芯片,矩形,代码的一些游戏攻略干货,希望你们能通过这篇文章很好的掌握其中的技巧,下面我就来为大家全部一一解析! 不思议迷宫矩形芯片怎么得呢,矩形芯片通过触发彩蛋可以获得,下面就一起来看看许素桦给大家带来的不思议迷宫矩形芯片获取攻略吧…

    2024年3月3日
  • 为什么DNF游戏启动后自动全屏?如何调整窗口模式?

    《为什么DNF游戏启动后自动全屏?如何调整窗口模式?》一文深入探讨了DNF(地下城与勇士)启动后自动全屏的原因,并提供了详细的调整窗口模式方法。文章从游戏设计初衷、用户体验、兼容性等多个角度分析了全屏模式的必要性,同时吐槽了部分玩家对全屏模式的误解。此外,文章还手把手教玩家如何通过快捷方式、游戏设置、注册表等方式调整为窗口模式,并针对常见问题给出了解决方法。…

    2025年3月23日
  • 王者赛季s33什么时候结束-s33赛季几号开始几号结束

    小伙伴们你们好,冯少杰很高兴又和各位见面了,今天主要来讲讲王者赛季s33什么时候结束,s33赛季几号开始几号结束,以及关于赛季,段位,玩家这些的游戏相关游戏攻略干货,成功的路上不会一帆风顺,每一个成功的背后都有一个惊人的故事。 在王者荣耀中,每个赛季的持续时间被设定在三个月左右,这样的设定好处很明显,既不会因为时间太长失去动力,又不会影响学习和生活。 按照这…

    2024年3月8日
  • 2025年cf抽奖火麒麟的概率有多高?

    摘要:2025年的穿越火线(CF)抽奖活动中,火麒麟作为稀有道具,获取概率成为玩家关注的焦点。本文从游戏抽奖机制、概率分析、玩家心态等角度,探讨火麒麟在2025年的抽中几率。通过数据推测和玩家反馈,揭示抽奖背后的秘密,同时以幽默轻松的语言,帮助玩家理性看待抽奖,享受游戏乐趣。 穿越火线抽奖机制:火麒麟为何如此稀有? 提到穿越火线(CF),火麒麟作为一款经典武…

    2025年2月28日
  • 苹果手机怎么建立文件夹 附:在iphone备忘录便签里建文件夹

    大家好,今天陈文涵为大家带来一些关于苹果手机怎么建立文件夹,在iphone备忘录便签里建文件夹的分享,还有关于备忘录,便签,文件夹,手机,苹果这些的实用干货和最新内容分享,作为一名老手,我深知思路的重要性。因此,我写下这篇文章,希望能给新手提供一些指导和建议。 iPhone手机上有很多非常实用的辅助工具,备忘录便签类软件就是人们的常用辅助工具之一。通过备忘录…

    2023年8月27日
  • 八岐大蛇御魂搭配攻略:揭秘最强阵容打造之道

    文章目录:八岐大蛇御魂搭配之基础篇八岐大蛇御魂搭配之强化篇八岐大蛇御魂搭配之实战篇八岐大蛇御魂搭配之进阶篇随着《阴阳师》的持续更新,八岐大蛇作为游戏中的顶级式神,其御魂搭配一直是玩家们津津乐道的话题,究竟如何搭配御魂,才能让八岐大蛇在战场上所向披靡?我们就来揭开八岐大蛇御魂搭配的神秘面纱。八岐大蛇御魂搭配之基础篇(1)基础属性提升八岐大蛇的基础属性是御魂搭配的基础,根据最新数据显示,基础生命值、攻

    2026年2月22日