socket到底是什么?

作者: 小白debug分类: 计算机技术 发布时间: 2022-12-25 09:28:33 浏览:212258 次

socket到底是什么?

sdhgljas:
讲的很好啊,本来就是专业的东西,重要的是逻辑条理,而不是白话

【回复】知道,理解,会用,还能讲明白,也就是有逻辑,有条理,有层次的讲明白,才是真的厉害👍
【回复】回复 @小白debug :linux内核可以进行处理,那Windows不行吗
甘于可轻:
讲的好,socket建立tcp连接具体流程这个面试被问到过[吃瓜]

【回复】努力学习吊打面试官[doge][doge]
【回复】回复 @小白debug : 线下倒是可以打他一顿[doge]
【回复】哪个厂哪个岗位啊[哦呼]
北约绰号铁公鸡:
可以把socket想象成打电话,电话号码就是IP地址,打电话找谁就是端口号,协议就像是你说的是方言还是普通话,tcp就像是你每说一句话,对方都要说一声:"清楚明白"!udp就是,什么都不管,只管说就行了,也不管对方是否明白!tcp连接过程,就像是,打电话之后先说:"喂,你是xxx吗?",对方回答:"我是xxx!",然后你说:"好的,下面开始通话!"

【回复】回复 @111434343 : 可能讲的是tcp确认应答机制,连接肯定只要一次就可以了。
Ayana-chan:
我之前小白时期太闲了用socket手撸了一个http协议,修bug过程中迅速学会了各种计网知识[初音未来_哭了]

【回复】用套接字工具写完http客户端的,完事才知道RFC2616
【回复】我也用java手写了一个http服务器[吃瓜]
【回复】回复 @tytyww :我计网专业知识依然局限于教学考试,那些socket什么的都是web项目实践出来的。我们有一节课是读tcpip源码,我只能说也是完全没用
wzx真无聊:
和网上那些二手资料一样,都没有给一个明确的定义,到底什么是socket,举例和比喻并不是定义

【回复】回复 @小白debug :你已经说得很明白了,再深入就涉及到底层复杂的实现细节了。做起来困难不说,看的人仅通过看视频就想理解也纯属扯淡。以前学网络的时候就纠结过为什么操作系统没有暴露tcp udp这些协议的使用给应用,说白了太底层了,用了一层socket封装,通过socket去操作底层协议的具体实现,应用程序只需要用socket暴露的API就好了
【回复】直接抛出权威定义我相信也会有人说“看百科就够了,用得着你说?”,视频里已经提到了是怎么来的以及内核实现,结果还是觉得没讲清楚,我深知没办法让所有人满意,所以只能到这里了。
【回复】来看这视频的无非是想通过一个形象的方式去理解 你要是想要定义自己不会谷歌吗?
贝者礻申:
看到热评第一问怎么用C语言实现继承,我简单说一下吧(只是一个思路,和实际实现会有区别) 比如说你想实现了sock虚类,要支持收发,就可以 typedef struct { void send(void*); void recv(void*); } sock_ops; 然后所以sock对象都实现成 typedef struct { void *data; sock_ops* ops; } Sock; 接着,比如你实现了TCP,就可以定义一个 tcp_ops tcp的sock实例就是 sock *sock1 = malloc(sizeof(sock)); sock1->data = create_tcp(...); sock1->ops = tcp_ops; 然后要让它发数据就是 sock1->ops->send(sock1->data); 如果你有一个数组sock* sockets【10】; 那就可以 for(int i = 0; i < 10; ++i) { sockets【i】->ops->send(sockets【i】->data); } 这样,sockets内部的每个元素都可以是不同的协议,而你不需要知道具体什么协议。

【回复】这个叫多态,继承应该是指结构体嵌套类似
【回复】回复 @ahahahahahaszy :塞的是函数指针
【回复】不是,C的struct怎么能塞函数的
动画奇谭:
这个动画做的太牛啦,UP前途无量哇!!!我要入股!!!

【回复】回复 @Not-404-Found : 知天易
给自己1个机会:
结构体指针; 函数指针; 不停的封装业务; 实现继承;

大白_info:
hi,socket的多路复用是什么?为什么aio一直流行不起来? 事件驱动和多路复用的关系?[doge][doge][doge][doge][doge][doge] 我只是路过。

【回复】aio在互联网不多吧,但在游戏用很多[doge]
【回复】[doge][doge]这些问题都很专业哈,非常nice
进修的阿猿:
socket是对TCP/IP协议的封装,它的出现只是使得程序员更方便地使用TCP/IP协议栈而已。socket本身并不是协议,它是应用层与TCP/IP协议族通信的中间软件抽象层,是一组调用接口(TCP/IP网络的API函数) - 内核设计 - 数据结构 - 定义sock为最基础的数据结构,来定义可能会用到的收发缓冲区。 - 之所以没有定义ip和port是因为不是所以的socket都是网络连接,比如UNIX DOMAIN SOCKET,用于本机器进程通信。 - inet_sock继承sock加入ip和sort字段。 - inet_connection_sock继承inet_sock加入accept队列,数据包分片和握手失败重试次数 - tcp_sock继承inet_connection_sock,加入了TCP特有的滑动窗口 - API设计 - 因为socket是读写,文件系统也是读写(Linux一切皆文件),索性封装到操作系统内核中,通过fd唯一标识sock。有了数据结构我们需要定义api来给应用层调用,比如send,recv,bind,listen,connet - 网络传输(以TCP为例) - 通过connect(句柄fd,ip,port)找到内核中的sock结构 - 发起三次握手建立连接 - send(句柄,消息)向缓冲区(本质上是一个链表)加入消息数据。 - recv(句柄)从发送缓冲区中找到消息数据。 - 唯一标记客户端 - 通过发送发ip,port,接收方ip和port来标记唯一客户端 - 通过四元组生成hash key,这样通过hashtable快速拿到客户端

黑天才照相:
可不可以理解 socket就是一套api connect方法就是封装了三次握手 send方法只需要传数据 不关心报文格式的封装 就是屏蔽了底层的实现

z992凡夫俗子:
什么是Socket?中文翻译套接字。 Socket主要用于网络通信方面。 在操作系统层面上Socket做几个action。 bind、listen、con...

XP异常の法兹:
视频做的真好。 短短10分钟不到的视频,让本小白研究1小时。

真火蜂哥:
讲的不错。但是怎么说呢,socket是个比较复杂的概念。如果没有实践,估计很多小伙伴会听的一头雾水。想要明白具体概念,需要明白标准定义这件事所表达的意义。很多初学者都是从实现层面去思考问题,要想充分理解这个概念,需要从设计思维、行业标准和实现多个层面来结合理解。这也是为啥网络编程要讲osi七层参考模型。

北约绰号铁公鸡:
我想知道的知识比较细致,我想知道socket是如何实现的(Windows下socket的具体代码,linux暂时用不上),我想在Windows下用lsp全局过滤53端口,将DNS协议改为DNS-over-tls协议!DNS-over-tls协议我已经实现了!就是不知道怎么全局hook socket调用!所以,我想知道Windows下socket调用的全部过程!

【回复】回复 @真火蜂哥 :我只想实现过滤socket,Windows有lsp机制实现socket过滤,但是这机制不能过滤DNS协议实现,Windows下的DNS协议是通过rpc机制调用DNS服务,由DNS服务通过socket实现的,但lsp机制对DNS服务无效,所以我才想问,怎么能过滤通过socket的DNS协议
【回复】只能说,不同的操作系统,不同的网卡设备,你的socket编程导致的调用实现过程可能不同。参考osi七层参考模型。然后提醒一下,socket只是一个接口外观,就跟我们使用插头一样,你只需要知道插头怎么插就行了,不需要知道实现,对于应用层开发软件人员同理,你只需要知道sock怎么用,具体实现可能和系统,驱动,硬件都相关。
还得华子:
socket的一系列API就相当于系统调用,之后转为内核态让os处理。既然sock被抽象为文件,那每个网络进程的打开文件表就会有指向系统打开文件表中sock表项的指针,进程打开文件表是线性存储且每个表项等长,所谓的fd就是一个表项的偏移地址,os返回sock的fd给用户,之后用户通过fd而非sock文件名请求sock文件服务 这样理解没问题吧up

马尔卡克斯基:
当我第一次在书上看到套接字这三个字的时候 我人是懵逼的

科技猎手 编程语言 计算机 程序员 IT 编程 python Java socket 计算机网络基础

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!