问一个面试题 http 和 socket 有什么区别和联系 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
abug
V2EX    程序员

问一个面试题 http 和 socket 有什么区别和联系

  •  
  •   abug 2020-01-31 22:04:05 +08:00 5682 次点击
    这是一个创建于 215 天前的主题,其中的信息可能已经有所发展或是发生改变。
    求解惑
    16 条回复    2024-11-07 09:26:07 +08:00
    fyyz
        1
    fyyz  
       2020-01-31 22:21:11 +08:00
    socket 是 tcp 连接,http 是建立在 tcp 连接上的
    BingoXuan
        2
    BingoXuan  
       2020-01-31 22:31:26 +08:00
    根据 osi 分层,socket 属于传输层,http 属于应用层。

    就如 socket 是连接你我的管道,但管道中传送东西流程和规范的最佳实践之一就是 http
    iceheart
        3
    iceheart  
       2020-01-31 23:32:52 +08:00 via Android
    大概类似快递跟汽车的关系吧
    railgun
        4
    railgun  
       2020-01-31 23:46:49 +08:00
    附加题,socket 和 tcp 有什么区别和联系?
    WordTian
        5
    WordTian  
       2020-01-31 23:56:18 +08:00 via Android   1
    socket 只有选择 INET 系列协议族,且选择流模式,才可能和 http 协议发生联系。就不是一个层次的东西,区别太大,很难并列到一起说的
    jinliming2
        6
    jinliming2  
       2020-02-01 00:35:20 +08:00 via iPhone
    socket 是一种特殊的文件,这种文件又分为 TCP、UDP、SCTP 等几种类型。
    在 C 语言中使用 socket 函数来创建一个 socket,在创建 socket 的时候,参数中需要指明 socket 的类型是 TCP、UDP 还是 SCTP 等。
    jinliming2
        7
    jinliming2  
       2020-02-01 00:38:22 +08:00 via iPhone
    HTTP 则是 建立在应用层的一种协议,它下面可以是由 TCP 来支撑也可以由 UDP 来支撑,或者在 UnixSock 中也可以使用 HTTP 协议。
    也就是说,HTTP 本质上与 TCP、UDP 这些 socket 没有太大的关联。
    xuanbg
        8
    xuanbg  
       2020-02-01 09:11:06 +08:00
    http 是应用层传输协议,socket 是计算机利用传输层协议(tcp/udp)建立的链接。先建立 socket,然后才能通 http。如果 http 是集装箱,那 socket 就是铁路。
    andj4cn
        9
    andj4cn  
       2020-02-01 09:37:21 +08:00
    socket 只是传输层的统一 API 接口规范。HTTP 是应用层传输协议,应用层的实现基于传输层,在实际代码实现中,HTTP 协议的代码实现需要调用传输层的 API,因此代码中 HTTP 协议实现使用的是 socket。
    qakito
        10
    qakito  
       2020-02-01 09:41:27 +08:00   3
    HTTP 是基于 TCP 的应用层协议,由 RFC 定义;
    socket 是现代操作系统提供的网络通信 API,由 POSIX 定义;所有的网络通信需要通过 API 来完成,包括 HTTP。
    另一套网络通信 API 是 sysv STREAMS。
    abug
        11
    abug  
    OP
       2020-02-01 15:29:04 +08:00
    @xuanbg 之前被面试的时候,我也是这么说的,我是 http 基于 socket,面试官说(加重语气) http 基于 socket?好像就这个问题那次就 gg 了
    nightwitch
        12
    nightwitch  
       2020-02-01 17:25:53 +08:00


    http 是在最上面的 Application Layer 应用层的协议,一般是基于 TCP 实现。把这两个连起来的 socket 类型叫做 Internet Domain SOCK_STREAM。除了这种类型以外 socket 还有其他类型。

    Internet Domain socket 是基于 TCP/UDP(忽略 raw socket)的一种连接方式,是把应用层协议和传输层连起来的一种方式。除了 Internet Domain socket 以外还有 Unix Domain socket, 通信不走 tcp/ip, 走内核。
    Xiweini
        13
    Xiweini  
       2020-02-02 14:22:12 +08:00
    socket 是 Linux 内核的一个内核功能, Windows NT 里面是叫 Winsock, 用户态中任何和网络有关的功能基本都要有个 system call, call 这个 socket APi
    liuxingdeyu
        14
    liuxingeyu  
       2020-02-02 14:54:35 +08:00
    socket 简单说就是 ip+port,ip 用来找到主机,port 用来找到程序,这样你的包就能找到主机和程序,再往上加规则就是 tcp 或者 udp 这层的协议,但是这俩响度还是比较抽象。http 就是利用现成的 tcp 或者 udp 再封装一层,本来是用来传超文本的,现在越来越复杂来。。。
    laoheshanjigong
        15
    laoheshanjigong  
       2020-02-02 16:14:07 +08:00
    http 是超文本传输协议,是一种应用层协议。
    socket 是网络编程中的一种抽象。

    所以它们并不是同一类东西。

    http:
    超文本传输协议,一种应用层协议。

    socket:
    一种编程抽象。
    按照 linux 的 socket 的抽象定义: http://man7.org/linux/man-pages/man2/socket.2.html

    socket 支持了 本地通讯,ipv4 ipv6, 等等不同网络层协议。
    和 tcp upd 等等不同的传输层协议。

    socket 屏蔽了这些抽象。使得对于上层的呈现使用同一的语义。
    BlackSnow
        16
    BlackSnow  
       363 天前
    @nightwitch 不好意思爬个了老帖

    想问一下您这个图的来源,觉得效果很直观,这种应该是矢量图吧
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1126 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:51 PVG 01:51 LAX 09:51 JFK 12:51
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86