V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vtexfan
V2EX  ›  互联网

OSI 七层参考模型几个小问题

  •  
  •   vtexfan · 2015-07-03 21:26:06 +08:00 · 3066 次点击
    这是一个创建于 3412 天前的主题,其中的信息可能已经有所发展或是发生改变。

    每次看TCP/IP相关的书籍,第一章就看不下去了,很几个问题希望熟悉的帮解答下:

    1.HTTP协议和TCP协议为什么不是在同一层呢?HTTP是表示层的东西,TCP是传输层的东西,那比如网页浏览器,它用的什么协议呢?用抓包工具抓到的HTTP,但根据书上讲的,传输的时候是用TCP或UDP中的一种对吧?这个概念不是很懂

    2.一个网络应用程序,它应该没用到表示层的任何东西吧?那这时候表示层的作用是什么呢?其实,这个问题和第一个问题差不多。主要是对每层的作用不是很懂。

    3.能不能以通俗、白话的方式讲讲七层每层的作用,拿浏览器或者一个普通的聊天程序举例。

    4.tcp/ip和OSI七层模型的分层是不一样的,有什么区别吗?比如应用层、表示层、会话层合并成tcp/ip的应用层,以前三层的东西在这一层中完成?

    5.谢谢!小白问题误笑!希望帮解答下,再次表示感谢!

    15 条回复    2015-07-05 16:54:51 +08:00
    wy315700
        1
    wy315700  
       2015-07-03 21:30:36 +08:00   ❤️ 1
    1 OSI 七层模型只是一个理论上的东西 并没有被实施
    2 现在广泛使用的是TCP/IP协议,没有表现层,传输层上面就是应用层。
    3 HTTP协议是包在TCP里的一个协议,你可以理解成一个瓶子里装了酒。
    gamexg
        2
    gamexg  
       2015-07-03 21:44:41 +08:00 via Android
    可以理解为一层层的套信封,TCP信封里面是http信封,http信封里面才是内容。TCP信封外面是链路层信封。

    每层都有自己的收件地址,发件地址。
    hahasong
        3
    hahasong  
       2015-07-03 21:47:47 +08:00
    一说有7层,另一说有4层,这些都只是逻辑上的分层而已。其实你理解4层的就好了
    7层:物理层,数据链接层,网络层,传输层,会话层,表示层,应用层
    4层:物理层 网络层 传输层 应用层

    高层包装了低层,相当于JAVA里面的流的包装类
    1.ip协议是网络层,tcp是传输层协议。http是包装了tcp,是应用层的协议,应用层可以理解成软件自己定义的协议。而tcp只是网卡上认的协议,更底层一些。知道俄罗斯套娃不,外层的娃娃就代表高级的协议。最里边的表示低级的物理层协议。依次类推。当软件从应用层发送数据的时候,应用层的协议被编码成网络层的协议,网络层的协议再编码成物理层的协议,直到最后编码成网线里的二进制电流
    发送出去。接收方接收的时候顺序相反,接收到二进制电流后,先解包成网络层协议,然后网络层协议被解码成应用层协议。最后软件在从应用层协议的返回里取回数据。
    2.你当会,表,应都是应用层就可以了
    3,4,5 tcp/ip协议这本书老厚了,又枯燥。我也是小白,反正这么理解,基本上就懂了
    Biwood
        4
    Biwood  
       2015-07-03 21:53:14 +08:00
    出门左转维基百科: https://en.wikipedia.org/wiki/OSI_model

    另外,HTTP 是应用层好吧。
    不同的抓包工具抓缺的结果也不同啊,Filddler 就是抓 HTTP 的数据,Wireshark 可以抓传输层的数据。
    vtexfan
        5
    vtexfan  
    OP
       2015-07-03 22:52:58 +08:00
    谢谢楼上几位兄弟,你们都太棒了。不过你们说的都有点晦涩,我脑筋不太好,还是有点不太明白。
    @hahasong 兄的解释,我就差那么一点点就能完全理解了。让我再仔细琢磨琢磨。
    akira
        6
    akira  
       2015-07-03 23:47:21 +08:00
    HTTP是在TCP的上层,TCP告诉你传了一堆数据,HTTP则告诉你这堆数据是啥。所以你抓浏览器的包,发现是TCP协议完全没有任何冲突的地方。
    lk09364
        7
    lk09364  
       2015-07-03 23:53:59 +08:00
    这个是 TCP 包:


    而 HTTP 在上图的 Data 里面。

    Image from http://liangjiabin.com/blog/2015/03/difference-between-tcp-vs-udp-protocol.html
    fzinfz
        8
    fzinfz  
       2015-07-03 23:56:29 +08:00
    $ netstat -ltup
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
    tcp 0 0 *:http *:* LISTEN -
    tcp 0 0 *:ssh *:* LISTEN -
    udp 0 0 *:ntp *:* -
    vtexfan
        9
    vtexfan  
    OP
       2015-07-04 02:20:23 +08:00
    谢谢楼上三位!
    @akira 兄,你这么说我好像明白了点什么,快要开窍了。那如果一个普通的网络应用程序,没用到HTTP之类的这种协议,就传输一个字符串"hello",那谁来告诉的这堆数据是啥?你明白我的意思吗?
    qw7692336
        10
    qw7692336  
       2015-07-04 04:15:34 +08:00 via Android
    不用那么麻烦,你找个抓包工具,抓一下传输层的包(TCP包),就懂了。我就是在玩过抓包之后秒懂的。你开chrome的开发者选项,切换到network拦,对比跟抓包工具抓到的包对比一下。之后你可以试着用telnet去发送HTTP请求。这时你应该知道TCP和HTTP之间的关系了。
    ryd994
        11
    ryd994  
       2015-07-04 08:46:20 +08:00 via Android
    严格来说,我们传输的数据,其实都是在网线上的电信号而已。然而,如果写个网页也要先从门电路写起的话估计程序员都要上吊了。7层模型是说网络上传输的数据可以在7个抽象层次上考虑。这样每一层都只要完成有限的职责即可,方便思考。比如Web程序员就不需要太多考虑TCP的事(当然优化的时候还是要的,然而不懂TCP,程序也能跑),比如写个网游客户端就不需要考虑ARP查询。


    7层模型只是一种思考方式,方便交流而已。并非网络就一定有7层或者只有7层,全看个人怎么理解。实际的概念是很模糊的。

    能明白浏览器、路由器、交换机、HUB其实是在合作完成同一个任务,但不是在做同样的事情,就可以了。
    jasontse
        12
    jasontse  
       2015-07-04 13:10:09 +08:00 via iPad
    TCP 和 HTTP 并不冲突。和对方主机的 TCP 80 建立连接,上面传的东西是 HTTP。
    你的抓包工具只是识别出里面是 HTTP 的内容,然后以更友好的方式给你看。
    zeroday
        13
    zeroday  
       2015-07-05 09:06:21 +08:00
    HTTP 协议是 Web 工作的核心。

    HTTP 是通过 Internet 进行接受和发送数据的协议。它是在 TCP 协议之上,一般采用 TCP 的80端口。它是一种请求-响应的协议,浏览器客户端发送请求,服务器接受到数据后产生响应。

    在 HTTP 中,客户端通过一个连接和发送请求作为一个事务。服务器不能主动连接客户端,也不能给服务器发送一个回调连接。客户端与服务器都可以中断连接。

    HTTP 协议是一种无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系的。对于 HTTP 服务器,是不能识别两次请求是来自同一个客户端的。为了解决这一问题,Web 程序引入了 Cookie 来维护连接的可持续。
    vtexfan
        14
    vtexfan  
    OP
       2015-07-05 14:53:14 +08:00
    谢谢各位。前面的弄懂了,又产生了很多新问题,目前在啃书中。
    akira
        15
    akira  
       2015-07-05 16:54:51 +08:00
    @vtexfan 这时候,这个数据格式就是由应用程序自己定义的了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   938 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.