请选择 进入手机版 | 继续访问电脑版

网络通信的基础知识

[复制链接]
丶禁飞 发表于 2021-1-1 10:33:16 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1. 两台主机是如何通信的

这里,我们不探讨两台主机是如何举行网络毗连的,而是探讨两台主机在创建了网络毗连后,是如何通过网络举行通信的。如果学习过《盘算机网络》的话,你一定知道雷同下面的这张图“数据在各层之间通报的过程”。这张图是站在盘算机网络协议栈的角度,来说明白两台盘算机上的两个历程是如何通信的。既然是协议,协议就是规则,是抽象的。所以通过这个图,我们只知道数据是如何抽象地在网络协议层之间活动的;而且知道两台主机之间的数据传输,实质上是通过它们之间的“物理传输媒体”实现的,简朴明白为网线就行,因为这不是我们讨论的重点。但是,在一台主机内部,我应用程序的数据是如何活动到网线的?从网线获取的数据又是如何来到我的应用程序的?这两个问题的答案从这张图上是得不到的。因为这涉及到使用系统的知识。

2. 历程的数据是如何跑到网线上的(基于Linux)

这张图反映的是使用系统的知识。简朴来说用户历程把要发送的数据放在用户缓冲区,然后调用系统调用write从而进入内核,进入内核之后的事情就是使用系统负责啦,使用系统会把你用户缓冲区中的数据复制到内核缓冲区,再将内核缓冲区的数据复制到网卡,再从通过“网线插口”通报到网线上。如果用户历程吸收数据,流程反过来就行了。(这张图来自哪本书,求告知呀)

3. 套接字(Socket)是啥

我们先来看看如果没有套接字会怎么样。可以看出,程序员编写程序时,将直接面对这些复杂的协议,即低效又容易堕落。

有了套接字之后,这样的:

所以,Socket是应用层与TCP/IP协议族之间软件抽象层,它是一组接口。在设计模式中,Socket实在就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口背面,用户只需要调用简朴的Socket提供的接口,而复杂的网络协议由socket去实现。我们无需深入明白tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循网络协议标准的。
4. 用户历程和套接字的关系

要实现两台主机上两个历程之间的通信,我们的用户历程大概说应用程序,只需要和Socket打交道。Socket会把用户历程的数据发送出去,也会吸收到你需要的数据然后拿给用户历程。所以说,人们常说的IO模子,BIO、NIO和AIO,select、poll和epoll这些概念,都是用户历程和套接字打交道的方式,人们探究的就是这两者之间怎么打交道才气使得用户历程更加高效。


来源:https://blog.csdn.net/qq_42052956/article/details/111983126
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )