Socket这样回答面试官还拿不到offer?

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 对TCP/IP、UDP、Socket,套接字这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。

一、前言


对TCP/IP、UDP、Socket,套接字这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:

  1. 什么是TCP/IP、UDP?
  2. TCP、UDP的区别是?
  3. 什么是三次握手?
  4. Socket在哪里呢?
  5. Socket是什么呢?
  6. 你会使用它们吗?
  7. 计算机网络分多少个层次?
  8. 线程和进程的区别是?
  9. 内存池,进程池,线程池是?
  10. TCP断开连接的具体过程,其中每一步是为什么那么做 ?
  11. 传输控制层,网络层,数据链路层是什么?
  12. 数据传输的一系列流程是什么?
  13. 应用层中的App上位机软件是怎么跟服务器交互的?


二、正文


OSI 7层模式  如下   ↓↓↓↓↓↓↓↓↓↓↓↓

首先要从计算机底层的分层开始讲起。俗称OSI 7层参考模型。计算机一共分为7层每一层管理相应的职能。计算机分层主要是达到解耦的目的。层与层之间是可以有接口调用的。

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输控制层
  5. 网络层
  6. 数据链路层
  7. 物理层

image.png


今天这一章节讲解的是Socket的底层原理,表示层与会话层被应用层都包含起来了,那么我们就从包含之后开始叙述。应用层我们都熟悉,就是基于应用层做的一系列开发调的一些API函数。

  1. 应用层
  2. 传输控制层
  3. 网络层
  4. 数据链路层
  5. 物理层

image.png


三、传输控制层 如下 ↓↓↓↓↓↓↓↓↓↓↓↓


平时开发中数据库连接的时候就是一个Socket连接,Socket连接也就是计算机底层的IO输入输出,那么就出现了问题 如果两个Send发送给一个数据源应该建立几个连接呢?还是可以建立一个连接?

image.png通过Linux的nc指令 与百度的80端口建立连接,连接之后看下图。多了一个nc的连接。所以问题来了nc到底是一个什么东西?为什么可以与百度的80端口建立连接呢?


image.png


image.png


Linux下nc连接的作用是


  1. 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  2. 端口的扫描,nc可以作为client发起TCP或UDP连接
  3. 机器之间传输文件
  4. 机器之间网络测速


通过如下图继续详细的介绍吧。应用层的app想与别人建立连接的流程是


  1. 经过kemel内核的传输控制层(内核是什么东西向上翻阅一下)
  2. 利用传输控制层的TCP进行操作,下图讲解了什么是TCP!
  3. 很多文章都写发完三次握手包就已经完成创建了或者说是已经连接成功了,其实是不对的 ,双方建立连接之后必须是建立双方的资源之后才算是正常的建立连接 。如下图
  4. xshell效果图已经放在该图的下面。Recv-Q与Send-Q是两个建立连接的资源队列,应用层中的程序取数据时都是从这里取的。
  5. 资源建立完成之后 也就是我们应用层的在new Socket的时候返回了一个socket。
  6. 资源创建完成之后 完成了三次握手 下面就开始Send发送数据了,发送数据也是一样的,数据放入资源队列,如果服务端也想发送数据也是放入服务端的资源队列。这样就是两个资源队列的操作来回操作了。这样操作的好处与目的是解耦了与下面连接的虚无的这个过程。
  7. 四次分手 -> 释放端口号-> 释放资源(四次分手这里简单看一下,后面会有专门讲解四次分手的流程)

image.png

image.png什么是Socket?

  1. 我这里不讲具体的一大串的含义,想看的百度搜 什么是Socket 找百度百科就可以了!我这里只给出干货!
  2. Socket是一个套接字,它是一个四元组。什么是四元组呢?如下图↓↓↓↓
  3. 比如举个例子:现在的浏览器都支持多个标签页,为什么每个标签页中的百度谷歌搜索不同的问题的时候,百度返回来的内容体为什么没有显示错呢? 这个就是和Socket有关!
  4. IP代表着某一个主机的地址,Port的作用是 寻找一个主机中无数个进程中的一个。 一个主机中有65535个端口号。那么问题来了 IPA连接IPB的同时可以连接IPC吗?

image.png

IPA连接IPB的同时可以连接IPC吗? 如下图↓↓↓↓↓↓

  1. 再向外界发送数据包时,只要返回的数据包能确认是张三还是李四就即可,所以四元组中也可以理解成 对象中嵌入一个List列表。好比我们做数据库主表外表一对多的时候  通过对象取里面的list列表,再从list列表中取对应的下标值一样。
  2. 所以 IPA:1+IPB:80与IPA:1+IPC:80是可以区分出来的!目标地址不同   所以是12万

image.png

一个电脑是否有两个一样的端口号?加网卡!

  1. 答案是可以的
  2. 我的电脑有两个IP地址 一个是物理地址一个是本地地址,做了以下的程序测试
  3. 这块讲解的不太明细  请谅解! 这里是通过视频学的 做的一些程序测试都不存在了 这里了解就好

image.pngimage.pngimage.png

四次分手流程(四次分手就是释放资源的一个过程) 如下↓↓↓↓↓↓

  1. FIN代表开始分手了,知会你一声
  2. Fin+Ack代表我知道了这件事
  3. Fin代表我同意了并且我也想跟你分手
  4. Ack代表确定完毕即将等待超时释放资源
  5. 完成分手

image.png

补充一下数据发送的细节并且稍微普及一下DDOS

  1. 发送请求之后 服务端给我们返回一个syn,syn的大小是由当前的MTU绝对的。MTU是最大的传输单元,普遍大小是1500。如果一次传输的数据大于1500则分多次发送,大家可以利用抓包指令监控包的情况。先安装tcpdump。
  2. Linux的指令是 tcpdump -nn -i etho port 80    。   nn代表不把地址转换成名字  80代表抓哪个端口的包,具体的详细指令请 Linux抓包指令参考
  3. 下图是数据发送的一个流程 ①.首先向百度发一个握手的请求包,②.百度向本地回了一个同意包,③.本地向百度回一个收到确认包开始交易。④.本地先向百度发送一个当前浏览器支持哪些算法的列表包,所以是168字节。⑤.1460和1321是两次内容包,一次发不完所以分两次。⑥.之后本地又向百度发一个ack的确认包,告诉百度当前内容已收到。并且开始四次分手 ⑦.本地向百度请求分手,⑧.百度告诉本地收到了并且我 也请求分手。⑨.最后本地向百度请求ack确认包 结束当前操作! 分手完毕!
  4. ddos是分布式拒绝服务。

image.png


四、网络层 如下↓↓↓↓↓↓


通过如下图我们讲述的知识是:

  1. IP:ip地址是由子网掩码生成的,通过二进制按位与运算的方式。它是4个字节,8个位,每一位的范围是0-255。换算流程以及广播地址的换算,网络地址的换算如下图↓↓↓↓
  2. Router:计算机底层的路由表,数据转发是通过路由表走的。Linux输入router -n 。 结合下图下表
  3. DNS
  4. 子网掩码
  5. 网关:网关是什么?举个例子,相当于古代一个当官家庭的大人,妻子或者下人所有官场上的反馈与传达什么意思都要依靠这个父亲。网关也是这样,一个局域网中的所有数据想要发送到外网中必须依靠这个网关。
  6. 网络层的工作原理流程

image.pngimage.png

Destination Gateway Genmask Flages Metric Ref Use IFace
0.0.0.0 172.17.111.253 0.0.0.0 UG 100 0 0 ehto
172.17.96.0 0.0.0.0 255.255.240.0 U 100 0 0 ehto
为路由目标,可以是网络或者主机的IP地址 包含默认的网关或通过其可访问主机或网络的网关 包含网关后的网络或主机的子网掩码 表示该条路由从哪个设备出去

image.png网络层的工作原理(发给谁拿谁的IP地址与路由表子网掩码的Genmask做二进制按位与):

  1. 例子百度IP:220.181.38.149 子网掩码:255.255.255.0
  2. 二进制百度:11011100.10110101.00100110.10010101
  3. 二进制子网:11111111.11111111.11111111.00000000
  4. ①百度的IP通过按位与子网的结果与destination作比较。如果正确就发出到GateWay到网关,如果错误下一条路由继续处理。②如果是局域网传输主机A按位与子网的结果与destination作比较如果符合直接校验网关,当网关是0.0.0.0时说明放行一切数据,说明局域网传输不需要网关。 所以直接转发到目标IP。③ 接①搭配下图继续聊。如果正确发出到GateWay网关后它的数据包中都包含着哪些数据呢?看图!
  5. 如图得知 下面走到了数据链路层!

网络层的作用:寻找网关地址或者不通过网关直接内外转发。网络层只关心谁到谁的位置。

image.png


五、数据链路层 如下↓↓↓↓↓↓↓


方便理解,给出一个不权威的解释。

  1. 客户端制造Syn包发送到网关
  2. 网关根据MAC地址收到后判断目标IP地址发现不是自己的,于是进行转发给上一级网关,也就是节点B,并且修改MAC地址为节点B的IP
  3. 光纤运营商根据MAC地址收到后,判断目标IP地址,发现也不是自己的,于是再次进行转发给上一级网关也就是节点C,并且修改MAC地址为节点C的IP
  4. 企业接入网光纤根据MAC的地址收到后判断目标IP地址,发现不是自己的,于是进行转发到公司服务器也就是端点B。并且修改MAC地址为端口B的IP
  5. 百度服务器端(端点B)收到后,判断目标IP地址发现是自己的于是收下。

image.png


六、最后总结一下总体流程


  1. 先请求MAC地址,如果有就开始三次握手接下来按照上面就通了。
  2. 没有的话要先通过ARP协议请求一个数据链路层的硬件地址,拿到之后就可以执行①的操作了
  3. 用程序校验一下↓↓↓↓↓
  4. ①对80端口的抓包,②抓包之前我把地址删掉了所以这里会先请求一遍ARP协议拿到硬件地址返回了00:50:56:f7:53:2b,这里是广播的发给了局域网的所有人,但是只有192.168.150.2才能给我返回③拿到之后开始三次握手,④发收内容体包,⑤最后四次分手断开

image.png

七、面试技巧流程

自我介绍什么的我就不说了,只说一下技术,拿Socket举例

常见的小白场景就是

面试官:简单的介绍一下Socket 应聘人:你好面试官,不好意思我没用过,好像是通信用的。

常见的初级场景就是。

面试官:简单的介绍一下Socket 应聘人:你好面试官,Socket是一个安全套接字,用于通信。一个发送点一个接收点,有多种通信协议比如UDP/TCP,TCP是三次握手,UDP是不用握手的。UDP比TCP更高效。如果需要交互判断的选择TCP,如果不需要交互判断的选择UDP。

以上没有加分项,或许你可以这样,中级场景

面试官:简单的介绍一下Socket 应聘人:你好面试官,Socket我了解的是: A=>安全套接字,要想聊Socket就要深入计算机底层我们可以从OSI7层模型说起,描述每一层的作用。 B=>TCP是什么,告诉面试官为什么是面向连接的可靠的传输协议。TCP三次握手都做了哪些事情比如Syn包,Ack包,Syn+Ack包。 C=>  通过交互流程可以展开ddos简单介绍一下表明你懂的比较多。你是个有干货的人,你是个对技术敏感的人。乐于学习的人

告诉面试官Socket在每一层都做了什么以及Socket通信的时候是如何和外界联系的【加分项】


相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
24天前
|
缓存 前端开发 JavaScript
"面试通关秘籍:深度解析浏览器面试必考问题,从重绘回流到事件委托,让你一举拿下前端 Offer!"
【10月更文挑战第23天】在前端开发面试中,浏览器相关知识是必考内容。本文总结了四个常见问题:浏览器渲染机制、重绘与回流、性能优化及事件委托。通过具体示例和对比分析,帮助求职者更好地理解和准备面试。掌握这些知识点,有助于提升面试表现和实际工作能力。
60 1
|
2月前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
2月前
|
存储 移动开发 前端开发
「offer来了」面试中必考的15个html知识点
该文章汇总了前端面试中常见的15个HTML知识点,涵盖了从HTML文档的规范书写、doctype声明的作用到新兴的HTML5标签应用及移动端viewport设置等内容,旨在帮助求职者更好地准备相关技术面试。
「offer来了」面试中必考的15个html知识点
|
2月前
|
Web App开发 前端开发 JavaScript
「offer来了」1张思维导图,6大知识板块,带你梳理面试中CSS的知识点!
该文章通过一张思维导图和六大知识板块系统梳理了前端面试中涉及的CSS核心知识点,包括CSS框架、基础样式问题、布局技巧、动画处理、浏览器兼容性及性能优化等方面的内容。
|
6月前
|
Android开发 API
顺利通过阿里Android岗面试,已拿offer
顺利通过阿里Android岗面试,已拿offer
顺利通过阿里Android岗面试,已拿offer
|
6月前
|
设计模式 缓存 前端开发
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
真的强!借助阿里技术博主分享的Android面试笔记,我拿到了字节跳动的offer
|
6月前
|
前端开发 Java 物联网
Android开发面试基础,3天拿到网易Android岗offer
Android开发面试基础,3天拿到网易Android岗offer
|
6月前
|
Android开发 Java 容器
顺利收获Offer,字节Android面试必问
顺利收获Offer,字节Android面试必问
|
6月前
|
算法 Java C++
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
刷题两个月,从入门到字节跳动offer丨GitHub标星16k+,美团Java面试题
|
6月前
|
Dubbo NoSQL Java
太为难我了,阿里面试了7轮(5年经验,拿下P7岗offer)
今年的大环境非常差,互联网企业裁员的现象比往年更严重了,可今年刚好是我的第一个“五年计划”截止的时间点,说什么也不能够耽搁了,所以早早准备的跳槽也在疫情好转之后开始进行了。但是,不得不说,这次阿里面试真的太难为我了,可以说是和面试官大战了7个回合,不过好在最后给了offer。

热门文章

最新文章